Replacing /bin/bash with /bin/false in /etc/passwd file
Solution 1
Well you don't do it at all with sed
or regular expressions. What you do is to use the program chsh to change the shell of a user.
chsh -s /bin/false username
alternatively:
usermod -s /bin/false username
If you wanted to replace it with an actual shell you'd also have to make sure that it is listed in /etc/shells
.
Solution 2
Please be aware that chsh
is not always available! in alpine Linux for example or embeded systems using busybox ..
Simple inline sed
command :
sed -i '/www-data/s/false/sh/g' /etc/passwd
(This example changes shell from /bin/false to /bin/sh for user www-data )
Related videos on Youtube
Admin
Updated on September 18, 2022Comments
-
Admin over 1 year
I am writing a program to disable users from a system, i want to replace
/bin/bash
to/bin/false.
Example
xxx:x:1:22:xx:/export/home/xx:**/bin/bash**
replace to
xxx:x:1:22:xx:/export/home/xx:**/bin/false**
I want do with using bash script.
I know one way to do this is using
sed
. But i am not good at regular expressions.Can any one help?
-
Stepo about 11 yearsmv /bin/bash /tmp/bin/false
-
chepner about 11 years@Stepo That just makes
/bin/bash
unavailable to everyone. -
Stepo about 11 yearsah gosh, I see. you're right!
-
-
Admin about 11 yearschsh says command not found!! i am using solaris
-
0xC0000022L about 11 years@user1212207: on my
SunOS 5.8 SUNW,UltraAX-i2
ther is ausermod
. And it even supports-s
. I stand by my answer. -
Admin about 11 yearsyeah usermod works fine!!! and solved my problem