Maison  >  Article  >  Opération et maintenance  >  Comment utiliser la commande sudo dans le système Linux

Comment utiliser la commande sudo dans le système Linux

王林
王林avant
2023-05-14 15:01:205498parcourir

Par exemple : 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 que joue 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 des billets ». 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. On peut vérifier ses autorisations :

Copiez le code Le code est le suivant :


$ls -l /usr/bin/sudo# 🎜🎜 #---s--x--x 2 root root 106832 02-12 17:41 /usr/bin/sudo

Son propriétaire est root, donc chaque utilisateur Vous peut exécuter le programme en tant que root. Un programme avec suid défini peut donner à l'utilisateur l'euid du propriétaire lors de son exécution. C'est pourquoi les programmes qui définissent suid doivent être écrits avec soin. Mais définir le suid d'un fichier de commande et l'exécuter avec sudo sont des concepts différents et jouent des rôles différents.

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 :


Copier le code Le code est le suivant :

sudo - k -l -v - h -k -l -vsudo [-hpsb] [-a type_auth] [-c classe-] [-p invite] [-u nom d'utilisateur#uid] {-e fichier [...] - Commande i -s}# 🎜🎜#

Jetons un coup d'œil à quelques autres paramètres couramment utilisés de sudo :

Option Signification Fonction

sudo-hhelp répertorie les méthodes d'utilisation et sorties.

sudo-vversion affiche les informations de version et quitte.
sudo-llist répertorie les commandes que l'utilisateur actuel peut exécuter. Seuls les utilisateurs des sudoers peuvent utiliser cette option.
sudo-uusername#uiduser exécute les commandes en tant qu'utilisateur spécifié. Les utilisateurs suivants sont autres que root et peuvent être des noms d'utilisateur ou des #uid.

sudo-kkill efface l'heure sur le "billet d'entrée", et vous devrez saisir à nouveau le mot de passe la prochaine fois que vous utiliserez sudo.

sudo-ksurekill est similaire à -k, mais il déchire également le "ticket d'entrée", c'est-à-dire supprime le fichier d'horodatage.

sudo-bcommandbackground exécute la commande spécifiée en arrière-plan.

sudo-ppromptcommandprompt peut modifier l'invite de mot de passe, où %u sera remplacé par le nom du compte utilisateur et %h affichera le nom d'hôte. Conception très conviviale.

sudo-efileedit n'exécute pas de commande, mais modifie un fichier, ce qui est équivalent à la commande 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 doivent également utiliser visudo pour le modifier. Il y a deux raisons pour lesquelles visudo est utilisé. L'une est qu'il peut empêcher

que deux utilisateurs le modifient 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 signalera les problèmes et vous demandera comment les résoudre, comme :


Copier le code Le code est le suivant : #🎜 🎜 #

>>>sudoersfile:syntaxerror,line22<<



À ce stade, nous avons trois options : tapez " e" Pour rééditer, tapez "x" pour 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 des lignes similaires à celles-ci :

Copiez le code Le code est le suivant :


#runasaliasspecification
#userprivilegespécificationrootall=(all)all

Nous pouvons comprendre en un coup d'œil, Root a toutes les autorisations. Suivez simplement l'exemple de racine existant. Nous ajoutons une ligne ci-dessous (il est préférable d'utiliser la tabulation comme espace vide) :

Copiez le code Le code est le suivant :


foobarall. =(all)all


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

Copiez le code Le code est le suivant :


[foobar@localhost~] $ls/root
ls:/root : Autorisations insuffisantes
[foobar@localhost ~]$sudols/root
password:
anaconda-ks.cfgdesktopinstall.loginstall.log.syslog

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

Copiez le code Le code est le suivant :


foobarlocalhost=/sbin/ifconfig,/bin/ls


Exécutez à nouveau la commande :

Copier le code Le code est le suivant :


[foobar@localhost~]$sudohead-5/etc/shadow
password:
sorry,userfoobarisnotallowedtoexecute'/usr/bin/head-5/ etc/shadow'asrootonlocalhost.localdomain.
[foobar@localhost~]$sudo/sbin/ifconfigeth0linkencap:ethernethwaddr00:14:85:ec:e9:9b...


Jetons maintenant un coup d'œil à ce que sont tous ces trois-là. signifier. Le premier all fait référence à l'hôte du réseau. Nous l'avons ensuite remplacé par le nom d'hôte. Il indique que
foobar peut exécuter des commandes ultérieures sur cet hôte. Le tout entre parenthèses fait référence à l'utilisateur cible, c'est-à-dire qui est l'identité pour exécuter la commande. Le dernier
all est bien sûr le nom de la commande. Par exemple, nous voulons que l'utilisateur foobar exécute la commande kill en tant que jimmy ou rene sur l'hôte Linux et écrive le fichier de configuration comme ceci :

foobarlinux=(jimmy,rene)/bin/kill
Mais il y a toujours un problème. Est-il exécuté comme Jimmy ou René ? À ce moment-là, nous devrions penser à sudo-u, qui est utilisé exactement à ce moment-là. foobar peut utiliser sudo-ujimmykillpid ou sudo-urenekillpid, mais c'est très gênant. En fait, nous n'avons pas besoin d'ajouter -u à ​​chaque fois, définissez simplement rene ou jimmy comme utilisateur cible par défaut. Ajoutez une autre ligne ci-dessus :

defaults:foobarrunas_default=rene
S'il y a deux points après les valeurs par défaut, c'est la valeur par défaut pour les utilisateurs suivants. Sinon, c'est la valeur par défaut pour tous les utilisateurs. Tout comme la ligne qui accompagne le fichier de configuration :

defaultsenv_reset
Un autre problème est que souvent, nous sommes déjà connectés et il est fastidieux de saisir le mot de passe à chaque fois que nous utilisons sudo. Pouvons-nous arrêter de saisir des mots de passe ? Bien sûr, on peut modifier le fichier de configuration comme ceci :

foobarlocalhost=nopasswd:/bin/cat,/bin/ls
Utilisez à nouveau sudo :

Copiez le code Le code est le suivant :


[foobar@ localhost~]$sudols/rootanaconda -ks.cfgdesktopinstall.log

install.log.syslog

Bien sûr, vous pouvez également dire "certaines commandes ne peuvent pas être exécutées en tant qu'utilisateur foobar" en utilisant l'opérateur ! une bonne idée. Étant donné que l'utilisation de l'opérateur ! pour « éliminer » certaines commandes n'a généralement aucun effet, un utilisateur peut copier cette commande vers un autre emplacement, modifier son nom, puis l'exécuter.
4. Journaux et sécurité

sudo est très attentif à la sécurité. Il peut non seulement enregistrer des journaux, mais également faire rapport à l'administrateur système si nécessaire. Cependant, la fonction de journalisation de sudo n'est pas automatique et doit être activée par l'administrateur. Faites-le de cette façon :

Copiez le code Le code est le suivant :


#touch/var/log/sudo
#vi/etc/syslog.conf

Ajoutez une ligne à la fin de syslog.conf (doit être séparé par une tabulation) Et enregistrez :

local2.debug/var/log/sudo
Redémarrez le processus du démon de journalisation,

psauxgrepsyslogd
Remplissez le pid obtenu du processus syslogd (la deuxième colonne de la sortie est le pid) comme suit :

kill–huppid
De cette façon, sudo peut enregistrer /log/sudojul2822:52:54localhostsudo:foobar:
tty=pts/1;pwd=/home/foobar;user=root;command=/ bin/ls/root

Cependant, il y a un petit "défaut", sudo logging n'est pas très fidèle :


Copier le code Le code est le suivant :



[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


Les redirections ne sont pas enregistrées Enregistré ! Pourquoi? Étant donné que le shell a terminé la redirection avant l'exécution de la commande, sudo ne voit pas du tout la redirection. Cela a aussi un avantage, les méthodes suivantes ne réussiront pas :

Copier le code Le code est le suivant :


[foobar@localhost~]$sudols/root>/etc/shadowbash:/etc/shadow : autorisations insuffisantes


sudo a sa propre façon de protéger la sécurité. Exécutez sudo
-v en tant que root pour vérifier les paramètres sudo. En raison de problèmes de sécurité, certaines variables d'environnement ne sont pas transmises à la commande après sudo, ou sont transmises après avoir été vérifiées, telles que : path, home,
shell, etc. Bien entendu, vous pouvez également configurer ces variables d'environnement via 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