web-dev-qa-db-fra.com

Y a-t-il une seule ligne de commande pour faire `su`?

Je peux faire un su avec su <username> et il me demande mon mot de passe. Existe-t-il un paramètre de mot de passe pour su tel que je ne serai pas invité à entrer un mot de passe?

par exemple. su <username> -p <password>

13
alvas

Si vous voulez écrire un script qui s'exécute en tant qu'utilisateur différent, quelque chose comme ceci fonctionne, bien qu'il génère le mot de passe "mot" sans une nouvelle ligne à la sortie standard

su - username <<!
enterpasswordhere
enter commands to run as the new user
!

si vous avez un utilisateur nommé fred avec un mot de passe de 1234 et que vous voulez obtenir un ls du répertoire personnel de fred comme fred, sans la chaîne de mot de passe affichée, cela ressemblerait à

su - fred <<! >/dev/null 2>&1
1234
whoami > /dev/tty
ls > /dev/tty
!
12
Brian

Je crois, il n'y en a pas et ce ne serait pas une bonne idée. Voici pourquoi:
Si vous écrivez un mot de passe dans une commande telle que su <username> -p <password>, il sera stocké en texte brut dans votre historique bash. C'est certainement un problème de sécurité énorme.

Si vous devez exécuter des commandes avec su (ou Sudo) de manière automatisée, écrivez un shellscript contenant les commandes sans su ou Sudo et exécutez su <username> script.sh.

5
Wayne_Yux