Saya mencoba menjalankan skrip bash di Cygwin.
Saya mendapatkan Must run as root, i.e. sudo ./scriptname
kesalahan.
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?
what
skrip 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.Jawaban:
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
command
dengan hak istimewa yang lebih tinggi di Cygwin, awali perintah dengancygstart --action=runas
seperti ini:Ini akan membuka kotak dialog Windows yang meminta kata sandi Admin dan menjalankan perintah jika kata sandi yang tepat dimasukkan.
Ini mudah ditulis, asalkan
~/bin
ada di jalur Anda. Buat file~/bin/sudo
dengan konten berikut:Sekarang buat file tersebut dapat dieksekusi:
Sekarang Anda dapat menjalankan perintah dengan hak tinggi nyata :
Anda mungkin perlu menambahkan
~/bin
ke jalur Anda. Anda dapat menjalankan perintah berikut di Cygwin CLI, atau menambahkannya ke~/.bashrc
:Diuji pada Windows 8 64-bit.
Anda juga bisa menambahkan langkah-langkah alias di atas untuk perintah ini
~/.bashrc
:sumber
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 .ls
adalah 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."$@"
mengembang ke sesuatu seperti"$1" "$2" "$3" ...
dan tanpa,$@
mengembang ke$1 $2 $3...
.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.
sumber
sudo
di Linux.chown --changes --verbose --recursive [USER] /cygdrive/c/[PATH TO FOLDER]/*
. Tanpanya saya tidak dapat mengakses folder dan file rsynced.Membangun jawaban dotancohen Saya menggunakan alias:
Bekerja sebagai pesona:
Dan jika Anda memiliki SysInternals terinstal, Anda bahkan dapat memulai shell perintah sebagai pengguna sistem dengan sangat mudah
sumber
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.
sumber
Atau instal paket syswin, yang mencakup port su untuk cygwin: http://sourceforge.net/p/manufacture/wiki/syswin-su/
sumber
Tampaknya
cygstart/runas
tidak 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
sudo
skrip kecil yang berfungsi dengan menulis skrip sementara yang melakukan parameter dengan benar.sumber
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:
Kemudian jalankan file batch seperti ini:
Untuk exaxmple:
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.
sumber
Proposal baru untuk meningkatkan SUDO untuk CygWin dari GitHub di utas ini , bernama TOUACExt :
Masih dalam Pra-Beta , tetapi tampaknya masih berfungsi.
sumber
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
Untuk ini (nomor Anda, dan nama mesin akan berbeda, pastikan Anda mengubah angka yang disorot menjadi 0!)
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.
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.
sumber
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.py
dan jalankan melaluipython3 cygwin-sudo.py **yourcommand**
.Anda dapat mengatur alias untuk kenyamanan:
sumber
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.
sumber
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.
sumber
Saya bertemu diskusi ini mencari beberapa detail tentang
sudo
implementasi 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:
mintty
ataubash
, jika yang pertama tidak ditemukansumber
cygstart --wait --action=runas $mintty /bin/bash "$0" "$@"
tidak pecah jika ada spasi dalam argumen? Itu selalu terjadi pada saya ketika melewati cygstart / runas.Berdasarkan jawaban @ mat-khor, saya mengambil syswin
su.exe
, menyimpannya sebagaimanufacture-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:
env USERNAME=...
dengan permintaan skrip menimpanya . Jika opsi lain diperlukan, skrip harus membedakan antara syswin-su dan argumen perintah, misalnya pemisahan pada yang pertama--
..
sumber
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':
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:
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.
sumber
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:
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.
sumber
Mencoba:
di mana
<dir>
direktori tempat Anda ingin mengubah izin.sumber