Question Remplacer / bin / bash par / bin / false dans le fichier / etc / passwd


J'écris un programme pour désactiver les utilisateurs d'un système, je veux remplacer /bin/bash à /bin/false.

Exemple

xxx:x:1:22:xx:/export/home/xx:**/bin/bash**

remplacer à

xxx:x:1:22:xx:/export/home/xx:**/bin/false**

Je veux faire avec l'aide du script bash.

Je sais qu'une façon de faire est d'utiliser sed. Mais je ne suis pas bon en expressions régulières.

Quelqu'un peut-il aider?


4
2018-02-27 17:02


origine


mv / bin / bash / tmp / bin / false - Stepo
@Stepo Cela fait juste /bin/bash indisponible pour tout le monde. - chepner
ah bon sang, je vois. tu as raison! - Stepo


Réponses:


Eh bien, vous ne le faites pas du tout avec sed ou des expressions régulières. Qu'est-ce que vous faites est d'utiliser le programme chsh pour changer le shell d'un utilisateur.

chsh -s /bin/false username

alternativement:

usermod -s /bin/false username

Si vous voulez le remplacer par un shell réel, vous devez également vous assurer qu'il figure dans la liste /etc/shells.


8
2018-02-27 17:04



chsh dit la commande introuvable !! j'utilise solaris
@ user1212207: sur mon SunOS 5.8 SUNW,UltraAX-i2 ther est une usermod. Et il supporte même -s. Je maintiens ma réponse. - 0xC0000022L
ouais usermod fonctionne très bien !!! et résolu mon problème


Soyez averti que chsh n'est pas toujours disponible! dans alpin Linux par exemple ou des systèmes incorporés utilisant zone de travail ..

Simple en ligne sed commande:

sed -i '/www-data/s/false/sh/g' /etc/passwd

(Cet exemple change le shell de / bin / false à / bin / sh pour l'utilisateur www-data )


1
2018-03-30 11:34