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?


źródło
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.

0xC0000022L
źródło
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 )

Pooya
źródło