"Sudo" ialah alat yang sangat berguna pada platform Unix/Linux Ia membenarkan pentadbir sistem untuk memberikan beberapa "hak" yang munasabah kepada pengguna biasa, membolehkan mereka melakukan beberapa tugas yang hanya boleh diselesaikan oleh pengguna super atau pengguna istimewa lain. , sebagai contoh: jalankan beberapa arahan seperti mount, halt, su, 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, ia akan membawa kepada pengguna yang menyalahi undang-undang untuk merampas akar. keistimewaan. 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. Kami boleh menyemak kebenarannya:
$ls -l /usr/bin/sudo ---s--x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo
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:
sudo -K -L -V -h -k -l -vsudo [-HPSb] [-a auth_type] [-c class-] [-p prompt] [-u username#uid] {-e file [...] -i -s command} 下面我们再来看一下sudo其它常用的一些参数: 选项 含义 作用 sudo -h Help 列出使用方法,退出。 sudo -V Version 显示版本信息,并退出。 sudo -l List 列出当前用户可以执行的命令。只有在sudoers里的用户才能使用该选项。 sudo -u username#uid User 以指定用户的身份执行命令。后面的用户是除root以外的,可以是用户名,也可以是#uid。 sudo -k Kill 清除“入场卷”上的时间,下次再使用sudo时要再输入密码。 sudo -K Sure kill 与-k类似,但是它还要撕毁“入场卷”,也就是删除时间戳文件。 sudo -b command Background 在后台执行指定的命令。 sudo -p prompt command Prompt 可以更改询问密码的提示语,其中%u会代换为使用者帐号名称,%h会显示主机名称。非常人性化的设计。 sudo -e file Edit 不是执行命令,而是修改文件,相当于命令sudoedit。
Terdapat juga beberapa parameter yang kurang biasa digunakan, yang boleh didapati dalam halaman manual sudo(8).
3. Mengkonfigurasi sudo
Mengkonfigurasi sudo mestilah dengan mengedit fail /etc/sudoers dan hanya pengguna super boleh mengubah suainya dan anda mesti menggunakan visudo untuk mengedit ia. Terdapat dua sebab mengapa visudo digunakan Pertama, ia boleh menghalang
daripada diubah suai oleh dua pengguna pada masa yang sama, 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:
>>> sudoers file: syntax error, line 22 <<
Pada ketika ini kami mempunyai tiga pilihan: Taip "e" untuk semula. - Untuk mengedit, taip "x" untuk keluar tanpa menyimpan, dan 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 root, anda boleh melihat beberapa baris yang serupa dengan yang berikut:
# Runas alias specification # User privilege specificationroot ALL=(ALL)ALL
Kami boleh memahaminya dengan sepintas lalu Root mempunyai semua kebenaran Tambah baris (sebaik-baiknya gunakan tab sebagai kosong):
foobar ALL=(ALL) ALL
Selepas menyimpan dan keluar, tukar ke foobar pengguna Kami menggunakan identitinya untuk melaksanakan arahan:
[foobar@localhost ~]$ ls /root ls: /root: 权限不够 [foobar@localhost ~]$ sudo ls /root PassWord: anaconda-ks.cfg Desktop install.log install.log.syslog
Okey, mari kita sekat Hak foobar, jangan biarkan dia melakukan apa sahaja yang dia mahu. Sebagai contoh, kami hanya mahu dia menggunakan ls dan ifconfig seperti root, tukar baris itu kepada:
foobar localhost= /sbin/ifconfig, /bin/ls
dan kemudian laksanakan arahan:
[foobar@localhost ~]$ sudo head -5 /etc/shadow Password: Sorry, user foobar is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain. [foobar@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...
现在让我们来看一下那三个ALL到底是什么意思。第一个ALL是指网络中的主机,我们后面把它改成了主机名,它指明
foobar可以在此主机上执行后面的命令。第二个括号里的ALL是指目标用户,也就是以谁的身份去执行命令。最后一个
ALL当然就是指命令名了。例如,我们想让foobar用户在linux主机上以jimmy或rene的身份执行kill命令,这样编写配置文件:
foobar linux=(jimmy,rene) /bin/kill
但这还有个问题,foobar到底以jimmy还是rene的身份执行?这时我们应该想到了sudo -u了,它正是用在这种时候。 foobar可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但这样挺麻烦,其实我们可以不必每次加-u,把rene或jimmy设为默认的目标用户即可。再在上面加一行:
Defaults:foobar runas_default=rene
Defaults后面如果有冒号,是对后面用户的默认,如果没有,则是对所有用户的默认。就像配置文件中自带的一行:
Defaults env_reset
另一个问题是,很多时候,我们本来就登录了,每次使用sudo还要输入密码就显得烦琐了。我们可不可以不再输入密码呢?当然可以,我们这样修改配置文件:
foobar localhost=NOPASSWD: /bin/cat, /bin/ls
再来sudo一下:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log install.log.syslog
当然,你也可以说“某些命令用户foobar不可以运行”,通过使用!操作符,但这不是一个好主意。因为,用!操作符来从ALL中“剔出”一些命令一般是没什么效果的,一个用户完全可以把那个命令拷贝到别的地方,换一个名字后再来运行。
四. 日志与安全
sudo为安全考虑得很周到,不仅可以记录日志,还能在有必要时向系统管理员报告。但是,sudo的日志功能不是自动的,必须由管理员开启。这样来做:
# toUCh /var/log/sudo # vi /etc/syslog.conf
在syslog.conf最后面加一行(必须用tab分割开)并保存:
local2.debug /var/log/sudo
重启日志守候进程,
ps aux grep syslogd
把得到的syslogd进程的PID(输出的第二列是PID)填入下面:
kill –HUP PID
这样,sudo就可以写日志了:
[foobar@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log install.log.syslog $cat /var/log/sudoJul 28 22:52:54 localhost sudo: foobar : TTY=pts/1 ; PWD=/home/foobar ; USER=root ; COMMAND=/bin/ls /root
不过,有一个小小的“缺陷”,sudo记录日志并不是很忠实:
[foobar@localhost ~]$ sudo cat /etc/shadow > /dev/null [foobar@localhost ~]$ cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: foobar : TTY=pts/1 ; PWD=/home/foobar ; USER=root ; COMMAND=/bin/cat /etc/shadow
重定向没有被记录在案!为什么?因为在命令运行之前,shell把重定向的工作做完了,sudo根本就没看到重定向。这也有个好处,下面的手段不会得逞:
[foobar@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 权限不够
sudo 有自己的方式来保护安全。以root的身份执行sudo
-V,查看一下sudo的设置。因为考虑到安全问题,一部分环境变量并没有传递给sudo后面的命令,或者被检查后再传递的,比如:PATH,HOME,
SHELL等。当然,你也可以通过sudoers来配置这些环境变量。
Atas ialah kandungan terperinci Apakah mata pengetahuan tentang arahan sudo linux?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!