Im Folgenden wird verhindert, dass gesperrte Konten ihre Shells ändern, und Benutzer können chsh
sich selektiv OHNE sudo oder su verwenden:
Einfache Einrichtung, die immer noch sicher ist:
Fügen Sie dies ganz oben hinzu /etc/pam.d/chsh
:
# This allows users of group chsh to change their shells without a password.
#
# Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
#
auth sufficient pam_wheel.so trust group=chsh
Erstellen Sie die chsh-Gruppe:
groupadd chsh
Für jeden Benutzer, der seine Shell ändern darf:
usermod -a -G chsh username
Geldschuss:
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$
chsh ändert tatsächlich die Zeile eines Benutzers in / etc / passwd, obwohl ein Benutzer nur seine eigene 'Zeile' in / etc / passwd ändern kann. Wenn Sie also die Shell für einen anderen Benutzer ändern möchten, benötigen Sie dessen Passwort.
Wenn Sie es wirklich tun möchten (angesichts der Bedenken in Lorenzos Beitrag und möglicher Sicherheitsbedenken), können Sie dies folgendermaßen tun:
Dies erfordert Root-Rechte.
Angenommen, Sie arbeiten derzeit als "Alice" und möchten die "Bob's" -Shell ohne Passwort ändern.
Zur Datei hinzufügen:
Dies stellt sicher, dass 'alice' auf allen Hosts als Benutzer in der Gruppe SH ohne Kennwort der Befehlsgruppe in SHELL ausgeführt werden kann.
Wahrscheinlich ein bisschen weit hergeholt, um es so zu machen, aber es ist möglich.
Lesen Sie unbedingt "man sudoers", bevor Sie die sudores-Datei mit "visudo" ändern, insbesondere die Sicherheitsnachrichten!
quelle
sudo
ist, dass es extrem einfach ist, ein System zu umgehen und zu rooten. Es ist besser, niemals zu ändern, essudoers
sei denn, es gibt einen bestimmten Bedarf, der auf keine andere Weise erfüllt werden kann (ausführbare Datei setuid / setgid, Gruppenberechtigungen usw.).Sie müssen den Benutzernamen übergeben. Wenn Sie dies über
sudo
(oder über root) tun , können Sie das Passwort / die Shell eines Benutzers festlegen, ohne nach dem alten Passwort gefragt zu werden. Bitte überprüfen Sieman chsh
für weitere Informationen.Jetzt ist meine Frage: Warum willst du das tun? Wenn es sich um ein Setup-Skript handelt, sollten Sie nicht einfach die Benutzer-Shell beim Erstellen ändern (dh beim Starten
adduser
)? Wenn Sie ein System remote klonen, sollten Sie es nicht zuerst ändern/etc/passwd
? Ich sehe keine Gründe, dies über ein Skript zu tun, es sei denn, Sie haben den gesamten Installationsprozess automatisiert und die Auswahl der zu installierenden Shells erfolgt nach der Erstellung des ersten Benutzers.quelle
#!/usr/bin/sudo -s
(shebang line). Sind Sie auch sicher, dass zsh in / bin und möglicherweise nicht in / usr / bin ist? (Ich überprüfe nur, ich bin nicht mit ec2 vertraut)sudo
Erlaubnis voraussetzt . Siehe meinen für einen anderen Ansatz, dersudo
für den durchschnittlichen Benutzer nicht erforderlich ist .Ich glaube, Sie können die Shell des Benutzers in der
/etc/password
Datei ändern , möglicherweise mit dempasswd
Befehl. Ich habe es noch nicht gelesen, aber dies kann nützlich sein: UNIX-Shell-Unterschiede und wie Sie Ihre Shell ändern .quelle
chsh
oderusermod
. Bearbeiten Sie diepasswd
Datei niemals direkt, sondern verwenden Sie immer denvipw
Befehl dafür.Versuchen Sie
sudo chsh -s /bin/zsh
dann:echo $SHELL
- im erfolgreichen Fall hat sich das geändert :)quelle