Der Befehl runuser wird verwendet, um eine Shell mit angegebener Benutzer- und Gruppen-ID auszuführen. Dieser Befehl ändert die Benutzer- und Gruppen-IDs. Wenn Sie einige Befehle als ein anderer Benutzer ausführen möchten, kann dieser Befehl verwendet werden, um den Benutzer zu ändern. Dieser Befehl ist wie der Befehl su, aber er fordert kein Passwort an. Daher kann nur ein privilegierter Benutzer, d. h. der Root-Benutzer, diesen Befehl erfolgreich ausführen und zu einem beliebigen Benutzer wechseln, ohne dass ein Passwort erforderlich ist.
Dieser Befehl ist sehr nützlich, wenn er in Shell-Skripten verwendet wird. Dies liegt daran, dass es sich um einen nicht interaktiven Befehl handelt. Der Su-Befehl kann nicht für Shell-Skripte verwendet werden, da er zur Eingabe eines Passworts auffordert, wenn er als ein anderer Benutzer als root ausgeführt wird. Aber im Falle des Befehls runuser schlägt es einfach fehl und wird mit einem Fehler beendet (für nicht privilegierte Benutzer). Da der Befehl runuser keine PAM-Hooks und Authentifizierungsmodule ausführt, hat er weniger Overhead als su.
runuser-Befehl
Hier ist ein Beispiel für einen Root-Benutzer, der den Befehl runuser ausführt:
[root@redhat-server /]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@redhat-server /]# runuser jack
[jack@redhat-server /]$ id
uid=501(jack) gid=501(jack) groups=501(jack),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
Sie können den aktuellen Benutzer mit dem Befehl id überprüfen. Wenn nun ein nicht privilegierter Benutzer versucht, diesen Befehl auszuführen:
[jack@redhat-server /]$ runuser jones
runuser: cannot set groups: Operation not permitted
Mit der Option -l oder --login kann die neue Shell zu einer Login-Shell gemacht werden, genau wie im Fall des Befehls su. runuser - Befehl hat denselben Effekt. Es ändert auch Umgebungsvariablen. Variablen wie PWD und PATH ändern ihre Werte mit dieser Option.
[root@redhat-server ~]# runuser - jones
[jones@redhat-server ~]$ id
uid=502(jones) gid=502(jones) groups=502(jones),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[jones@redhat-server ~]$ pwd
/home/jones
Sie können Ihre benutzerdefinierte Shell mit der Option -s bereitstellen, wenn Sie keine Standard-Shell wünschen:
[root@redhat-server ~]# echo $SHELL
/bin/bash
[root@redhat-server ~]# runuser -s /bin/sh jones
sh-3.2$ echo $SHELL
/bin/sh
sh-3.2$ id
uid=502(jones) gid=502(jones) groups=502(jones),504(javaproject) context=root:system_r:unconfined_t:SystemLow-SystemHigh