Saya ingin memberikan akses non-sudo ke pengguna non-root di komputer saya, ada pengguna dns-manager, satu-satunya perannya adalah menjalankan semua perintah BIND (rndc, dnssec-keygen) dll.
Sekarang setiap kali dia harus menjalankan perintah, dia mengetik,
sudo rndc reload
Apakah ada cara saya bisa menghilangkan sudo ini, tetapi hanya pada seperangkat perintah tertentu (dan hanya untuk dns-manager)?
sudo
. Apa keberatan bisnis Anda terhadap penggunaannyasudo
untuk ini?sudo
. Apa keberatannya?sudo
? Atau sudo dengan kata sandi untuk menjalankan alat manajemen DNS , yang kemudian dapat beroperasi dengannamed
hak istimewa kelompok atau pengguna, atau hak istimewa root, sesuai kebutuhan.sudo
. Dalam mencoba mengungkapkannya kepada kita, dia dapat menjernihkan kebingungan kita, atau kebingungannya sendiri - atau keduanya!Jawaban:
Jika saya memahami komentar Anda dengan benar, masalah di sini adalah bahwa perintah akan dikeluarkan melalui koneksi yang tidak memiliki kemampuan untuk memasukkan kata sandi yang sudo default untuk meminta. Juga, dalam banyak distribusi OS, sudo akan default untuk memerlukan TTY - yang mungkin tidak dimiliki oleh program ini.
Namun, sudo dapat memiliki struktur izin yang sangat halus, memungkinkan untuk memungkinkan satu atau lebih pengguna untuk mengeluarkan satu perintah tertentu tanpa kata sandi dan TTY. Di bawah ini, saya akan menunjukkan tiga cara untuk mengkonfigurasi ini untuk kebutuhan Anda. Apa pun yang Anda pilih, pengguna sekarang dapat mengeluarkan perintah
sudo rndc reload
tanpa harus memasukkan kata sandi.(Juga, ini mungkin tidak perlu, tapi ... harap ingat untuk membuat salinan cadangan file sudoers Anda sebelum mengeditnya, untuk menyimpan shell di tempat Anda root terbuka jika Anda perlu kembali ke cadangan, dan untuk mengedit menggunakan
visudo
alih-alihsudo vi /etc/sudoers
. Mudah-mudahan tindakan pencegahan ini tidak perlu, tapi ... lebih baik memilikinya dan tidak membutuhkannya daripada sebaliknya!)1. Jika Anda tidak ingin meminta TTY untuk permintaan apa pun
Cara termudah untuk menyingkirkan persyaratan TTY (jika ada) adalah memastikan bahwa baris yang dimulai dengan
Defaults
di/etc/sudoers
tidak mengandung katarequiretty
- sebaliknya, seharusnya berisi!requiretty
. Namun, jika Anda melakukan ini, itu berarti bahwa tidak ada perintah sudo yang membutuhkan tty!Anda juga perlu menambahkan baris
2. Jika Anda ingin meminta TTY untuk semua pengguna kecuali yang ini
Ini dapat dilakukan dengan menetapkan default untuk pengguna yang satu ini, seperti ini:
3. Jika Anda ingin mengirim kembali TTY untuk semua perintah kecuali perintah yang satu ini oleh pengguna yang satu ini
Ini sedikit lebih rumit, karena sintaks dari file sudoers. Anda harus membuat alias alias untuk perintah, dan kemudian menetapkan default untuk alias perintah itu, seperti:
sumber
Iya. sudo dapat dikonfigurasi dengan sangat fleksibel. Meski begitu, saya harus menyebutkan: jenis-jenis solusi ini tidak boleh dianggap sangat aman, dan mereka hanya boleh digunakan dalam lingkungan kerja sama di mana kontrol lain berada di tempat (dengan demikian, Anda dapat memberikan hak istimewa yang ditingkatkan ini kepada bawahan setia Anda, tetapi seharusnya tidak melakukannya untuk pelanggan yang Anda tahu hanya dari internet).
Konfigurasi sudo ada di
/etc/sudoers
di sebagian besar sistem. Anda dapat mengetahui sintaksnya dengan Googling atau denganman sudo
perintah.Anda tidak boleh mengedit file ini secara langsung; hal itu dapat menyebabkan kondisi perlombaan keamanan. Sebagai gantinya, gunakan
visudo
perintah (yang merupakan pembungkus$EDITOR
variabel lingkungan Anda ).Setelah Anda mengkonfigurasi sudo, Anda dapat dengan mudah membungkus ini di sekitar perintah yang terlihat. Ini sangat sederhana:
/usr/local/dnsadmin/bin
)Buat skrip wrapper untuk perintah yang Anda inginkan agar dapat digunakan tanpa sudo. Ini akan menjadi perintah yang sangat sederhana, misalnya,
/usr/local/dnsadmin/bin/rndc
akan menjadi:#!/bin/bash exec /usr/bin/sudo /usr/sbin/rndc "$@"
Dapatkan direktori ini ke
PATH
variabel lingkungan mereka (mis. Oleh sistem-lebar atau lokal mereka.profile
).sumber
exec
skrip shell daripada hanya memanggil perintah secara langsung? (Saya tidak mengatakan itu salah, saya hanya ingin tahu mengapa Anda melakukannya sehingga saya bisa belajar sesuatu)exec
, perintah yang dipanggil akan diganti di tempat shell. Shell akan pergi. Tanpa exec, shell akan memulai perintah itu, dan kemudian menunggu terminasi, dan kemudian keluar. Yang kedua, exec-less berarti beberapa proses kerja sama, yang tidak dibutuhkan. Tetapi tidak ada perbedaan besar, tanpa eksekutif akan bekerja dengan baik dengan itu.Meskipun ini bukan solusi umum dalam kasus spesifik
rndc
Anda tidak perlusudo
sama sekali.rndc
dapat berkomunikasi dengannamed
proses apa pun baik melalui soket lokal atau port jarak jauh, menggunakan kunci rahasia untuk mengotentikasi dirinya sendiri. Secara default (atau setidaknya, untuk debian, yang merupakan distro yang saya gunakan) file ini dapat ditemukan di/etc/bind/rndc.key
dan biasanya hanya dapat dibaca oleh penggunabind
dan grupbind
.Siapa pun yang memiliki akses baca ke file kunci itu (atau salinannya yang identik) dapat digunakan
rndc
untuk mengontrol server BIND, sehingga solusi termudah dalam kasus khusus ini adalah menambahkan pengguna kebind
grup.Sejumlah daemon umum yang mengejutkan memiliki pengaturan serupa (saya pribadi masih mencari tahu kemungkinan powerdns dalam hal itu, tetapi sejauh ini terlihat menjanjikan). Jika Anda tidak ingin melakukannya,
sudo
Anda harus memeriksa apakah yang ingin Anda capai adalah mungkin berdasarkan kasus per kasus.sumber
Anda tidak ingin menggunakan sudo untuk memberikan root untuk beberapa perintah. Sebagai gantinya Anda dapat chmod 4750 program tertentu [yang dapat membungkus perintah], untuk meningkatkan hak-hak pengguna normal untuk mengeksekusi itu sebagai root.
sumber