Linux: Kommando unter einem anderen User starten

Donnerstag, 8. Juli, 2021

Um die Frage des Titels zu beantworten, kommt man schnell auf ein … als root startet man

su - [USERNAME] -c [KOMMANDO]

Und wenn der User, unter dem ich das Kommando starten will, keine Shell hat? Tja, dann kommt eine Fehlermeldung der Art

This account is currently not available.

Wirklich sehr lange habe ich mir beholfen, dass ich dem User in der /etc/passwd eine Shell gegeben habe - das /usr/bin/nologin oder /bin/false wurde durch ein /bin/bash o.ä. ersetzt. Jaja, ganz generell fördern man [Kommando] oder [Kommando] –help hilfreiche Dinge zutage. Aber das ist völlig unnötig. Der “Trick” ist, dass man bei su mit dem Parameter -s eine Shell vorgibt, z.B. die /bin/sh.

su - [USERNAME] -c [KOMMANDO] -s /bin/bash

Um die Parameter wegzulassen und optisch zu vereinfachen, kann man auch eine kleine Funktion in sein Skript setzen:

# run a command as another posix user (even if it does not have a shell)
#
# example:
# runas www-data "/some/where/mysript.sh"
#
# param  string  username
# param  string  command to execute. Needs to be quoted.
# param  string  optional: shell (default: /bin/sh)
function runas(){
    local _user=$1
    local _cmd=$2
    local _shell=$3
    test -z "$_shell" && _shell=/bin/sh

    su $_user -s $_shell -c "$_cmd"
}

Dann kann man im Skript etwas kürzer schreiben:

runas [USERNAME] [KOMMANDO]

weiterführende Links:

  1. man7.org: Manpage für su

Kommentar hinzufügen

Die Felder Name und Kommentar sind Pflichtfelder.