Bagaimana sudo dimaksudkan untuk digunakan?

24

Saya sudah mencoba mengkonfigurasi sudosebelumnya, tetapi saya belum terlalu beruntung dengan itu. Bagaimana bedanya su -l -c "x"? Tampaknya melalui file konfigurasi, seseorang dapat membuatnya sehingga pengguna hanya dapat memiliki akses ke perintah tertentu dan banyak lagi. Saya selalu dianggap sudosebagai cara satu-baris perintah sebagai pengguna atau grup lain. Karena distro seperti Ubuntu dan Mint membuatnya mudah dengan memberikan akses mudah ke pengguna utama untuk melakukan rooting melalui kata sandi, saya tidak begitu yakin apa yang dimaksud dengan penggunaannya.

Bagaimana cara menambahkan pengguna ke file sudo, memberi mereka hak untuk hanya menjalankan perintah tertentu di root? Saya juga tidak ingin membuka celah keamanan.

Naftuli Kay
sumber

Jawaban:

16

Untuk operasi dasar - menjalankan perintah sebagai root - perbedaan yang paling terlihat antara sudo dan su adalah sudo membutuhkan kata sandi dari pengguna panggilan (yaitu kata sandi Anda) sedangkan su membutuhkan kata sandi dari pengguna target (yaitu kata sandi root). Implikasi keamanan telah dibahas secara luas dalam pertanyaan sebelumnya: Mana cara paling aman untuk mendapatkan hak akses root: sudo, su atau login? .

Sudo memiliki fitur tambahan di luar su. Secara khusus, setelah Anda memiliki kata sandi pengguna, Anda dapat menjalankan perintah apa pun sebagai pengguna itu. Di sisi lain, sudo dapat dikonfigurasi sehingga pengguna yang memintanya hanya dapat menjalankan perintah tertentu seperti beberapa pengguna lain. Ini dimungkinkan karena sudo tidak memerlukan autentikasi apa pun (selain mungkin mengonfirmasi bahwa Anda adalah Anda dengan mengetik kata sandi Anda - tetapi itu agak berbeda dengan mengautentikasi pengguna Anda untuk suatu tugas).

Anda mengubah konfigurasi sudo dengan menjalankan visudoperintah sebagai root (jangan pernah mengedit konfigurasi secara langsung). Pastikan variabel lingkungan EDITORatau VISUALdiatur ke editor favorit Anda atau Anda mungkin mendapatkan editor yang tidak dikenal. The sudoershalaman manual adalah singkat sedikit tetapi memiliki contoh. Untuk memungkinkan pengguna bobmenjalankan /bin/foo(dengan sejumlah argumen) dan /bin/bar --safe(tetapi tidak dengan argumen lain) root, gunakan baris berikut:

bob ALL = (root) /bin/foo
bob ALL = (root) /bin/bar --safe
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
sudoadalah penemuan yang luar biasa
tshepang
1
Apakah sudo memerlukan kata sandi root atau kata sandi root tergantung pada konfigurasi. Ini dapat diatur dengan cara apa pun.
Jonathan M Davis
3
@ Tunas Amin, saudara. Jika saya harus melepaskan kata sandi root dan menjelaskan teknisi dukungan tentang cara SU dan tidak melakukan / apa pun / selain apache2ctl gracefulsaya pikir saya lebih suka menggorok pergelangan tangan saya dan menyelesaikannya.
Shadur
6

Perbedaan terbesar adalah bahwa dengan sudoAnda tidak perlu kata sandi root untuk menjalankan perintah sebagai root, seperti yang Anda lakukan su. Anda memang perlu kata sandi root untuk menambahkan seseorang ke sudoersfile tetapi setelah itu orang tersebut dapat menjalankan semua atau beberapa (jika Anda telah membatasi) sebagai root tanpa memerlukan kata sandi lebih lanjut.

Perbedaan lainnya adalah, seperti yang telah Anda catat, sudomemungkinkan kontrol yang jauh lebih baik atas perintah apa yang dapat dijalankan.

Untuk detail dari format sudoersfile yang dijalankan man sudoers. Anda akan menemukan contoh di sana yang hanya mengizinkan perintah tertentu untuk dijalankan sebagai root. Struktur dasar setiap baris adalah:

user_list host_list = cmd_list

cmd_list dapat menyertakan detail pengguna mana yang diizinkan untuk beralih ke pengguna sebenarnya. Misalnya, Anda mungkin mengizinkan webmaster beralih ke wwwroot untuk memulai kembali apache tetapi tidak untuk me-root. Itu juga dapat menyertakan opsi lain seperti apakah kata sandi pengguna diperlukan sebelum beralih (ini adalah default).

Baris contoh mungkin:

joe  ALL=(ALL) ALL

yang berarti: biarkan joe menjalankan perintah apa pun di host mana pun sebagai pengguna apa pun. Garis yang lebih ketat mungkin:

joe  ALL=(operator) /usr/local/ops/

yang berarti: biarkan joe menjalankan perintah apa pun di direktori / usr / local / ops sebagai "operator" pengguna.

Ada banyak contoh di akhir halaman manual sudoers.

Anda harus mengedit /etc/sudoersdengan perintah visudo. Ini memeriksa apakah file tersebut legal dan membantu mencegah Anda dari kerusakan secara tidak sengaja.

Dave Jennings
sumber
Diperlukan atau tidaknya kata sandi saat menggunakan sudo sepenuhnya tergantung pada bagaimana sudoersfile diatur. Itu dapat diatur untuk memerlukan kata sandi atau mengatur untuk tidak memerlukan kata sandi.
Jonathan M Davis
Praktik umum tambahan untuk menghindari mengubah file utama / etc / sudoers karena IDS melihatnya dan karena pemformatannya dapat merusak hari Anda: Gunakan cuplikan sudo sebagai file terpisah di /etc/sudoers.d. Menggunakan grup roda untuk orang memungkinkan perintah apa pun.
bbaassssiiee
2

Selain jawaban lain, sudo menyediakan fasilitas logging sehingga Anda dapat melacak perintah apa yang dijalankan dan oleh siapa. Ini bukan untuk tujuan keamanan karena pengguna jahat yang mendapat akses sudo dapat menghapus log. Sangat berguna meskipun untuk mengetahui dengan tepat apa yang Anda atau admin lain lakukan dengan mata pada jam 2 pagi minggu lalu.

JRW
sumber
3
Ini untuk tujuan keamanan karena sudo mendukung pencatatan ke syslog yang dalam pengaturan utama apa pun tentang keamanan akan dikonfigurasikan untuk masuk ke mesin jarak jauh yang terpisah sehingga jika suatu sistem terganggu log tidak dapat dipengaruhi.
Arrowmaster
Atribut file khusus-tambahan mungkin membantu sedikit obrolan + a / var / log / secure
bbaassssiiee