Replacing /bin/bash with /bin/false in /etc/passwd file

11,109

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 )

Share:
11,109

Related videos on Youtube

Admin
Author by

Admin

Updated on September 18, 2022

Comments

  • Admin
    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
      Stepo about 11 years
      mv /bin/bash /tmp/bin/false
    • chepner
      chepner about 11 years
      @Stepo That just makes /bin/bash unavailable to everyone.
    • Stepo
      Stepo about 11 years
      ah gosh, I see. you're right!
  • Admin
    Admin about 11 years
    chsh says command not found!! i am using solaris
  • 0xC0000022L
    0xC0000022L about 11 years
    @user1212207: on my SunOS 5.8 SUNW,UltraAX-i2 ther is a usermod. And it even supports -s. I stand by my answer.
  • Admin
    Admin about 11 years
    yeah usermod works fine!!! and solved my problem