Bagaimana saya bisa mengizinkan pengguna mengedit file sistem tertentu yang biasanya dibatasi untuk di-root?

8

Saya mencoba menulis /etc/network/interfacesdengan pengguna yang tidak memiliki hak akses root.

Alasan ingin menulis ini adalah untuk memungkinkan pengguna untuk menetapkan IP statis karena saya menjalankan server hanya baris perintah. Izin apa yang harus saya berikan kepada pengguna etc/sudoers?

Saya tidak ingin pengguna memiliki izin root penuh. Hanya kemampuan untuk mengedit file ini.

Keith
sumber

Jawaban:

25

Alih-alih menggunakan sudo, cukup atur ACL pada file:

$ ls -l /var/tmp/foo
-rw-rw---- 1 root root 4 Jul 31 15:26 /var/tmp/foo
$ sudo setfacl -m u:white:rw /var/tmp/foo
$ whoami
white
$ cat /var/tmp/foo
bar

Sekarang file tersebut dimiliki oleh 'root' tetapi pengguna 'putih' dapat membaca dan menulis padanya. Pengguna 'putih' sekarang dapat menggunakan editor favoritnya untuk mengedit file.

Jeff White
sumber
Sedikit bingung. Apakah /var/tmp/foo= /etc/network/interfaces? Belum pernah benar-benar melihat apa yang ingin Anda katakan di sana, saya cukup baru di Linux.
Keith
Itu hanya sebuah file. Anda dapat menggunakan file apa pun yang Anda inginkan.
Jeff White
1
Bagus. Saya pikir ACL hanya bisa digunakan untuk membatasi izin dan tidak memberikannya - senang mengetahui itu tidak benar!
Rmano
Tampaknya tidak didukung di bawah WSL:setfacl: /etc/logrotate.conf: Operation not supported
mpen
8

Persiapkan skrip yang melakukan pengeditan yang Anda inginkan, misalnya skrip yang menulis file yang benar dengan IP statis (apa yang harus dimasukkan dalam skrip ini berada di luar cakupan T&J ini). Sebut skrip ini /root/set_static_ip. (1)

Sunting /etc/sudoers(2) (dengan visudolebih baik, memeriksa kewarasan, sangat sulit untuk memulihkan sistem dengan file sudoers yang tidak valid, bahkan tidak mungkin dari jarak jauh (3)), dan menambahkan

user_name_to_authorize ALL=NOPASSWD: /root/set_static_ip 

Sekarang pengguna dapat menggunakan sudo /root/set_static_ip tanpa kata sandi yang diminta, dan skrip akan berjalan dengan semua hak istimewa; tidak ada perintah lain yang diizinkan.

Jika Anda ingin pengguna mengganti file dengan apa pun yang mereka inginkan, skripnya bisa saja (sebut saja /root/unsafe-overwrite-interface)

#! /bin/bash -e
#
cp /tmp/temp-iface.txt /etc/network/interfaces 
exit 0

... dan Anda memberi tahu pengguna untuk mengedit /tmp/temp-iface.txtdan kemudian menjalankan sudo /root/unsafe-overwrite-interface--- mengaktifkannya dalam sudoers seperti yang ditentukan di atas. Atau Anda dapat menambahkan pengguna ke daftar ACL dan memberi mereka izin menulis pada file tertentu .

Tetapi perhatikan bahwa jika Anda tidak memeriksa konten file untuk keamanan, malapetaka akan terjadi, baik disengaja atau tidak disengaja.


Catatan kaki :

(1) skrip ini harus seaman mungkin. Periksa input dan sebagainya. Ini akan dieksekusi dengan izin penuh.

(2) dalam instalasi sudo modern, Anda dapat menambahkan file ke /etc/sudoers.d/direktori yang lebih baik --- akan bertahan pembaruan.

(3) Saya biasanya menjaga terminal dengan sesi root terbuka ( sudo -i) ketika saya memodifikasi mekanisme sudoers, dan cadangan berguna.

Rmano
sumber
Satu-satunya masalah dengan ini adalah bahwa pengaturan IP statis perlu diubah sesuai permintaan. Pemahaman saya tentang skrip yang Anda rekomendasikan pada dasarnya akan menulis ulang /etc/network/interfacesfile menjadi apa pun /root/set_static_ipitu. Kecuali Anda dapat membuat skrip yang meminta pengguna untuk memasukkan alamat IP, gateway, dll ... Ini saya tidak cukup baik untuk membuatnya.
Keith
Anda dapat menulis skrip yang menerima parameter ... tapi ya, ini adalah cara teraman. Jika Anda membiarkan pengguna mengedit file secara membabi buta, apa yang terjadi jika mereka membuat kesalahan? Anda dapat membuat server Anda di luar jangkauan ... sehingga skrip tidak hanya perlu menanyakan beberapa parameter, tetapi juga untuk memeriksa apakah mereka aman.
Rmano
3
Mengenai /etc/sudoersitu visudo, bukan sudoedit.
saiarcot895
Jika seseorang mengajukan pertanyaan semacam ini, mungkin di luar kemampuan mereka untuk menulis skrip bash yang aman. Ada alasan mengapa Anda tidak dapat mengatur fluid root skrip bash.
rox0r