Root setara pengguna / sudo di Cygwin?


156

Saya mencoba menjalankan skrip bash di Cygwin.

Saya mendapatkan Must run as root, i.e. sudo ./scriptnamekesalahan.

chmod 777 scriptname tidak melakukan apa pun untuk membantu.

Saya telah mencari cara untuk meniru sudo di Cygwin, untuk menambahkan pengguna root, karena memanggil "su" menyebabkan kesalahan su: user root does not exist , sesuatu yang berguna, dan tidak menemukan apa pun.

Apakah ada yang mempunyai saran?


halo KenB, bisakah Anda memberi kami detail lebih lanjut tentang whatskrip yang ingin Anda jalankan? Tidak ada yang setara dengan 'sudo' di dalam shell cygwin - hak adalah hak dari pengguna win yang meluncurkan shell cygwin, jadi tautan KyleWpppd baik untuk menghindari kesalahan seperti "sudo unknown command". Dalam kasus Anda sepertinya ini adalah masalah khusus dengan skrip yang ingin Anda jalankan.
Stefano

1
Jujur, ini adalah masalah yang sudah lama berlalu, dan saya tidak benar-benar ingat apa naskahnya. Terima kasih atas minatnya.
Ken Bellows

Jawaban:


225

Saya menjawab pertanyaan ini di SuperUser tetapi hanya setelah OP mengabaikan jawaban yang tidak membantu yang pada saat itu satu-satunya jawaban untuk pertanyaan itu.

Berikut adalah cara yang tepat untuk meningkatkan izin di Cygwin, disalin dari jawaban saya sendiri di SuperUser:

Saya menemukan jawabannya di milis Cygwin . Untuk menjalankan commanddengan hak istimewa yang lebih tinggi di Cygwin, awali perintah dengan cygstart --action=runasseperti ini:

$ cygstart --action=runas command

Ini akan membuka kotak dialog Windows yang meminta kata sandi Admin dan menjalankan perintah jika kata sandi yang tepat dimasukkan.

Ini mudah ditulis, asalkan ~/binada di jalur Anda. Buat file ~/bin/sudodengan konten berikut:

#!/usr/bin/bash
cygstart --action=runas "$@"

Sekarang buat file tersebut dapat dieksekusi:

$ chmod +x ~/bin/sudo

Sekarang Anda dapat menjalankan perintah dengan hak tinggi nyata :

$ sudo elevatedCommand

Anda mungkin perlu menambahkan ~/binke jalur Anda. Anda dapat menjalankan perintah berikut di Cygwin CLI, atau menambahkannya ke ~/.bashrc:

$ PATH=$HOME/bin:$PATH

Diuji pada Windows 8 64-bit.

Anda juga bisa menambahkan langkah-langkah alias di atas untuk perintah ini ~/.bashrc:

# alias to simulate sudo
alias sudo='cygstart --action=runas'

12
Jawaban yang sangat bagus. Dengan beberapa perubahan pada kode bash Anda (di bawah), saya dapat menjalankan perintah yang ditinggikan dari baris perintah. Inilah perubahan yang saya perlukan untuk membuat kode Anda berfungsi: cat << 'EOF' > ~/bin/sudo\n #!/usr/bin/bash\n cygstart --action=runas "$@"\n EOF (Saya tidak tahu cara menyisipkan baris baru dalam komentar ini, jadi saya telah menambahkan 'ke kode) Sisanya dari PATH = ... seterusnya baik-baik saja .
josmith42

3
Oh begitu! Jika saya tidak salah, itulah cara Anda menulis file ke disk, alih-alih membuka editor teks. Baik, terima kasih! Saya tidak tahu cara menggunakan heredocs di Bash!
dotancohen

8
Masalah dengan ini adalah bahwa ia menciptakan jendela terminal yang sama sekali baru (biasanya conhost). Outputnya tidak dimasukkan ke terminal saat ini.
CMCDragonkai

1
Satu-satunya cara untuk menjalankan hal-hal seperti lsadalah membungkusnya dalam proses yang berjalan lama seperti mintty atau bash atau zsh juga. Tetapi semuanya muncul di terminal terpisah. Yang pada titik ini, saya bisa saja membukanya melalui GUI menggunakan ConEMU.
CMCDragonkai

1
Tanpa tanda kutip, argumen yang dikutip pun terbagi dalam spasi lagi, @katriel. Dengan tanda kutip, "$@"mengembang ke sesuatu seperti "$1" "$2" "$3" ...dan tanpa, $@mengembang ke $1 $2 $3....
Palec

51

Anda mungkin perlu menjalankan shell cygwin sebagai Administrator. Anda dapat mengklik kanan pintasan dan klik jalankan sebagai administrator atau masuk ke properti pintasan dan periksa di bagian kompatibilitas. Berhati-hatilah .... izin root bisa berbahaya.


1
Dalam tiga tahun sejak pertanyaan ini diajukan tanpa jawaban yang bagus sebagai lawan dari solusi ini, saya telah menemukan cara yang benar untuk meningkatkan izin untuk satu perintah di jendela Cygwin yang masih ada dalam jawaban di bawah ini. Dengan demikian, fungsinya persis seperti sudodi Linux.
dotancohen

Bekerja untuk saya di Win10 64. Harus mengubah kepemilikan file yang diunduh dari server dengan rsync. chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*. Tanpanya saya tidak dapat mengakses folder dan file rsynced.
lowtechsun

25

Membangun jawaban dotancohen Saya menggunakan alias:

alias sudo="cygstart --action=runas"

Bekerja sebagai pesona:

sudo chown User:Group <file>

Dan jika Anda memiliki SysInternals terinstal, Anda bahkan dapat memulai shell perintah sebagai pengguna sistem dengan sangat mudah

sudo psexec -i -s -d cmd

9

Saya menemukan sudo-for-cygwin , mungkin ini akan berhasil, itu adalah aplikasi klien / server yang menggunakan skrip python untuk menelurkan proses anak di windows (pty) dan menjembatani tty pengguna dan proses I / O.

Ini membutuhkan python di windows dan modul Python greenlet, dan eventlet di Cygwin.


Saya menggunakan ini untuk sementara waktu sekarang dan itu menangani hal-hal interaktif seperti nano tanpa masalah!
MemphiZ


4

Tampaknya cygstart/runastidak ditangani dengan benar"$@" dan dengan demikian perintah yang memiliki argumen yang berisi spasi (dan mungkin meta-karakter shell lainnya - saya tidak memeriksa) tidak akan berfungsi dengan benar.

Saya memutuskan untuk hanya menulis sudoskrip kecil yang berfungsi dengan menulis skrip sementara yang melakukan parameter dengan benar.

#! /bin/bash

# If already admin, just run the command in-line.
# This works on my Win10 machine; dunno about others.
if id -G | grep -q ' 544 '; then
   "$@"
   exit $?
fi

# cygstart/runas doesn't handle arguments with spaces correctly so create
# a script that will do so properly.
tmpfile=$(mktemp /tmp/sudo.XXXXXX)
echo "#! /bin/bash" >>$tmpfile
echo "export PATH=\"$PATH\"" >>$tmpfile
echo "$1 \\" >>$tmpfile
shift
for arg in "$@"; do
  qarg=`echo "$arg" | sed -e "s/'/'\\\\\''/g"`
  echo "  '$qarg' \\" >>$tmpfile
done
echo >>$tmpfile

# cygstart opens a new window which vanishes as soon as the command is complete.
# Give the user a chance to see the output.
echo "echo -ne '\n$0: press <enter> to close window... '" >>$tmpfile
echo "read enter" >>$tmpfile

# Clean up after ourselves.
echo "rm -f $tmpfile" >>$tmpfile

# Do it as Administrator.
cygstart --action=runas /bin/bash $tmpfile

1
jawaban yang diterima tidak bekerja untuk saya di Win7 tetapi jawaban ini bekerja seperti pesona. Saya dapat mengatur exim-config dengan privs yang lebih tinggi dan kemudian vim-edit file /etc/exim.conf sesudahnya. Licin.
nanker

2

Jawaban ini didasarkan dari jawaban lain . Pertama-tama, pastikan akun Anda berada di grup Administrator.

Selanjutnya, buat file generik "runas-admin.bat" dengan konten berikut:

@if (1==1) @if(1==0) @ELSE
@echo off&SETLOCAL ENABLEEXTENSIONS
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"||(
    cscript //E:JScript //nologo "%~f0" %*
    @goto :EOF
)
FOR %%A IN (%*) DO (
    "%%A"
)
@goto :EOF
@end @ELSE
args = WScript.Arguments;
newargs = "";
for (var i = 0; i < args.length; i++) {
    newargs += "\"" + args(i) + "\" ";
}
ShA=new ActiveXObject("Shell.Application");
ShA.ShellExecute("cmd.exe","/c \""+WScript.ScriptFullName+" "+newargs+"\"","","runas",5);
@end

Kemudian jalankan file batch seperti ini:

./runas-admin.bat "<command1> [parm1, parm2, ...]" "<command2> [parm1, parm2, ...]"

Untuk exaxmple:

./runas-admin.bat "net localgroup newgroup1 /add" "net localgroup newgroup2 /add"

Pastikan untuk menyertakan setiap perintah terpisah dengan tanda kutip ganda. Anda hanya akan mendapatkan prompt UAC setelah menggunakan metode ini dan prosedur ini telah digeneralisasi sehingga Anda dapat menggunakan perintah apa pun.


2

Proposal baru untuk meningkatkan SUDO untuk CygWin dari GitHub di utas ini , bernama TOUACExt :

  • Secara otomatis membuka sudoserver.py.
  • Secara otomatis menutup sudoserver.py setelah batas waktu (15 menit standar).
  • Minta UAC elevation prompt Ya / Tidak gaya untuk pengguna admin.
  • Minta pengguna Admin / kata sandi untuk pengguna non-admin.
  • Bekerja jarak jauh (SSH) dengan akun admin.
  • Membuat log.

Masih dalam Pra-Beta , tetapi tampaknya masih berfungsi.


1

Saya mendarat di sini melalui google, dan saya benar-benar percaya saya telah menemukan cara untuk mendapatkan root prom yang berfungsi penuh di cygwin.

Ini langkah saya.

Pertama, Anda perlu mengganti nama akun Administrator Windows menjadi "root" Lakukan ini dengan membuka start manu dan mengetik "gpedit.msc"

Edit entri di bawah Kebijakan Komputer Lokal> Konfigurasi Komputer> Pengaturan Windows> Pengaturan Keamanan> Kebijakan Lokal> Opsi Keamanan> Akun: Ganti nama akun administrator

Maka Anda harus mengaktifkan akun jika belum diaktifkan. Kebijakan Komputer Lokal> Konfigurasi Komputer> Pengaturan Windows> Pengaturan Keamanan> Kebijakan Lokal> Opsi Keamanan> Akun: Status akun administrator

Sekarang logout dan masuk ke akun root.

Sekarang atur variabel lingkungan untuk cygwin. Untuk melakukannya dengan cara mudah: Klik Kanan Komputer Saya> Properti

Klik (di bilah sisi kiri) "Pengaturan sistem lanjutan"

Di dekat bagian bawah klik tombol "Variabel Lingkungan"

Di bawah "Variabel Sistem" klik tombol "Baru ..."

Untuk nama cantumkan "cygwin" tanpa tanda kutip. Untuk nilainya, masukkan di direktori root cygwin Anda. (Milik saya adalah C: \ cygwin)

Tekan OK dan tutup semua itu untuk kembali ke desktop.

Buka terminal Cygwin (cygwin.bat)

Edit file / etc / passwd dan ubah baris

Administrator : tidak digunakan: 500: 503 : U- MACHINE \ Administrator , S-1-5-21-12345678-1234567890-1234567890- 500: / home / Administrator : / bin / bash

Untuk ini (nomor Anda, dan nama mesin akan berbeda, pastikan Anda mengubah angka yang disorot menjadi 0!)

root : tidak digunakan: 0: 0 : U- MACHINE \ root , S-1-5-21-12345678-1234567890-1234567890- 0: / root : / bin / bash

Sekarang setelah semua selesai, bit berikutnya ini akan membuat perintah "su" bekerja. (Tidak sempurna, tapi itu akan berfungsi cukup untuk digunakan. Saya tidak berpikir skrip akan berfungsi dengan benar, tapi hei, Anda sudah sejauh ini, mungkin Anda bisa menemukan jalannya. Dan tolong bagikan)

Jalankan perintah ini di cygwin untuk menyelesaikan transaksi.

mv /bin/su.exe /bin/_su.exe_backup
cat > /bin/su.bat << "EOF"
@ECHO OFF
RUNAS /savecred /user:root %cygwin%\cygwin.bat
EOF
ln -s /bin/su.bat /bin/su
echo ''
echo 'All finished'

Logout dari akun root dan kembali ke akun pengguna windows normal Anda.

Setelah semua itu, jalankan "su.bat" baru secara manual dengan mengklik dua kali di explorer. Masukkan kata sandi Anda dan lanjutkan dan tutup jendela.

Sekarang coba jalankan perintah su dari cygwin dan lihat apakah semuanya berjalan dengan baik.


1

Karena tidak puas dengan solusi yang tersedia, saya mengadopsi skrip nu774 untuk menambah keamanan dan membuatnya lebih mudah untuk diatur dan digunakan. Proyek ini tersedia di Github

Untuk menggunakannya, cukup unduh cygwin-sudo.pydan jalankan melalui python3 cygwin-sudo.py **yourcommand**.

Anda dapat mengatur alias untuk kenyamanan:

alias sudo="python3 /path-to-cygwin-sudo/cygwin-sudo.py"

0

Gunakan ini untuk mendapatkan jendela admin dengan bash atau cmd berjalan, dari konteks direktori apa pun. Cukup klik kanan pada nama direktori, dan pilih entri atau tekan tombol highlited.

Ini didasarkan pada alat chere dan jawaban yang sayangnya tidak berfungsi (untuk saya) dari link_boy. Ini berfungsi dengan baik untuk saya menggunakan Windows 8,

Efek samping adalah warna berbeda di jendela cmd admin. Untuk menggunakan ini pada bash, Anda dapat mengubah file .bashrc dari pengguna admin.

Saya tidak bisa menjalankan versi "latar belakang" (klik kanan ke direktori terbuka) untuk dijalankan. Jangan ragu untuk menambahkannya.

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="&Bash Prompt Here"
"Icon"="C:\\cygwin\\Cygwin.ico"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="C:\\cygwin\\bin\\bash -c \"/bin/xhere /bin/bash.exe '%L'\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root]
@="&Root Bash Prompt Here"
"Icon"="C:\\cygwin\\Cygwin.ico"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash_root\command]
@="runas /savecred /user:administrator \"C:\\cygwin\\bin\\bash -c \\\"/bin/xhere /bin/bash.exe '%L'\\\"\""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd]
@="&Command Prompt Here"

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd\command]
@="cmd.exe /k cd %L"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root]
@="Roo&t Command Prompt Here"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_cmd_root\command]
@="runas /savecred /user:administrator \"cmd.exe /t:1E /k cd %L\""

0

Cara yang sangat sederhana untuk memiliki shell cygwin dan subshell yang sesuai untuk beroperasi dengan hak administrator adalah mengubah properti dari tautan yang membuka shell awal.

Berikut ini berlaku untuk Windows 7+ (mungkin untuk versi sebelumnya juga, tetapi saya belum memeriksa)

Saya biasanya memulai shell cygwin dari cygwin-link di awal tombol (atau desktop). Lalu, saya mengubah properti dari cygwin-link di tab

/ Kompatibilitas / Tingkat Hak Istimewa /

dan memeriksa kotak itu,

"Jalankan program ini sebagai administrator"

Ini memungkinkan cygwin shell untuk membuka dengan hak administrator dan juga subshell yang sesuai.


Satu-satunya masalah kecil adalah Anda tidak tahu apakah itu dibuka sebagai administrator.
Edwin Pratt

0

Saya bertemu diskusi ini mencari beberapa detail tentang sudoimplementasi di sistem operasi yang berbeda. Membacanya saya menemukan bahwa solusi oleh @ brian-white ( https://stackoverflow.com/a/42956057/3627676 ) berguna tetapi dapat sedikit ditingkatkan. Saya menghindari membuat file sementara dan menerapkan untuk menjalankan semuanya dengan skrip tunggal.

Juga saya menyelidiki langkah selanjutnya dari peningkatan output dalam jendela tunggal / konsol. Sayangnya, tanpa hasil. Saya mencoba menggunakan pipa bernama untuk menangkap STDOUT / STDERR dan mencetak di jendela utama. Tetapi proses anak tidak menulis ke pipa bernama. Namun menulis ke file biasa berfungsi dengan baik.

Saya membatalkan semua upaya untuk menemukan akar permasalahan dan membiarkan solusi saat ini apa adanya. Semoga postingan saya dapat bermanfaat juga.

Perbaikan:

  • tidak ada file sementara
  • tidak ada parsing dan merekonstruksi opsi baris perintah
  • tunggu perintah yang ditinggikan
  • menggunakan mintty atau bash, jika yang pertama tidak ditemukan
  • kembalikan kode perintah keluar
    #! / bin / bash

    # Menjadi Administrator, aktifkan perintah secara langsung
    id -G | grep -qw 544 && {
        "$ @"
        keluar $?
    }

    # Variabel CYG_SUDO digunakan untuk mengontrol permintaan perintah
    [-z "$ CYG_SUDO"] && {
        mintty = "$ (dimana mintty 2> / dev / null)"
        export CYG_SUDO = "$$"
        cygstart --wait --action = runas $ mintty / bin / bash "$ 0" "$ @"
        keluar $?
    }

    # Sekarang kita dapat:
    # - luncurkan perintah
    # - tampilkan pesan
    # - kembalikan kode keluar
    "$ @"
    RETVAL = $?

    echo "$ 0: Tekan untuk menutup jendela ..."
    Baca

    keluar $ RETVAL


Bagaimana cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"tidak pecah jika ada spasi dalam argumen? Itu selalu terjadi pada saya ketika melewati cygstart / runas.
Brian White

0

Berdasarkan jawaban @ mat-khor, saya mengambil syswin su.exe, menyimpannya sebagai manufacture-syswin-su.exe, dan menulis skrip pembungkus ini. Ia menangani pengalihan stdout dan stderr perintah, sehingga dapat digunakan dalam pipa, dll. Juga, skrip keluar dengan status perintah yang diberikan.

Keterbatasan:

  • Opsi syswin-su saat ini hardcoded untuk menggunakan pengguna saat ini. Menggantinya env USERNAME=...dengan permintaan skrip menimpanya . Jika opsi lain diperlukan, skrip harus membedakan antara syswin-su dan argumen perintah, misalnya pemisahan pada yang pertama --.
  • Jika prompt UAC dibatalkan atau ditolak, skrip hang.

.

#!/bin/bash
set -e

# join command $@ into a single string with quoting (required for syswin-su)
cmd=$( ( set -x; set -- "$@"; ) 2>&1 | perl -nle 'print $1 if /\bset -- (.*)/' )

tmpDir=$(mktemp -t -d -- "$(basename "$0")_$(date '+%Y%m%dT%H%M%S')_XXX")
mkfifo -- "$tmpDir/out"
mkfifo -- "$tmpDir/err"

cat >> "$tmpDir/script" <<-SCRIPT
    #!/bin/env bash
    $cmd > '$tmpDir/out' 2> '$tmpDir/err'
    echo \$? > '$tmpDir/status'
SCRIPT

chmod 700 -- "$tmpDir/script"

manufacture-syswin-su -s bash -u "$USERNAME" -m -c "cygstart --showminimized bash -c '$tmpDir/script'" > /dev/null &
cat -- "$tmpDir/err" >&2 &
cat -- "$tmpDir/out"
wait $!
exit $(<"$tmpDir/status")

-1

Tidak dapat sepenuhnya menguji ini sendiri, saya tidak memiliki skrip yang cocok untuk mencobanya, dan saya bukan ahli Linux, tetapi Anda mungkin dapat meretas sesuatu yang cukup dekat.

Saya sudah mencoba langkah-langkah ini, dan mereka 'tampaknya' berhasil, tetapi tidak tahu apakah itu akan cukup untuk kebutuhan Anda.

Untuk mengatasi kekurangan pengguna 'root':

  • Buat pengguna di mesin windows LOCAL yang disebut 'root', jadikan sebagai anggota grup 'Administrator'
  • Tandai bin / bash.exe sebagai 'Jalankan sebagai administrator' untuk semua pengguna (jelas Anda harus mengaktifkan / menonaktifkan ini ketika dan ketika Anda membutuhkannya)
  • Tahan tombol shift kiri di windows explorer sambil mengklik kanan pada file Cygwin.bat
  • Pilih 'Jalankan sebagai pengguna lain'
  • Masukkan. \ Root sebagai nama pengguna dan kata sandi Anda.

Ini kemudian menjalankan Anda sebagai pengguna yang disebut 'root' di cygwin, yang digabungkan dengan 'Jalankan sebagai administrator' pada file bash.exe mungkin cukup.

Namun Anda masih membutuhkan sudo.

Saya memalsukan ini (dan orang lain yang memiliki lebih banyak pengetahuan linux mungkin bisa memalsukannya dengan lebih baik) dengan membuat file bernama 'sudo' di / bin dan menggunakan baris perintah ini untuk mengirim perintah ke su sebagai gantinya:

su -c "$*"

Baris perintah 'sudo vim' dan lainnya sepertinya berfungsi baik untuk saya, jadi Anda mungkin ingin mencobanya.

Tertarik untuk mengetahui apakah ini sesuai dengan kebutuhan Anda atau tidak.


-1

Apa yang biasanya saya lakukan adalah memiliki registry "Open Here" pembantu untuk membuka shell cygwin dengan hak administratif cukup mudah dari mana saja di komputer saya.

Ketahuilah bahwa Anda harus menginstal paket "chere" cygwin, gunakan " chere -i -m" dari shell cygwin yang ditinggikan terlebih dahulu.

Anggap instalasi cygwin Anda ada di C: \ cygwin ...

Berikut kode registri:

Windows Registry Editor Version 5.00

[-HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Directory\Background\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

[-HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash]
@="Open Cygwin Here as Root"
"HasLUAShield"=""

[HKEY_CLASSES_ROOT\Drive\shell\cygwin_bash\command]
@="c:\\cygwin\\bin\\mintty.exe -i /Cygwin-Terminal.ico -e /bin/xhere /bin/bash.exe"

Semoga ini membantu. Beri tahu saya jika itu berhasil untuk Anda. Terima kasih.

PS: Anda dapat mengambil kode ini, menyalin dan menempelnya dan menyimpannya dalam file name.reg untuk menjalankannya ... atau Anda dapat menambahkan nilai secara manual.


-5

Mencoba:

chmod -R ug+rwx <dir>

di mana <dir>direktori tempat Anda ingin mengubah izin.


5
Bagaimana itu akan membuatnya root, saat ia bertanya?
Nikana Reklawyks
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.