Maison  >  Article  >  Opération et maintenance  >  Quels sont les points de connaissance sur la commande Linux Sudo ?

Quels sont les points de connaissance sur la commande Linux Sudo ?

WBOY
WBOYavant
2023-05-31 11:31:30984parcourir

"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.

Visudo ouvre par défaut le fichier de configuration dans vi et utilise vi pour modifier le fichier. Nous pouvons modifier cet élément par défaut au moment de la compilation. visudo n'enregistrera pas les fichiers de configuration contenant des erreurs de syntaxe sans autorisation. Il vous indiquera les problèmes et vous demandera comment les résoudre, tout comme :

>>> sudoers file: syntax error, line 22 <<

À ce stade, nous avons trois options : tapez "e" pour rééditer, tapez "x" signifie quitter sans enregistrer. Tapez "Q" pour quitter et enregistrer. Si Q est sélectionné, sudo ne s'exécutera plus tant que l'erreur ne sera pas corrigée.

Maintenant, jetons un coup d'œil au mystérieux fichier de configuration et apprenons à l'écrire. Commençons par un exemple simple : laissez l'utilisateur Foobar exécuter toutes les commandes exécutables root via sudo. Ouvrez le fichier de configuration avec visudo en tant que root, et vous pouvez voir quelques lignes similaires à celles-ci :

# Runas alias specification
   
# User privilege specificationroot    ALL=(ALL)ALL

Nous comprenons presque en un coup d'œil. Root a toutes les autorisations. Suivez simplement l'exemple de root existant. Nous ajoutons une ligne ci-dessous (le. last C'est facile d'utiliser l'onglet comme un espace vide) :

foobar ALL=(ALL)    ALL

Après avoir enregistré et quitté, passez à l'utilisateur foobar. Nous utilisons son identité pour exécuter la commande :

[foobar@localhost ~]$ ls /root
   
ls: /root: 权限不够
   
[foobar@localhost ~]$ sudo ls /root
   
PassWord:
   
anaconda-ks.cfg Desktop install.log install.log.syslog

D'accord, limitons les droits de foobar et empêchons-le de faire ce qu'il veut. . Par exemple, si nous voulons simplement qu'il utilise ls et ifconfig comme root, remplacez cette ligne par :

foobar localhost=    /sbin/ifconfig,   /bin/ls

Ensuite, exécutez la commande :

[foobar@localhost ~]$ sudo head -5 /etc/shadow
   
Password:
   
Sorry, user foobar is not allowed to execute &#39;/usr/bin/head -5 /etc/shadow&#39; 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer