Quelle est la différence entre les commandes suivantes:
su
sudo -s
sudo -i
sudo bash
Je sais que su
j'ai besoin de connaître le mot de passe root et que sudo
je dois être dans le sudoers
fichier, mais une fois exécuté, quelle est la différence?
Je sais qu'il y a une différence entre su
et sudo -s
parce que mon répertoire personnel est /root
après l'exécution su
, mais mon répertoire personnel est toujours /home/myname
après sudo -s
. Mais je soupçonne qu’il s’agit simplement d’un symptôme d’une différence sous-jacente qui me manque.
sudo su -
cette façon, vous n'avez pas besoin du mot de passe root et-
vous assurez que le répertoire personnel est défini correctement.Réponses:
Avec
su
, vous devenez un autre utilisateur - root par défaut, mais potentiellement un autre utilisateur. Si vous ditessu -
, votre environnement est également remplacé par l'environnement de connexion de cet utilisateur, de sorte qu'il est impossible de distinguer ce que vous voyez de la connexion en tant qu'utilisateur. Le système ne peut en aucun cas dire ce que vous faitessu
à un autre utilisateur à partir des actions qu'il a effectuées lorsqu'il se connecte.Les choses sont très différentes avec
sudo
:Les commandes que vous exécutez
sudo
s'exécutent en tant qu'utilisateur cible - racine par défaut, mais-u
pouvant être modifiées - mais il enregistre les commandes que vous exécutez, en les étiquetant avec votre nom d'utilisateur afin que le blâme puisse être attribué ultérieurement. :)sudo
est très flexible. Vous pouvez par exemple limiter les commandes qu'un utilisateur ou un groupe d'utilisateurs donné est autorisé à exécuter. Avecsu
, c'est tout ou rien.Cette fonctionnalité est généralement utilisée pour définir des rôles. Par exemple, vous pouvez définir un groupe de "sauvegardes" autorisé à s'exécuter
dump
et ayanttar
chacun besoin d'un accès root pour sauvegarder correctement le disque système.Je mentionne cela ici parce que cela signifie que vous pouvez donner à quelqu'un des
sudo
privilèges sans lui donnersudo -s
nisudo bash
capacités. Ils ne disposent que des autorisations nécessaires pour effectuer leur travail, alorssu
qu'ils disposent de l'ensemble du système. Vous devez cependant faire attention à cela: si vous donnez à quelqu'un la possibilité de diresudo vi
, par exemple, il peut se défaire devi
et avoir effectivement le même pouvoir qu'avecsudo -s
.Puisqu'il prend le mot de passe sudoer au lieu du mot de passe root,
sudo
isole l'autorisation entre plusieurs sudoers.Cela résout un problème administratif avec
su
, qui est que lorsque le mot de passe root change, tous ceux qui devaient le connaître pour pouvoir utilisersu
devaient être prévenus.sudo
permet aux mots de passe des sudoers de changer indépendamment. En fait, il est courant de verrouiller par mot de passe le compte de l'utilisateur root sur un systèmesudo
pour forcer toutes les tâches sysadmin à être effectuées viasudo
. Dans une grande entreprise comptant de nombreux utilisateurs de confiance, cela signifie que lorsqu'un des administrateurs système quitte son poste, vous n'avez pas besoin de changer le mot de passe root et de le distribuer aux administrateurs qui restent.La principale différence entre
sudo bash
etsudo -s
est qu’elle-s
est plus courte et vous permet de transmettre des commandes à exécuter dans le shell par défaut de votre utilisateur de plusieurs manières:Vous pouvez dire
sudo -s some-command
qui courtsome-command
sous votre coquille. C'est essentiellement un raccourci poursudo $SHELL -c some-command
.Vous pouvez plutôt transmettre les commandes à l'entrée standard du shell, par exemple
sudo -s < my-shell-script
. Vous pouvez utiliser cela avec un heredoc pour envoyer plusieurs commandes à un seulsudo
appel, évitant ainsi la nécessité de taper de manièresudo
répétée.Ces deux comportements sont facultatifs. Beaucoup plus communément, vous donnez
-s
seul, de sorte qu'il exécute simplement le shell de votre utilisateur de manière interactive. Dans ce mode, il diffère dusudo bash
fait qu'il peut exécuter un shell différent de celui utilisébash
, car il apparaît d'abord dans laSHELL
variable d'environnement, puis s'il est non défini, au paramètre de shell de connexion de l'utilisateur, généralement défini dans/etc/passwd
.Le shell exécuté
sudo -s
hérite de votre environnement utilisateur actuel. Si ce que vous voulez réellement est un environnement propre, comme ce que vous obtenez juste après la connexion, vous souhaitez plutôtsudo -i
un ajout relativement récentsudo
. En gros,sudo -i
c’estsudo -s
comme celasu -
estsu
: il réinitialise presque toutes les variables d’environnement clés et vous renvoie au répertoire de base de votre utilisateur. Si vous ne lui donnez pas également de commandes à exécuter sous ce shell via une entrée standard ousudo -i some-command
, il l'exécutera comme un shell de connexion interactif, de sorte que les scripts de démarrage du shell de votre utilisateur (par exemple.bash_profile
) seront exécutés à nouveau.Tout cela rend
sudo -i
considérablement plus sûr quesudo -s
. Pourquoi? Parce que si quelqu'un peut modifier votre environnement auparavantsudo -s
, cela pourrait entraîner l'exécution de commandes imprévues. Le cas le plus évident est celui de la modificationSHELL
, mais cela peut aussi arriver moins directement, comme viaPAGER
si vous ditesman foo
soussudo -s
.Vous pourriez dire: "S'ils peuvent modifier
PAGER
, ils peuvent modifierPATH
, puis ils peuvent simplement remplacer unsudo
programme diabolique ", mais quelqu'un suffisamment paranoïaque peut dire/usr/bin/sudo /bin/bash
d'éviter ce piège. Vous n'êtes probablement pas si paranoïaque que vous évitez également les pièges de toutes les autres variables d'environnement sensibles, cependant. Avez-vous également pensé à vérifierEDITOR
, par exemple, avant d'exécuter une commande VCS ? Ainsisudo -i
.Etant donné
sudo -i
que votre répertoire de travail est également remplacé par le répertoire de base de votre utilisateur, vous pouvez toujours l'utilisersudo -s
pour les situations dans lesquelles vous savez que vous souhaitez rester dans le même répertoire que celuicd
dans lequel vous étiez auparavantsudo
. Il est toujours plus sûr desudo -i
etcd
à l' endroit où vous étiez, cependant.la source
vi
, tapez:sh
et appuyez sur Entrée. Vous êtes maintenant dans un sous-shell, avec tous les privilèges duvi
processus qui a engendré ce shell. Sivi
est exécuté avec les privilèges root, le shell le sera également. Ou bien, vous pouvez exécuter autre chose qu'un shell via:!cmd
, lire le résultat d'une commande dans le tampon d'édition via:r !cmd
, etc. Si tous ceux-ci sont verrouillés, lesMakefile
cibles sont des scripts shell et Vim dispose de la:make
commande, ce qui vous permet en réalité d'exécuter un shell arbitraire. scripts de l'éditeur. Les possibilités de méfait sont beaucoup trop vastes pour que cette boîte à commentaires puisse tenir./usr/bin/sudo
PATH
n’est pas le seul problème.D'un post d'ubuntuforums que j'ai publié il y a quelque temps:
Considérez l'expérience suivante:
Voici les différences que j'ai trouvées:
Avec
sudo -s
:Avec
sudo su
:Remarquez la différence dans
$HOME
. Le fait d'être root et de s'être$HOME
installé au domicile de l'utilisateur normal peut causer des problèmes. Par exemple, si vous exécutez une application graphique, l'utilisateur normal~/.Xauthority
peut être écrasé par root. Cela pose ultérieurement des problèmes normaux à l'utilisateur, comme l'impossibilité d'exécuter certaines applications graphiques via cron.Résumer:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
probablement fixé par/etc/environment
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
La ligne de fond
sudo -i
est la commande appropriée à exécuter lorsque vous voulez un shell racine non corrompu par l'environnement de l'utilisateur.la source
sudo
(dans/etc/sudoers
les fichiers associés). Les paramètres de configuration tels quealways_set_home
,env_reset
,env_keep
,env_check
etenv_reset
, et ceux - ci peuvent varier en fonction de l'utilisateur et commande. Reportez-vous à la section "Environnement de commande" et à la section OPTIONS DE SUDOERS de la page de manuel sudoers (5) .sudo -Hs
quand je veux un environnement non modifié par mes paramètres, parce que j'utilise zsh et tous les comptes d'application que je pourrais changer pour utiliser bash. Cela laisse un certain nombre de variables d’environnement passer sans encombre, mais je trouve généralement que celles qui sont importantes sont écrasées par /etc/profile.d/*.su
( De sorcière u ser ou s ubstitute u utilisateur vous permet de passer de ser).su
démarre en principe une autre instance de shell avec les privilèges de l'utilisateur prévu. Par défaut, il vous renvoie à l'root
utilisateur. Si nous voulons changer d'utilisateur, nous devons le transmettre comme suit:su -
signifie que les variables d’environnement seront réinitialisées à la racine etsu
que les variables d’environnement seront remplacées par un ancien utilisateur.par exemple: répertoire de base de root si vous utilisez
su -
ou répertoire de l'ancien utilisateur si vous utilisezsu
.sudo ( s uper u ser ne ) est un utilitaire de ligne de commande qui permet aux utilisateurs d'exécuter des programmes avec les privilèges de sécurité d'un autre utilisateur par défaut est super - utilisateur -à- dire
root
. Il utilise un fichier de configuration/etc/sudoers
qui répertorie les utilisateurs ayant des droits sur des actions spécifiques.sudo doit être lu comme / ˈsuːduː / . syntaxe -à-
sudo command
dire de sorcière u de ser et faire cette commande.su
est équivalent àsudo -i
et simule une connexion au compte root. Votre répertoire de travail sera/root
, et il lira les répertoires root.profile
etc. L'invite passera de $ à #, indiquant que vous avez un accès root.sudo -s
lance un shell en tant que root, mais ne change pas votre répertoire de travail.sudo bash
oùbash
est la commande à exécuter avecsudo
. Cette commande est exécutée enbash
tant que super utilisateur.sudo
peut être connecté tout ce que quelqu'un fait.sudo
évite à l'utilisateur de connaître le mot de passe root.sudo
nous pouvons limiter les commandes sont autorisées à exécuter.la source