Saya memiliki skrip yang dapat dijalankan sebagai sudo script.sh
ataupkexec script.sh
Akan jauh lebih baik dari sudut pandang pengguna jika skrip meminta kata sandi dari pengguna saat menjalankannya dengan nama script.sh
.
Bagaimana saya bisa "menanamkan" permintaan ke pkexec
atau sudo
untuk menjalankan seluruh skrip dengan privilege root?
Perhatikan bahwa menjalankan semuanya dengan sudo sh -c
mungkin bukan solusi terbaik karena saya memiliki fungsi dalam skrip.
command-line
bash
scripts
Sergiy Kolodyazhnyy
sumber
sumber
exec
- panggilan itu sendiri tetapi pada saat yang sama mengganti proses, jadi kami tidak menelurkan banyak contoh skrip"$@"
akan diperluas ke beberapa kata, satu untuk setiap parameter.Jika Anda ingin dialog yang cantik, coba sesuatu seperti ini. Saya merobek ini langsung dari sesuatu yang saya tulis, jadi ada hal-hal tambahan yang Anda mungkin tidak perlu atau inginkan, tetapi itu menunjukkan ide umum:
Ini menggunakan whiptail, yang dapat Anda instal jika Anda belum memilikinya:
sumber
exec echo [PASSWORD]
! Ini akan memunculkan proses dengan kata sandi pada baris perintah yang dapat dilihat oleh pengguna mana pun. Baik menggunakan perintah built-inecho
(memaksa versi built-in denganbuiltin echo
) atau bashism<<<
(seperti :)sudo ... <<< "$pass"
; Sh dan kerang lain memiliki Dokumen Di Sini untuk kasus ini. Juga, kutip kata sandi kalau-kalau mengandung karakter khusus.whiptail
perintah ke skrip terpisah dan gunakan sesuatu sepertiSUDO_ASKPASS=/path/to/askpass-with-whiptail.sh sudo -A -p "My password prompt" -- "$0" "$@"
untuksudo
berurusan dengan prompt kata sandi kustom.Jawaban blade19899 memang jalan yang harus ditempuh, namun orang juga bisa memanggil
sudo bash
shebang:Peringatan yang jelas adalah ini akan berfungsi hanya selama skrip dipanggil dengan
./script
dan akan gagal segera setelah skrip dipanggil denganbash script
.sumber
bash script
pada baris perintah untuk memanggil skrip. Jika skrip menentukan apa pun selainbash
dalam#!
baris, maka memohon denganbash script
itu akan gagal. Jika saya mencoba memanggil skrip python menggunakannyabash script.py
juga akan gagal.perl script
. Perl, dalam upaya untuk menjadi benar-benar baik, memeriksa garis shebang, dan jika tidak menjalankan perl, ia menjalankan program yang benar.Saya kata pengantar perintah dalam skrip yang membutuhkan akses root
sudo
- jika pengguna belum mendapatkan izin, skrip meminta kata sandi pada saat itu.contoh
Script ini dapat dijalankan sebagai
sudo <scriptname>
atau sebagai<scriptname>
. Dalam kedua kasus itu akan meminta kata sandi, hanya sekali.sumber
sudo
25 perintah yang berbeda berlebihan - lebih mudah untuk memanggil sudo sekali. Namun di sini, alasan skrip Anda memanggil sudo hanya satu kali adalah karena sudo memiliki waktu habis 15 menit - perintah yang membutuhkan waktu lebih lama dari itu perlu disusun ulang. Cara Anda bekerja dengan baik. . . bukan cara saya membutuhkannya untuk bekerja.Tampaknya tidak ada orang lain yang membahas masalah nyata di sini. Menempatkan di
sudo
dalam skrip Anda yang kemudian Anda bagikan mempromosikan kebiasaan pengguna yang buruk . (Saya berasumsi Anda mendistribusikannya karena Anda menyebut "dari sudut pandang pengguna.")Yang benar adalah bahwa ada pedoman dalam menggunakan aplikasi dan skrip yang mirip dengan prinsip keamanan di perbankan: Jangan pernah memberikan informasi pribadi Anda kepada seseorang yang memanggil Anda dan mengatakan mereka memanggil "dari bank Anda" , dan yang ada untuk alasan yang sama.
Aturan untuk aplikasi adalah:
Jangan pernah mengetik kata sandi Anda ketika diminta kecuali Anda yakin apa yang sedang dilakukan dengannya. Ini berlaku tiga kali lipat bagi siapa pun yang memiliki
sudo
akses.Jika Anda mengetik kata sandi karena Anda menjalankan
sudo
perintah, bagus. Jika Anda mengetiknya karena Anda menjalankan perintah SSH, baiklah. Jika Anda mengetiknya saat Anda masuk ke komputer, tentu saja bagus.Jika Anda hanya menjalankan skrip asing atau yang dapat dieksekusi dan memasukkan kata sandi Anda ketika diminta, Anda tidak tahu apa yang dilakukan skrip itu. Bisa jadi menyimpannya dalam file temp di plaintext, untuk semua yang Anda tahu, dan bahkan mungkin gagal untuk membersihkan sendiri.
Jelas ada kekhawatiran terpisah dan tambahan tentang menjalankan seperangkat perintah yang tidak diketahui
root
, tetapi yang saya bicarakan di sini adalah menjaga keamanan kata sandi itu sendiri . Bahkan dengan anggapan aplikasi / skrip tidak berbahaya, Anda masih ingin kata sandi Anda ditangani dengan aman untuk mencegah aplikasi lain menggunakannya dan menggunakannya dengan jahat.Jadi, tanggapan pribadi saya terhadap hal ini adalah, hal terbaik untuk dimasukkan ke dalam naskah Anda jika perlu di-root, adalah:
sumber
sudo script_name
sama rapuhnya, sama saja. Mungkin ide ini mempromosikan kebiasaan buruk - saya tidak akan mengatakan apa-apa tentang itu. Tetapi kuncinya adalah mengetahui apa yang dilakukan suatu program, dan itulah tanggung jawab pengguna. Itulah gagasan di balik perangkat lunak open-source. Adapun skrip saya sendiri, baik. . . skrip adalah teks biasa - pengguna dapat membacanya jika mereka ingin tahu fungsinyaSaya melakukannya dengan cara ini:
sumber