So starten Sie eine interaktive Bash mit Su

439
AngocA

Ich habe keinen sudo suBenutzernamen, aber ich habe sein Passwort. Ich möchte ein Skript haben, das das Passwort übergibt und mir eine interaktive Bash gibt.

Ich habe das ausprobiert:

echo mypassword | su - otherusr Password: Last login: Wed Jul 25 12:09:38 COT 2018 [myuser@myserver ~]$  

Es kehrt zu myuser zurück und ich habe keine interaktive Bash mit dem anderen Benutzer.

Ich habe auch versucht:

echo mypassword | su -c "/bin/bash" - otherusr echo mypassword | su -s "/bin/bash" - otherusr echo mypassword | su -c "/bin/bash -i" - otherusr Password: bash: cannot set terminal process group (-1): Inappropriate ioctl for device bash: no job control in this shell bash-4.2$ exit 

Wie kann ich das machen? Ich möchte ein Skript erstellen, das mir eine interaktive bash-Sitzung mit einem anderen Benutzer zurückgibt. Führen Sie nicht einfach einen Befehl mit einem anderen Benutzer aus.

0
Es sieht so aus, als würden Sie in einer extrem limitierten Shell arbeiten, und Ihr Passwort wird nicht weitergeleitet. Versuchen Sie su und geben Sie das Passwort normal ein. Sie sollten diese Methode normalerweise auch nicht zum Anmelden verwenden, da Ihr Kennwort dann in den Bash-Protokollen protokolliert wird. Dies ist normalerweise ein schwerwiegendes Sicherheitsbedenken. Wenn Sie diese Methode verwenden, können Sie auch `nopasswd` zu` sudoers` hinzufügen Chris vor 5 Jahren 0
Warum nicht 'su - otherusr' und geben Sie das Passwort ein, wenn Sie trotzdem interaktiv sind. Es sieht so aus, als ob du bereits in einer Shell bist. Hogstrom vor 5 Jahren 0

1 Antwort auf die Frage

0
Kamil Maciorowski

Standardmäßig liest sudound suliest kein Kennwort von stdin. Sie versuchen, ein Endgerät direkt zu verwenden (einige Implementierungen können sich sogar beschweren, wenn sie in einer Pipe verwendet werden). Es gibt eine sudo -SOption zum Ändern dieses Verhaltens, aber meines Wissens gibt es keine ähnliche Option für su.

Lösung: verwenden expect.

expectist ein Programm, das nach einem Skript mit anderen interaktiven Programmen "spricht". Nach dem Skript expectwissen Sie, was von einem Programm erwartet werden kann und wie die richtige Antwort sein soll.

[…]

Im Allgemeinen expectist es nützlich, jedes Programm auszuführen, das eine Interaktion zwischen dem Programm und dem Benutzer erfordert. Es ist lediglich notwendig, dass die Interaktion programmatisch charakterisiert werden kann.

In Ihrem Fall kann das Skript sein:

#!/usr/bin/expect   log_user 0 spawn /bin/su - otherusr expect "Password: " send "mypassword\n" interact 

Ich empfehle, dieses Skript nur für Sie zugänglich zu machen ( chmod go-rwx). Andere Benutzer sollten es nicht lesen dürfen, da es mypasswordKlartext enthält . Sie sollten es nicht ausführen dürfen, da es Zugriff auf otherusrdie Shell von erlaubt .