sudoers - penjelasan sederhana yang diminta

24

Setiap kali saya ingin dapat menjalankan sesuatu yang mengharuskan saya sudoerterlalu sering, saya perlu google untuk memformat /etc/sudoersuntuk mengingatkan saya lagi apa sebenarnya cara yang tepat untuk menulisnya.

Sekarang saya melihat berbagai gaya penulisan di sudoersfile saya , yang merupakan konsekuensi dari hasil google yang berbeda selama beberapa bulan. Saya juga memperhatikan bahwa contoh kedua (di bawah) tampaknya berfungsi di XFCE, tetapi tidak di Cinnamon (Gnome 3). Ini bisa benar-benar tidak berhubungan, tetapi saya ingin tahu sekali dan untuk semua, apa tata bahasa yang benar dari garis sudoer, dan apa perbedaan antara contoh yang diberikan?

  1. redsandro ALL=NOPASSWD:/path/to/command
  2. redsandro ALL=(ALL) NOPASSWD:/path/to/command
  3. redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

Juga, untuk apa semua ALLitu? Satu pengguna, satu perintah, namun saya perlu menggunakan ALLkata kunci hingga tiga kali? Apakah saya melakukan ini salah?

Tentu saja, menghilangkan NOPASSWD:merek Anda memasukkan password Anda sebelum Anda diizinkan untuk menjalankan perintah, tapi satu titik kebingungan adalah penggunaan =dan :, untuk perintah akhir yang merupakan subjek dari garis dapat didahului oleh salah satu =, :, , atau ), tata bahasa yang membingungkan untuk semantik serupa.

Redsandro
sumber
3
Saya juga merasa sangat frustrasi dengan sudoerssintaksis. Membaca halaman manual itu bahkan lebih membuat frustrasi: itu menggambarkan apa yang disebut bahasa EBNF yang singkat dan tepat, contoh-contohnya sangat panjang. Karenanya saya tidak terkejut menemukan begitu banyak utas di sini mengenai file ini.
m-ric
1
Terima kasih untuk ini. Sudah ingin mengajukan pertanyaan ini sejak saya menemukan file sudoers beberapa tahun yang lalu :-)
vahidg

Jawaban:

35

Ini lebih dari sekadar pengguna dan perintah:


redsandro host=(user:group) tag:commands
  • hostmenentukan nama host yang baris ini valid untuk. Kecuali Anda membagikan file asudo di antara host yang berbeda yang memerlukan aturan berbeda menggunakan nilai khusus yang ALLberarti "semua host" adalah pilihan yang baik.

  • usermenentukan pengguna mana yang dapat Anda gunakan dengan -uopsi untuk menjalankan perintah. Jika Anda menghilangkan ini, Anda tidak dapat menggunakan -uopsi.

  • groupmenentukan grup mana yang dapat Anda gunakan dengan -gopsi. Jika Anda menghilangkannya, Anda tidak dapat menggunakan -gopsi.

Keduanya userdan groupmemahami nilai khusus ALLsebagai "semua pengguna / grup"

Jika Anda menghilangkan semua (user:group)yang tidak dapat Anda gunakan -udan -gtetapi hanya menjalankan perintah sebagai root.

  • tag memungkinkan Anda menentukan beberapa opsi, seperti NOPASSWD

Jadi dengan contoh pertama Anda, Anda dapat menjalankan perintah sebagai root tetapi tidak dapat menggunakan -udan -gmenjalankannya sebagai pengguna atau grup lain.

Dengan contoh 2. Anda dapat menjalankan perintah sebagai root atau menggunakannya -uuntuk menjalankannya sebagai pengguna lain.

Dengan 3. Anda dapat menjalankan perintah sebagai root atau menggunakan -uatau -guntuk menjalankan perintah sebagai pengguna atau grup lain.

Florian Diesch
sumber
Ini persis apa yang saya cari. Saya telah menerima jawaban Anda, dan terima kasih atas upaya Anda.
Redsandro
1
Pemikiran akhir, dapat saya gunakan 127.0.0.1atau localhostsebagai hostuntuk keamanan tambahan sepele?
Redsandro
5
Halaman manual mengatakan 'Note sudo hanya memeriksa antarmuka jaringan yang sebenarnya; ini berarti alamat IP 127.0.0.1 (localhost) tidak akan pernah cocok. Juga, nama host "localhost" hanya akan cocok jika itu adalah nama host sebenarnya, yang biasanya hanya berlaku untuk sistem non-jaringan. '
Florian Diesch
1
Terima kasih. Tidak ada nama host untuk saya, terutama karena saya ingin dapat menyalin sudoersfile ke beberapa mesin. ALLini.
Redsandro
9

Mari kita bedakan ini:
redsandro ALL=(ALL:ALL) NOPASSWD:/path/to/command

redsandro adalah nama pengguna yang kami beri izin. Letakkan% di bagian depan untuk membuatnya berlaku untuk grup.

ALL adalah nama untuk aturan ini. Sudoers dapat melakukan lebih dari sekedar memberikan izin global. Di situlah menjadi rumit sekalipun.

= tidak perlu penjelasan

ALL: ALL membaca sebagai (who_to_run_it_as: what_group_to_run_it_as). Dengan cara ini Anda dapat mengizinkan menjalankan perintah, tetapi hanya dalam konteks pengguna atau grup tertentu.

NOPASSWD: memintanya untuk mematikan prompt kata sandi.

/ path / to / command memungkinkan Anda menentukan perintah spesifik path_to_commmand, another_command

Yang perlu diingat adalah bahwa sementara sudo sebagian besar digunakan oleh pengguna rumahan untuk meningkatkan ke root privilege, itu bisa dan digunakan untuk mengontrol akses ke perintah tertentu dengan cara yang jauh lebih terperinci.

RobotHumans
sumber
1
Terima kasih atas tambahan %dan , another_commandcatatannya. Sekarang saya mengerti %wheelgaris di distro berbasis Fedora.
Redsandro