Pada hari-hari yang sibuk, saya ingin berlari
$ ./configure && make && sudo make install && halt
pada malam hari dan pergi tidur, berharap aplikasi akan terinstal secara otomatis. Tapi yang saya lihat pada hari berikutnya adalah layar tempat sudo meminta saya kata sandi. Jadi bagaimana saya bisa menjalankan sudo dengan kata sandi dalam satu baris perintah, atau adakah metode lain untuk melakukan ini?
halt
menjalankannya sebagai root.sudo
memiliki batas waktu 15 menit? Tidak bisakah Anda menjalankan, mengatakan,sudo ls
atau sesuatu yang serupa, memasukkan kata sandi Anda, dan kemudian menjalankan perintah di atas,sudo
masih memiliki hak istimewa? (Saya tidak dapat menguji ini saat ini, kalau tidak saya akan memposting ini sebagai jawaban.)sudo
dapat dikonfigurasi. Orang yang sadar akan keamanan (alias paranoid, seperti saya) mengaturnya menjadi nol ... :-)Jawaban:
Ya, gunakan
-S
sakelar yang membaca kata sandi dari STDIN:Jadi untuk kasus Anda akan terlihat seperti ini:
tentu saja, ganti
<password>
dengan kata sandi Anda.sumber
Anda dapat mengganti baris perintah dengan ini:
$sudo su
$./configure && make && make install && halt
Anda akan diminta untuk memasukkan kata sandi Anda segera, kemudian seluruh perintah akan dijalankan sebagai superuser.
sumber
sudo sh -c "./configure && make && make install && halt"
Beberapa solusi lain memiliki kelemahan yang tidak perlu dijalankan
./configure
dan dimake
-root.Ini agak berbelit-belit, tetapi harus bekerja:
Perhatikan penggunaan tanda kutip ganda untuk memungkinkan
$USER
diperluas oleh shell (non-root).Saya mungkin juga menambahkan
sleep 60
sebelumhalt
perintah. Saya kadang-kadang melakukan hal-hal seperti ini, mengharapkan perintah untuk berjalan untuk waktu yang lama, tetapi ada yang tidak beres dan segera berakhir; yangsleep
membuat saya membunuh perintah sebelum sistem dimatikan. Atau Anda dapat menggunakanshutdown
argumen waktu.sumber
Anda juga dapat mengonfigurasi sudo dengan
visudo
agar pengguna dapat menggunakan make as sudo tanpa kata sandi.sumber
Setel HISTIGNORE ke " sudo -S "
Kemudian berikan kata sandi Anda dengan aman ke sudo:
"HISTIGNORE" berarti tidak menyimpan perintah ini ke dalam sejarah. Itu adalah sejarah dalam memori atau file "~ / .bash_history".
Misalnya, di bawah ini akan dengan aman menyalurkan kata sandi Anda ke perintah sudo, tanpa mempertahankan riwayat kata sandi Anda.
"-S", artinya menggunakan stdin untuk kata sandi,
"-K" berarti mengabaikan kredensial yang di-cache untuk memaksa sudo untuk selalu bertanya. Ini untuk perilaku yang konsisten.
Kelemahan dari metode di atas adalah bahwa jika Anda ingin melihat perintah yang Anda jalankan dalam sejarah nanti mereka tidak akan ada di sana. Metode lain adalah memperbarui cache kredensial otentikasi sudo (default diaktifkan dengan batas waktu 5 menit), lalu jalankan sudo secara terpisah. Tetapi kekurangannya adalah Anda harus mengetahui cache 5 menit.
Sebagai contoh:
Catatan saya menjalankan sudo sebelum setiap perintah untuk memastikan bahwa cache sudo diperbarui, karena defaultnya adalah 5 mintues. Ya, whoami seharusnya tidak memakan waktu 5 menit, tetapi saya pikir sebaiknya dijalankan sebelum setiap perintah untuk konsistensi. Anda juga dapat memasukkan "export HISTIGNORE = ' sudo -S'"di file ~ / .bashrc Anda, lalu muat dengan". ~ / .bashrc "atau logoff lalu login. Namun, saya berpikir untuk menggunakan ini untuk tujuan skrip, jadi saya akan menyimpannya di bagian atas semua skrip saya untuk praktik keamanan terbaik. Mengatur" echo "" | sudo -S -v "ke variabel sebagai gantinya mungkin juga merupakan ide yang baik, kemudian jalankan saja variabel sebelum setiap perintah yang membutuhkan hak akses root, lihat komentar Janar." Komentar John T "juga harus menyertakan parameter" -k " , seolah-olah Anda menjalankan "sudo -S" tanpa "-k" dan cache otentikasi sudo sudah memiliki kredensial Anda (dan masih valid, cache otentikasi sudo default adalah 5 menit) maka bash akan menjalankan kata sandi Anda sebagai perintah sebagai gantinya, yaitu buruk.
sumber
Catatan, saya menemukan bahwa metode tidak berfungsi pada versi sudo yang lebih lama, khususnya "Sudo versi 1.6.7p5":
Sedangkan metode ini tidak berfungsi pada sudo versi lama dan baru:
sumber
Anda juga dapat melakukan ini:
sumber
Jika Anda ingin lebih berhati-hati, Anda dapat membuat skrip, mengubah izin file sehingga hanya root yang dapat membaca dan mengedit dan kemudian jalankan saja.
Contoh:
1) Buat file:
2) Tempel ini dan simpan:
3) Jadikan itu executable:
4) Ubah izin file sehingga hanya root yang dapat membaca dan mengeditnya:
5) Jalankan:
Nikmati ;-)
sumber
Menyiapkan sudo seperti itu berbahaya jika seseorang melihat fakta bahwa sudo tidak memerlukan kata sandi di akun Anda. Kecuali Anda tahu apa yang Anda lakukan, jangan lakukan itu. Saya sudah sering mengalami hal itu di program A + Pelatihan lokal saya dengan komputer eksperimental saya ... -_-
Apa yang dikatakan John T. kedengarannya bagus, kecuali masih ada risiko menemukan kata sandi dalam sejarah shell. Apa kata CarlF terdengar lebih baik, tetapi jika satu perintah gagal, komputer masih akan berjalan dengan hak pengguna super.
sumber
Secara pribadi saya melakukan hal yang sama seperti yang dijawab John T pada 9 November 2009 di 2:47, saya juga meningkatkan jawaban saya sesuai dengan petunjuk jawabannya, terima kasih.
Perbedaannya adalah saya cenderung menggunakan variabel, seperti:
Dengan cara itu saya dapat dengan mudah menggunakan variabel tambang alih-alih sudo,
Itu cukup berguna dengan beberapa skrip yang lebih panjang. Saya terutama menggunakan ini untuk komputer pribadi orang lain, yang harus saya pertahankan.
Saya juga merekomendasikan untuk memperhatikan:
sumber
Masalahnya teratasi. Misalnya, ke root pengguna:
sumber