Existe-t-il une commande sur une seule ligne pour faire `su`?

15

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

par exemple su <username> -p <password>

alvas
la source
Il semble que la question s'adapte parfaitement au superutilisateur: superuser.com :-)
HongboZhu
1
je l'ai eu d' superuserici, superuser.com/questions/67765/…
alvas

Réponses:

12

Si vous voulez écrire un script qui s'exécute en tant qu'utilisateur différent, quelque chose comme ça fonctionne, bien qu'il affiche le mot "mot de passe" sans retour à 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
!
Brian
la source
2
hmm, 'standard in must be a tty'
John Lawrence Aspden
Je reçois la même erreur
MaxV
12
Obtention de l' erreur: su: must be run from a terminal.
Abhishek Kashyap
5

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 comme su <username> -p <password>, il serait stocké en texte brut dans votre historique bash. Il s'agit certainement d'un énorme problème de sécurité.

Si vous devez exécuter des commandes avec su(ou sudo) de manière automatisée, écrivez un script shell contenant les commandes sans suou sudoet exécutezsu <username> script.sh

Wayne_Yux
la source
1
su root script doivent encore entrer passwd.
Dai Kaixian du
@DaiKaixian oui, mais il n'est enregistré nulle part et personne ne peut le lire
Wayne_Yux
2
vous pouvez essayer quelque chose comme echo <passwd> | sudo -S <command-line>:. Bien que ce ne soit pas sûr, mais cela fonctionne.
Dai Kaixian
1
le point entier de ma réponse est qu'il n'est pas possible d'écrire un mot de passe dans une commande. Je conseille donc de ne pas le faire
Wayne_Yux
-3

Si vous souhaitez exécuter certaines commandes spécifiques en tant que nouvel utilisateur, utilisez la commande suivante:
sudo -u {username} {command to be executed as the new user}

cendres
la source
Cela ne répond pas à la question. La question est de savoir comment gérer le mot de passe.
Stephen C