Zastąpienie / bin / bash / bin / false w pliku / etc / passwd


4

Piszę program, aby wyłączyć użytkowników z systemu, chcę go zastąpić /bin/bash do /bin/false.

Przykład

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

zamień na

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

Chcę zrobić ze skryptem bash.

Wiem, jak to zrobić, używając sed. Ale nie jestem dobry w wyrażeniach regularnych.

Czy ktoś może pomóc?


mv / bin / bash / tmp / bin / false
Stepo

5
@ Stepo To właśnie sprawia /bin/bash niedostępny dla wszystkich.
chepner

Ach, rany, widzę. masz rację!
Stepo

Odpowiedzi:


8

Cóż, w ogóle tego nie robisz sed lub wyrażenia regularne. Co robisz, to korzystać z programu chsh zmienić powłokę użytkownika.

chsh -s /bin/false username

alternatywnie:

usermod -s /bin/false username

Jeśli chciałbyś zastąpić go rzeczywistą powłoką, musiałbyś również upewnić się, że jest wymieniony w /etc/shells.


chsh mówi, że polecenie nie zostało znalezione !! Używam solaris

@ user1212207: na moim SunOS 5.8 SUNW,UltraAX-i2 tak jest za usermod. A nawet obsługuje -s. Stoję na mojej odpowiedzi.
0xC0000022L

yem usermod działa dobrze !!! i rozwiązałem mój problem

1

Pamiętaj, że chsh nie zawsze jest dostępny! w alpejski Linux na przykład lub systemy wbudowane używające busybox ..

Prosta inline sed dowództwo :

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

(Ten przykład zmienia powłokę z / bin / false do / bin / sh dla użytkownika dane www )

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.