Quelle est la différence entre se connecter en tant qu'utilisateur et changer d'utilisateur en utilisant su via root?

15

Lorsque vous avez un serveur quelconque, vous pouvez y accéder, par exemple, ssh [email protected] et vous pouvez également faire ssh [email protected] pour accéder à votre utilisateur root avec des privilèges, puis aller à su user1 . À mon avis, ces deux manières devraient me conduire au même environnement utilisateur (dans ce cas, "user1"), mais dans mon expérience réelle, cela ne provoque pas dans ssh [email protected] des choses installées dans su user1 .

Pourquoi est-ce?

    
posée Miguel Corti 08.06.2016 - 00:55
la source

2 réponses

14

SSH démarre un shell de connexion. su , par défaut pas.

En particulier, cela signifie que ~/.profile (ou un fichier similaire) pour cet utilisateur n'est pas source. Les modifications apportées dans ~/.profile ne prendront donc pas effet. Il se pourrait aussi que:

  • Même si vous démarrez un shell de connexion, différentes modifications ont été apportées à ~/.profile de la racine, ce qui peut polluer l'environnement de l'utilisateur.
    • /etc/profile et /etc/profile.d/* peuvent appliquer des paramètres différents pour différents utilisateurs (mais pas par défaut)
  • il peut y avoir différents paramètres pour différents utilisateurs dans la configuration SSH.
  • La configuration de PAM est différente. Par exemple, /etc/pam.d/ssh a:

    session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
    

    alors que /etc/pam.d/su a:

    session       required   pam_env.so readenv=1 envfile=/etc/default/locale
    

    Cela signifie que les charges SSH ~/.pam_environment , mais pas su . Ceci est un grand, puisque ~/.pam_environment est le lieu de shell indépendant pour les variables d'environnement, et il est appliqué si vous vous connectez à partir de l'interface graphique, l'ATS ou SSH.

Pour démarrer un shell de connexion, exécutez l'une des opérations suivantes:

su - <username>
sudo -iu <username>

Exemple:

# su muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
# su - muru -c 'sh -c "echo $HOME $PATH"'
/home/muru /home/muru/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
# sudo -iu muru sh -c 'echo $HOME $PATH'
/home/muru /home/muru/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# sudo -u muru sh -c 'echo $HOME $PATH'
/root /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# ssh [email protected] 'echo $HOME $PATH'
/home/muru /home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Même avec SSH, si vous exécutez une commande au lieu de lancer un shell, un shell de connexion ne sera pas exécutée (notez l'absence de ~/bin dans le test SSH, qui est présent en su - et sudo -i ). Pour obtenir le vrai résultat, je vais lancer mon shell en tant que shell de connexion:

# ssh [email protected] '$SHELL -ilc "echo $HOME $PATH"'
/home/muru /home/muru/bin:/home/muru/devel/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

C'est aussi la raison pour laquelle sudo su et sudo -s sont des moyens minables d'obtenir un shell racine. Ces deux manières sont polluées par l'environnement.

Connexes:

réponse donnée muru 08.06.2016 - 01:02
la source
-1

Dans l'ensemble, il s'agit principalement d'une différence stratégique.

Si vous êtes connecté en tant que super utilisateur, vous pouvez changer n'importe quoi tout le temps ... c’est-à-dire qu’il n’ya aucune protection contre les erreurs catastrophiques, vous devez temporairement changer pour un autre utilisateur.

Attendu que: si vous êtes connecté avec des privilèges limités, vous évitez certains risques d’erreurs catastrophiques, car vous devez intentionnellement passer à su root pour accéder temporairement à ce pouvoir, mais vous avez maintenant la un utilisateur sûr.

La différence est donc vraiment stratégique, pas technique.

    
réponse donnée Mr.President 15.06.2016 - 00:47
la source

Lire d'autres questions sur les étiquettes