Ich habe einen speziellen Benutzer in /etc/passwd erstellt mit:
secure:x:2000:2000:secure:/bin:/usr/sbin/nologin
Ich möchte diesem Benutzer keine Anmeldung erlauben (über Konsole, SSH, FTP oder auf andere Weise).
Er dient lediglich zum Ausführen eines Skripts über:
sudo su secure -c '/home/someuser/secure.script'
Aber es gibt mir This user is currently not available.
. Wie richte ich es ein, um das Skript auf diese Weise ausführen zu können, aber jegliche Anmeldung (Konsole, SSH, FTP, ...) dieses Benutzers am System zu verhindern?
Mir ist aufgefallen, dass /usr/sbin/nologin
der Computer mit antwortet, wenn ich in die Befehlszeile tippe This account is currently not available.
.
Antwort1
Dies ist ein typischer Anwendungsfall für sudo
.
Sie mischen sudo
, was das Ausführen von Befehlen als ein anderer Benutzer ermöglicht und hochgradig konfigurierbar ist (Sie können selektiv angeben, welcher Benutzer welchen Befehl als welcher Benutzer ausführen kann) und su
was zu einem anderen Benutzer wechselt, wenn Sie das Kennwort kennen (oder Root sind). su
führt immer die in geschriebene Shell aus /etc/passwd
, selbst wenn su -c
verwendet wird. Aus diesem Grund su
ist es nicht mit kompatibel /usr/sbin/nologin
.
Du solltest benutzen
sudo -u secure /home/someuser/secure.script
Da sudo
es konfigurierbar ist, können Sie steuern, wer diesen Befehl verwenden kann und ob er/sie ein Passwort eingeben muss, um ihn auszuführen. Dazu müssen Sie using bearbeiten /etc/sudoers
. visudo
(Seien Sie vorsichtig, wenn Sie /etc/sudoers bearbeiten, und verwenden Sie dazu immer visudo. Die Syntax ist nicht trivial und ein Fehler kann dazu führen, dass Sie von Ihrem Root-Konto ausgeschlossen werden.)
Diese Zeile in sudoers ermöglicht es jedem in der Gruppe, somegroup
den Befehl wie folgt auszuführen secure
:
%somegroup ALL=(secure) /home/someuser/secure.script
Dadurch kann jeder in der Gruppe somegroup
den Befehl ausführen, secure
ohne ein Kennwort einzugeben:
%somegroup ALL=(secure) NOPASSWD: /home/someuser/secure.script
Dadurch kann der Befehl ohne Eingabe eines Passworts user1
ausgeführt werden :secure
user1 ALL=(secure) /home/someuser/secure.script
Antwort2
Ich habe herausgefunden, dass das Hauptproblem „ /usr/sbin/nologin
“ in ist /etc/passwd
. Wenn ich in diesem Fall su ausführen möchte, muss es -s /bin/bash
enthalten sein, also zum Beispiel:su -s /bin/bash -c '/home/someuser/secure.script' secure
Antwort3
su
verwendet die in angegebene Shell /etc/passwd
.
su
Sie müssen es nicht mit verwenden sudo
.
Deshalb nicht su
mit vermischen sudo
: verwenden sudo -u secure '/home/someuser/secure.script'
.