Ukryj użytkowników przed ekranem logowania do systemu Mac OS X Snow Leopard

25

W jakiś sposób udało mi się ustawić passwd dla mojego użytkownika _postgres w moim systemie operacyjnym zamiast ustawiać go na rolę postgres, którą mam jako superużytkownik / root. W każdym razie od tego czasu zmagam się z tym użytkownikiem, który pojawia się w sekcji konta i ekranie logowania, czego naprawdę chciałbym uniknąć. Przeczytałem o tym kilka dokumentów i ustawienie hasła *powinno być wszystkim, co jest potrzebne, aby to naprawić. Ale po kilku próbach zrobienia tego z i bez dscl bezskutecznie, doszedłem do punktu, w którym nie wiem już, co robić.

Nie sądziłem, że będzie to nawet trudne, ale najwyraźniej czegoś mi brakuje, więc jak to robisz?

googletorp
źródło
Posiadanie hasła dla użytkownika _postgres wcale nie jest szczególnie złym pomysłem.
Hasaan Chop
1
Dokumenty postgres w rzeczywistości zalecają coś wręcz przeciwnego, w ten sposób tylko użytkownicy systemu mogą uzyskać dostęp do postgres, a do zapamiętania / zagrożenia bezpieczeństwa jest jedno hasło.
googletorp
Czy próbowałeś usunąć i ponownie utworzyć użytkownika?
Chealion
Tak, próbowałem już kilka razy. Musisz jakoś ustawić passwd na wyłączone, ponieważ brak hasła to za mało. To jest ból, którego nie byłem w stanie pokonać.
googletorp

Odpowiedzi:

31

Najłatwiejszą metodą ukrywania użytkowników systemu (jeśli ich ID użytkownika jest <500) w oknie logowania, należy uruchomić następującą komendę:

sudo defaults write /Library/Preferences/com.apple.loginwindow Hide500Users -bool TRUE

Alternatywnie możesz ręcznie ukryć tylko nazwę użytkownika, uruchamiając

sudo defaults write /Library/Preferences/com.apple.loginwindow HiddenUsersList -array-add '_postgres'

Aby w razie potrzeby ukryć element „Inne ...” w oknie logowania:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE
Chealion
źródło
2
Jest to dość hackerskie rozwiązanie i tak naprawdę nie „rozwiązuje” problemu, po prostu ukrywa objawy. Mam wielu różnych użytkowników systemu do takich rzeczy jak mysql i tak dalej, i oni się nie pokazują, ponieważ ich hasło jest oznaczone jako „*”. To właśnie staram się osiągnąć dla mojego użytkownika postgres. Twoje rozwiązanie byłoby złe, gdybym miał innych użytkowników, których chciałem ukryć, ale móc zalogować się przy użyciu innych. Naprawdę chciałbym przejść do katalogu głównego i faktycznie to naprawić, zamiast ukrywać problem.
googletorp
1
To doskonała odpowiedź i precyzyjna odpowiedź na moje pytanie. Ale prawdopodobnie masz rację, że nie jest to dokładnie zadane pytanie.
Bill Michell,
3
Flaga Hide500Users nie działa już pod lwem. Tylko pozostałe dwa polecenia działają dla Lwa
Antoniego
Zauważ, że to nie ukryje użytkownika na początkowym ekranie startowym, jeśli masz FileVault2.
James McMahon,
12
dscl . create /Users/test
dscl . create /Users/test UniqueID 420
dscl . create /Users/test PrimaryGroupID 420
dscl . create /Users/test UserShell /bin/bash
dscl . create /Users/test NFSHomeDirectory /tmp
dscl . create /Users/test RealName Test
dscl . create /Users/test Password test

Spowoduje to utworzenie użytkownika widocznego w sysprefs / Accounts.

dscl . create /Users/test Password "*"

Ukrywa to użytkownika. Cytuj „*”, inaczej nie zadziała.

EDYCJA : Przypadkowo udało mi się odtworzyć sytuację googletorp, że nie mogę ukryć użytkownika, ustawiając jego hasło na „*”, i odkryłem, jak to naprawić. Tym razem utworzyłem użytkownika za pomocą dsimport, w następujący sposób:

dsimport /dev/fd/0 /Local/Default I --template StandardUser << EOF
test:*:520:520:Test user:/Users/test:/bin/bash
EOF

Ale w tym poleceniu * jest traktowane jako dosłowne *jednoznakowe hasło , więc dsimport tworzy dla użytkownika właściwość AuthenticationAuthority i ustawia właściwość hasła na skrót mieszający *(który pokazuje się jak ********w dscl, jak dla wszystkich Hasła). Następnie próba ustawienia hasła na „*” za pomocą dscl po prostu ustawia hasło na literał *, zamiast go wyłączać . Rozwiązaniem jest usunięcie niepożądanej właściwości, a następnie wyłączenie hasła:

sudo dscl . delete /Users/test AuthenticationAuthority
sudo dscl . create /Users/test Password "*"

Ukrywa to użytkownika.

Gumilaka
źródło
Zamiast cytatów próbowałeś uciec od gwiazdy? dscl . -create /Users/test Password \*
Eric3
Dopóki dscl widzi literę „*” po „Hasło”, wszystko działa.
LaC
7

Na wypadek, gdyby nie znalazłeś realnego rozwiązania (lub gdyby ktoś inny znalazł to pytanie od Google), ustaw powłokę użytkownika, aby /usr/bin/false uniemożliwiła mu zalogowanie się i ukrywa go przed ekranem logowania i preferencjami systemowymi. Aby to zrobić, użyj następującego wiersza polecenia:

sudo dscl . -change /Users/[username] UserShell /bin/bash /usr/bin/false

I aby cofnąć zmianę:

sudo dscl . -change /Users/[username] UserShell /usr/bin/false /bin/bash

Gdzie [username]jest nazwa użytkownika, którego chcesz ukryć ( _postgresw twoim przypadku zakładam). Nie wiem, dlaczego dsclnajpierw chce starej wartości, ale tak mówi strona podręcznika i działa całkiem dobrze.

skradać się
źródło
1
To rozwiązanie jest bardzo kiepskie, ponieważ wyłącza powłokę dla tego użytkownika, właśnie do tego chcę go użyć. Jeśli chciałbym zrestartować bazę danych itp.
googletorp
@googletorp: Nadal możesz to zrobić sudo -s -u _postgresz konta administratora, aby uzyskać powłokę jako _postgres; zadziała to, nawet jeśli jego UserShellustawiono na /usr/bin/false. Poza tym, czy ustawienie hasła na „brak hasła”, tak jak próbowałeś, również wyłącza konto?
zneak