Rumah > Artikel > Operasi dan penyelenggaraan > Cara menggunakan arahan sudo dalam sistem linux
Contohnya: jalankan beberapa arahan seperti mount, halt, su, dsb., atau edit beberapa fail konfigurasi sistem, seperti /etc/mtab, /etc/samba/smb.conf, dsb. Dengan cara ini, ia bukan sahaja mengurangkan bilangan log masuk pengguna akar dan masa pengurusan, tetapi juga meningkatkan keselamatan sistem.
1. Ciri-ciri sudo
Peranan yang dimainkan oleh sudo menentukan bahawa ia mesti lebih berhati-hati dari segi keselamatan, jika tidak, pengguna yang menyalahi undang-undang akan merampas keistimewaan root. Pada masa yang sama, ia juga mesti mengambil kira kemudahan penggunaan supaya pentadbir sistem boleh menggunakannya dengan lebih cekap dan mudah. Matlamat pereka sudo adalah untuk memberi pengguna seberapa sedikit kebenaran yang mungkin sambil masih membenarkan mereka menyelesaikan kerja mereka. Oleh itu, sudo
mempunyai ciri-ciri berikut:
# 1. sudo boleh menyekat pengguna tertentu daripada menjalankan arahan tertentu pada hos tertentu.
# 2. sudo boleh menyediakan log, merekod dengan setia apa yang telah dilakukan oleh setiap pengguna menggunakan sudo, dan boleh menghantar log ke hos pusat atau pelayan log.
# 3. sudo menyediakan fail konfigurasi untuk pentadbir sistem, membenarkan pentadbir sistem mengurus kebenaran pengguna dan hos secara berpusat. Lokasi storan lalainya ialah /etc/sudoers.
# 4.sudo menggunakan fail cap masa untuk melengkapkan sistem yang serupa dengan "semakan tiket". Apabila pengguna melaksanakan sudo dan memasukkan kata laluan, pengguna memperoleh "tiket" dengan tempoh kelangsungan hidup lalai selama 5 minit (nilai lalai boleh ditukar semasa penyusunan). Selepas tamat masa, pengguna mesti memasukkan semula kata laluan.
2. arahan sudo
Program sudo itu sendiri ialah fail binari dengan set bit suid. Kita boleh menyemak kebenarannya:
Salin kod Kod adalah seperti berikut:
$ls -l /usr/bin/sudo
---s -- x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo
Pemiliknya ialah root, jadi setiap pengguna boleh melaksanakan program seperti root. Program dengan set suid boleh memberikan pengguna euid pemilik apabila berjalan. Inilah sebabnya mengapa program yang menetapkan suid mesti ditulis dengan teliti. Tetapi menetapkan suid fail arahan dan menjalankannya dengan sudo adalah konsep yang berbeza, dan mereka memainkan peranan yang berbeza.
Konfigurasi Sudo direkodkan dalam fail /etc/sudoers, yang akan kami terangkan secara terperinci di bawah. Fail konfigurasi menentukan pengguna yang boleh melaksanakan arahan mana. Untuk menggunakan sudo, pengguna mesti memberikan nama pengguna dan kata laluan tertentu. Nota: sudo tidak memerlukan kata laluan pengguna sasaran, tetapi kata laluan pengguna yang melaksanakan sudo. Jika pengguna yang tidak berada dalam sudoer melaksanakan perintah melalui sudo, sudo akan melaporkan acara ini kepada pentadbir. Pengguna boleh menggunakan sudo -v untuk menyemak sama ada mereka adalah antara sudoer. Jika ya, ia juga boleh mengemas kini masa pada "tiket" anda jika tidak, ia akan menggesa anda tetapi tidak memberitahu pentadbir.
Format arahan sudo adalah seperti berikut:
Salin kod Kod adalah seperti berikut:
sudo -k -l -v -h - k -l -vsudo [ -hpsb] [-a auth_type] [-c class-] [-p prompt] [-u username#uid] {-e file [...] -i -s command}
Mari kita lihat beberapa parameter lain yang biasa digunakan sudo:
Fungsi Makna Pilihan
sudo-hhelp menyenaraikan kaedah penggunaan dan keluar.
sudo-vversion memaparkan maklumat versi dan keluar.
sudo-llist menyenaraikan arahan yang boleh dilaksanakan oleh pengguna semasa. Hanya pengguna dalam sudoers boleh menggunakan pilihan ini.
sudo-uusername#uiduser melaksanakan arahan sebagai pengguna yang ditentukan. Pengguna berikut adalah selain daripada akar, dan boleh menjadi nama pengguna atau #uid.
sudo-kkill mengosongkan masa pada "tiket kemasukan" dan memerlukan anda memasukkan kata laluan sekali lagi pada kali berikutnya anda menggunakan sudo.
sudo-ksurekill serupa dengan -k, tetapi ia juga mengoyakkan "tiket masuk", iaitu memadamkan fail cap waktu.
sudo-bcommandbackground melaksanakan arahan yang ditentukan di latar belakang.
sudo-ppromptcommandprompt boleh menukar gesaan kata laluan, di mana %u akan digantikan dengan nama akaun pengguna dan %h akan memaparkan nama hos. Reka bentuk yang sangat mesra pengguna.
sudo-efileedit tidak melaksanakan perintah, tetapi mengubah suai fail, yang setara dengan perintah sudoedit.
Terdapat juga beberapa parameter yang kurang biasa digunakan, yang boleh didapati dalam halaman manual sudo(8).
3. Konfigurasikan sudo
Konfigurasi sudo mestilah dengan mengedit fail /etc/sudoers, dan hanya pengguna super boleh mengubah suainya dan juga mesti diedit menggunakan visudo. Terdapat dua sebab mengapa visudo digunakan Satu ialah ia boleh menghalang
dua pengguna daripada mengubah suainya pada masa yang sama; yang lain ialah ia juga boleh melakukan semakan sintaks terhad. Jadi, walaupun anda satu-satunya pengguna super, lebih baik anda menggunakan visudo untuk menyemak sintaks.
Visudo lalai untuk membuka fail konfigurasi dalam vi dan menggunakan vi untuk mengubah suai fail. Kami boleh mengubah suai item lalai ini pada masa penyusunan. visudo tidak akan menyimpan fail konfigurasi dengan ralat sintaks tanpa kebenaran Ia akan menggesa anda dengan masalah dan bertanya cara menanganinya, seperti:
Salin kod Kodnya adalah seperti berikut:
<.>>>>sudoersfile:syntaxerror,line22<<
Pada ketika ini kita mempunyai tiga pilihan: taip "e" untuk mengedit semula, taip " x" untuk tidak Simpan dan keluar. Taip "q" untuk keluar dan simpan. Jika q dipilih, sudo tidak akan dijalankan semula sehingga ralat dibetulkan.
Sekarang, mari kita lihat fail konfigurasi misteri dan pelajari cara menulisnya. Mari kita mulakan dengan contoh mudah: biarkan pengguna foobar melaksanakan semua arahan boleh laku root melalui sudo. Buka fail konfigurasi dengan visudo sebagai akar, anda boleh melihat baris yang serupa dengan yang berikut:
Salin kod Kod adalah seperti berikut:
#runasaliasspecification
#userprivilegespecificationrootall=(all )all
Kami akan faham sepintas lalu bahawa root mempunyai semua kebenaran Hanya ikuti contoh root yang sedia ada Kami menambah baris di bawah (sebaik-baiknya menggunakan tab sebagai kosong):
Salin kod Kod adalah seperti berikut:
foobarall=(semua)semua
Selepas menyimpan dan keluar, tukar kepada pengguna foobar, kami menggunakan Identitinya melaksanakan perintah:
Salin kod Kod adalah seperti berikut:
[foobar@localhost~]$ls /root
ls:/root: Kebenaran tidak mencukupi
[foobar@localhost~]$sudols/root
kata laluan:
anaconda-ks.cfgdesktopinstall.loginstall.log.syslog
Baiklah, mari kita sekat hak foobar. Jangan biarkan dia melakukan apa sahaja yang dia mahu. Sebagai contoh, kita hanya mahu dia menggunakan ls dan ifconfig seperti root, tukar baris itu kepada:
Salin kod Kodnya adalah seperti berikut:
foobarlocalhost=/ sbin/ifconfig, /bin/ls
Laksanakan arahan sekali lagi:
Salin kod Kodnya adalah seperti berikut:
[foobar@localhost~]$ sudohead-5/etc/shadow
kata laluan:
maaf,userfoobarisnotallowedtoexecute'/usr/bin/head-5/etc/shadow'asrootonlocalhost.localdomain.
[foobar @localhost~]$sudo/sbin/ ifconfigeth0linkencap:ethernethwaddr00:14:85:ec:e9:9b...
Sekarang mari kita lihat maksud ketiga-tiga itu. Yang pertama semua merujuk kepada hos dalam rangkaian Kami kemudian menukarnya kepada nama hos Ia menunjukkan bahawa
foobar boleh melaksanakan perintah berikutnya pada hos ini. Semua dalam kurungan kedua merujuk kepada pengguna sasaran, iaitu identiti untuk melaksanakan arahan. Yang terakhir
semua sudah tentu nama arahan. Sebagai contoh, kami mahu pengguna foobar melaksanakan perintah bunuh sebagai jimmy atau rene pada hos Linux dan tulis fail konfigurasi seperti ini:
foobarlinux=(jimmy,rene)/bin/kill
Tetapi masih ada soalan, patutkah foobar dilaksanakan sebagai jimmy atau rene? Pada masa ini kita harus memikirkan sudo-u, yang digunakan pada masa ini. foobar boleh menggunakan sudo-ujimmykillpid atau sudo-urenekillpid, tetapi ini sangat menyusahkan, kita tidak perlu menambah -u setiap kali, cuma tetapkan rene atau jimmy sebagai pengguna sasaran lalai. Tambah satu lagi baris di atas:
defaults:foobarrunas_default=rene
Jika terdapat titik bertindih selepas lalai, ia adalah lalai untuk pengguna berikutnya. Jika tidak, ia adalah lalai untuk semua pengguna. Sama seperti baris yang disertakan dengan fail konfigurasi:
defaultsenv_reset
Masalah lain ialah berkali-kali, kita sudah log masuk, dan menyusahkan untuk memasukkan kata laluan setiap kali kita menggunakan sudo. Bolehkah kita berhenti memasukkan kata laluan? Sudah tentu, kita boleh mengubah suai fail konfigurasi seperti ini:
foobarlocalhost=nopasswd:/bin/cat,/bin/ls
Gunakan sudo sekali lagi:
Salin kod Kodnya adalah seperti berikut:
[foobar@localhost~]$sudols/rootanaconda-ks.cfgdesktopinstall.log
install.log.syslog
Sudah tentu, anda juga boleh menyebut "Sesetengah arahan tidak boleh dijalankan sebagai foobar pengguna" dengan menggunakan operator !, tetapi ini bukan idea yang baik. Oleh kerana menggunakan operator ! untuk "menghapuskan" beberapa arahan daripada semua secara amnya tidak mempunyai kesan, pengguna boleh menyalin arahan itu ke tempat lain, menukar namanya, dan kemudian menjalankannya.
4. Log dan Keselamatan
sudo sangat bertimbang rasa untuk keselamatan. Ia bukan sahaja boleh merekodkan log, tetapi juga melaporkan kepada pentadbir sistem apabila perlu. Walau bagaimanapun, fungsi pengelogan sudo tidak automatik dan mesti didayakan oleh pentadbir. Lakukan ini:
Salin kod Kod adalah seperti berikut:
#touch/var/log/sudo
#vi/etc/syslog.conf
Tambah baris di penghujung syslog.conf (mesti dipisahkan oleh tab) dan simpan:
local2.debug/var/log/sudo
Mulakan semula log menunggu proses,
psauxgrepsyslogd
Isikan pid yang diperolehi bagi proses syslogd (lajur kedua output ialah pid) di bawah:
kill–huppid
Dengan cara ini, sudo boleh menulis log:
Salin kod Kod adalah seperti berikut:
[foobar@localhost~]$sudols/rootanaconda-ks.cfg
desktopinstall.log
install.log.syslog
$cat/var/log/sudojul2822:52:54localhostsudo:foobar:
tty=pts/1;pwd=/home/foobar;user=root; command=/bin/ls/root
Walau bagaimanapun, terdapat "kecacatan" kecil, log sudo tidak begitu setia:
Salin kod Kod itu seperti berikut:
[foobar @localhost~]$sudocat/etc/shadow>/dev/null
[foobar@localhost~]$
cat/var/log/sudo. ..jul2823:10:24localhostsudo:foobar:tty=pts/ 1;
pwd=/home/foobar;user=root;command=/bin/cat/etc/shadow
The ubah hala tidak dilog! kenapa? Oleh kerana shell telah menyelesaikan ubah hala sebelum arahan dijalankan, sudo tidak melihat ubah hala sama sekali. Ini juga mempunyai kelebihan bahawa kaedah berikut tidak akan berjaya:
Salin kod Kod adalah seperti berikut:
[foobar@localhost~]$sudols/root>/etc/shadowbash:/etc/shadow: Kebenaran tidak mencukupi
sudo mempunyai cara tersendiri untuk melindungi keselamatan. Jalankan sudo
-v sebagai root untuk menyemak tetapan sudo. Disebabkan isu keselamatan, sesetengah pembolehubah persekitaran tidak dihantar ke perintah selepas sudo, atau diluluskan selepas diperiksa, seperti: laluan, rumah,
shell, dsb. Sudah tentu, anda juga boleh mengkonfigurasi pembolehubah persekitaran ini melalui sudoers.
Atas ialah kandungan terperinci Cara menggunakan arahan sudo dalam sistem linux. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!