Batasi pengguna untuk menjalankan perintah selektif (Linux)

14

Bagaimana saya bisa membatasi pengguna saya untuk hanya menjalankan perintah selektif. Saya memiliki tomc pengguna dalam grup tomc. Saya perlu pengguna ini menjadi pengguna sudo dan kemudian memiliki bash terbatas. Saya telah mencoba mengikuti kode dalam /etc/sudoersfile, tetapi tidak berfungsi karena pengguna dapat menjalankan perintah lain seperti mkdir,rm

%tomc ALL=/bin/bash,/usr/bin/vim /*
pemula17
sumber
3
Meskipun penggunaan sudo dapat dibatasi untuk perintah tertentu, ini bisa rumit dan membutuhkan kepercayaan. Jika Anda tidak mempercayai pengguna, maka memberi mereka akses sudo adalah ide yang buruk. Ini akan memberi mereka root privilege atau memberi mereka aplikasi yang fokus untuk menyerang untuk mendapatkan privilege root. Membiarkan seseorang berjalan sudo bashsetara dengan sebagian besar cara untuk mendapatkan kata sandi root. Dari sudo bashshell mereka dapat menjalankan perintah admin, menginstal atau menghapus perangkat lunak, menghapus pengguna dan direktori, dll.
Paul
@ Paul Bisakah Anda menyarankan saya pilihan yang lebih baik dan praktis untuk ini?
Pertama, ini off topic pada stack overflow. Tempat yang lebih baik untuk ditanyakan termasuk superuser, atau askubuntu, atau linux & unix. Pertama-tama cari tahu apa yang ingin Anda izinkan tomc lakukan. tomc harus diizinkan untuk melakukan _____ tetapi tidak ________. Lalu tanyakan. Sudo adalah untuk perintah yang memerlukan root (admin) priv. Dia sudah bisa menjalankan bash tanpa menjalankannya sebagai root.
Paul

Jawaban:

18

Anda mungkin salah dalam hal ini. Alih-alih memberi pengguna 'bash shell', Anda seharusnya hanya memberi mereka akses ke perintah yang mereka perlukan untuk dijalankan sebagai root. Misalnya, dalam file sudoers Anda:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log

Hati-hati dengan mengizinkan pengguna untuk menjalankan vim sebagai root. Vim memiliki banyak fitur built-in, seperti lolos ke shell dan kemampuan untuk menjalankan perintah dari dalam vim. Tergantung pada distribusi Anda, Anda mungkin sudah sudoedittersedia. Ini berfungsi sama seperti Vim normal, kecuali itu dirancang untuk menangani shell lolos dan semacamnya.

mtak
sumber
7
Tak satu pun dari garis-garis itu aman. Seperti yang Anda sebutkan,vimdapat menjalankan perintah shell sewenang-wenang. Dan baris kedua mungkin akan memungkinkanless /var/log/myapp/../../../etc/shadow! Menurut percobaan saya menggunakan sudo dengan aman itu sulit ! Tetapi jika Anda dapat menghindari*dan menggunakansudoeditbukanvimmaka Anda mungkin baik-baik saja.
joeytwiddle
Menghindari *tidak cukup! Begitu masuk lesssebagai rootpengguna, coba ketikkan !tail /var/log/secure. Bagaimana rasanya? Pelajari NOEXECtag. Tapi ingatlah pesan @ joeytwiddle dalam hati: keselamatan sudo memang sulit.
Bruno Bronosky
3

Pada Synology Diskstation saya yang menjalankan DSM 6 hanya pengguna admin yang dapat melakukan ssh secara konsisten (pengguna non-admin memiliki shell sebagai / sbin / nologin di / etc / passwd - Anda dapat mengatur ini ke / bin / sh untuk sementara mengizinkan ssh, tetapi saat reboot file / etc / passwd diatur ulang). Untuk alasan ini diperlukan semacam batasan sudo untuk akun yang jika tidak ada hanya untuk menjalankan mis. / Sbin / poweroff. Baris berikut di / etc / sudoers berguna untuk saya:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff

Terjemahan: melarang semua perintah, kemudian hanya mengizinkan perintah yang diinginkan (tanpa meminta kata sandi dalam hal ini).

Dengan konfigurasi ini, sudo meminta kata sandi dan kemudian gagal untuk perintah selain yang masuk daftar putih:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
robm
sumber