"Sudo" est un outil très utile sur les plateformes Unix/Linux. Il permet aux administrateurs système d'attribuer des "droits" raisonnables aux utilisateurs ordinaires, leur permettant d'effectuer certaines tâches que seuls les super utilisateurs ou autres utilisateurs privilégiés peuvent effectuer, telles que : Exécutez certaines commandes comme mount, halt, su ou modifiez certains fichiers de configuration système, comme /etc/mtab, /etc/samba/smb.conf, etc. De cette manière, cela réduit non seulement le nombre de connexions d’utilisateurs root et le temps de gestion, mais améliore également la sécurité du système.
1. Caractéristiques de sudo
Le rôle joué par sudo lui impose d'être très prudent en termes de sécurité, sinon les utilisateurs illégaux s'empareront des privilèges root. Dans le même temps, il doit également prendre en compte la facilité d'utilisation afin que les administrateurs système puissent l'utiliser de manière plus efficace et plus pratique. L'objectif des concepteurs de sudo était d'accorder aux utilisateurs le moins d'autorisations possible tout en leur permettant de terminer leur travail. Par conséquent, sudo
a les caractéristiques suivantes :
# 1. sudo peut empêcher des utilisateurs spécifiés d'exécuter certaines commandes sur des hôtes spécifiés.
# 2. sudo peut fournir des journaux, enregistrer fidèlement ce que chaque utilisateur a fait en utilisant sudo et peut transmettre les journaux à l'hôte central ou au serveur de journaux.
# 3. sudo fournit des fichiers de configuration pour les administrateurs système, permettant aux administrateurs système de gérer de manière centralisée les autorisations des utilisateurs et les hôtes. Son emplacement de stockage par défaut est /etc/sudoers.
# 4.sudo utilise des fichiers d'horodatage pour compléter un système similaire à la "vérification de tickets". Lorsque l'utilisateur exécute sudo et saisit le mot de passe, l'utilisateur obtient un "ticket" avec une période de survie par défaut de 5 minutes (la valeur par défaut peut être modifiée lors de la compilation). Après l'expiration du délai, l'utilisateur doit ressaisir le mot de passe.
2. Commande sudo
Le programme sudo lui-même est un fichier binaire avec le bit SUID défini. Nous pouvons vérifier ses autorisations :
$ls -l /usr/bin/sudo ---s--x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo
Les configurations Sudo sont enregistrées dans le fichier /etc/sudoers, que nous expliquerons en détail ci-dessous. Les fichiers de configuration spécifient quels utilisateurs peuvent exécuter quelles commandes. Pour utiliser sudo, l'utilisateur doit fournir un nom d'utilisateur et un mot de passe spécifiques. Remarque : sudo ne nécessite pas le mot de passe de l'utilisateur cible, mais le mot de passe de l'utilisateur exécutant sudo. Si un utilisateur qui n'est pas dans sudoers exécute une commande via sudo, sudo signalera cet événement à l'administrateur. Les utilisateurs peuvent utiliser sudo -v pour vérifier s'ils font partie des sudoers. Si tel est le cas, il peut également mettre à jour l'heure sur votre « ticket », sinon, il vous le demandera mais n'en informera pas l'administrateur.
Le format de la commande sudo est le suivant :
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。
Il existe également des paramètres moins couramment utilisés, qui peuvent être trouvés dans la page de manuel sudo(8).
3. Configurez sudo
La configuration de sudo doit se faire en éditant le fichier /etc/sudoers, et seuls les super utilisateurs peuvent le modifier, et doit également être modifié à l'aide de visudo. Il y a deux raisons pour lesquelles visudo est utilisé. L'une est qu'il peut empêcher deux utilisateurs de le modifier en même temps ; l'autre est qu'il peut également effectuer une vérification de syntaxe limitée. Ainsi, même si vous êtes le seul super utilisateur, vous feriez mieux d'utiliser visudo pour vérifier la syntaxe.
>>> sudoers file: syntax error, line 22 <<
# Runas alias specification # User privilege specificationroot ALL=(ALL)ALL
foobar ALL=(ALL) ALL
[foobar@localhost ~]$ ls /root ls: /root: 权限不够 [foobar@localhost ~]$ sudo ls /root PassWord: anaconda-ks.cfg Desktop install.log install.log.syslog
foobar localhost= /sbin/ifconfig, /bin/ls
[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来配置这些环境变量。
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!