Les éléments suivants empêchent les comptes verrouillés de modifier leurs interpréteurs de commandes et permettent aux utilisateurs de chsh
s'utiliser eux-mêmes SANS sudo ou su:
Configuration simple et toujours sécurisée:
Ajoutez ce tout en haut de /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
Créez le groupe chsh:
groupadd chsh
Pour tout utilisateur autorisé à changer de shell:
usermod -a -G chsh username
Money Shot:
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 change en fait la ligne appartenant à un utilisateur dans / etc / passwd, bien qu'un utilisateur ne puisse changer que sa propre 'ligne' dans / etc / passwd. Par conséquent, si vous souhaitez changer de shell pour un autre utilisateur, vous avez besoin de son mot de passe.
Si vous voulez vraiment le faire (compte tenu des préoccupations du poste de Lorenzo et des problèmes de sécurité possibles), voici comment procéder:
Cela nécessite des privilèges root.
Supposons que vous exécutez actuellement en tant que "alice" et que vous souhaitez modifier le shell de "bob" sans mot de passe;
Ajoutez au fichier:
Cela garantit que «alice» peut s'exécuter sur tous les hôtes en tant qu'utilisateurs du groupe SH sans mot de passe le groupe de commandes dans SHELL.
Probablement un peu tiré par les cheveux pour le faire de cette façon, mais c'est possible.
Assurez-vous de lire "man sudoers" avant de changer le fichier sudores avec 'visudo', en particulier les messages liés à la sécurité!
la source
sudo
est qu'il est extrêmement facile de contourner et de rooter un système. Il est préférable de ne jamais changersudoers
sauf s'il existe un besoin spécifique qui ne peut être satisfait d'aucune autre manière (exécutable setuid / setgid, autorisations de groupe, etc.).Vous devez transmettre le nom d'utilisateur; cela via
sudo
(ou par root) vous permettra de définir le mot de passe / shell d'un utilisateur sans qu'on lui demande l'ancien mot de passe. Veuillez vérifierman chsh
pour plus d'informations.Maintenant ma question est: pourquoi voudriez-vous faire cela? S'il s'agit d'un script de configuration, ne devriez-vous pas simplement changer le shell des utilisateurs au moment de la création (c'est-à-dire lors du lancement
adduser
)? Si vous clonez un système à distance, ne devriez-vous pas le modifier en/etc/passwd
premier? Je ne vois aucune raison de le faire via un script, sauf si vous avez automatisé l'ensemble du processus d'installation et que la sélection des shells à installer intervient après la création du premier utilisateur.la source
#!/usr/bin/sudo -s
(ligne shebang). De plus, vous êtes sûr que zsh est dans / bin et pas, peut-être, dans / usr / bin? (je vérifie, je ne connais pas ec2)sudo
autorisation. Voir le mien pour une approche différente qui ne nécessite passudo
pour l'utilisateur moyen.Je pense que vous pouvez changer le shell de l'utilisateur dans le
/etc/password
fichier, éventuellement en utilisant lapasswd
commande. Je ne l'ai pas encore lu mais cela peut être utile: différences de shell UNIX et comment changer votre shell .la source
chsh
ouusermod
. Ne modifiez jamais lepasswd
fichier directement, utilisez toujours lavipw
commande pour cela.Essayez
sudo chsh -s /bin/zsh
alors:echo $SHELL
- en cas de succès, il a changé :)la source