Ocultar usuários da tela de logon do Mac OS X Snow Leopard

25

De alguma forma, consegui definir uma senha para meu usuário _postgres no meu sistema operacional, em vez de defini-la na função postgres que tenho como superusuário / raiz. De qualquer forma, desde então, tenho lutado com esse usuário que aparece na seção da conta e na tela de login, o que eu realmente gostaria de evitar. Eu li alguns documentos sobre isso e definir a senha como *deve ser tudo o que é necessário para corrigir isso. Mas, após várias tentativas de fazer isso com e sem dscl sem sucesso, cheguei a um ponto em que não sei mais o que fazer.

Eu não pensei que seria difícil fazer isso, mas claramente estou perdendo alguma coisa, então como você faz isso?

googletorp
fonte
Ter uma senha para o usuário _postgres não é uma idéia particularmente ruim.
Hasaan Chop
1
Os documentos do postgres na verdade recomendam o oposto: dessa forma, apenas os usuários do sistema podem acessar o postgres e há menos uma senha para lembrar / risco de segurança.
Googletorp
Você já tentou excluir e recriar o usuário?
Chealion 22/11/2009
Sim, eu tentei isso algumas vezes, na verdade. De alguma forma, é necessário definir a senha desabilitada, pois não ter uma senha não é suficiente. Este é o ponto de dor que não fui capaz de superar.
googletorp 22/11/2009

Respostas:

31

O método mais fácil para ocultar os usuários do sistema (se o ID do usuário for <500) na janela de login é executar o seguinte comando:

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

Como alternativa, você pode ocultar manualmente apenas o nome de usuário executando

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

Para ocultar o item 'Outros ...' da janela de login, se necessário:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE
Chealion
fonte
2
Esta é uma solução um tanto hacky e, na verdade, não "resolve" o problema, apenas oculta os sintomas. Eu tenho muitos usuários diferentes do sistema para coisas como mysql e outros enfeites, e eles não aparecem porque sua senha está marcada como '*'. É isso que estou tentando realizar para o meu usuário do postgres. Sua solução seria ruim se eu tivesse outros usuários que queria ocultar, mas consegui fazer login usando outros. Eu realmente gostaria de ir para a raiz e realmente corrigir isso em vez de esconder o problema.
Googletorp
1
Esta é uma excelente resposta, e respondeu precisamente à minha pergunta. Mas você provavelmente está certo de que não é exatamente a pergunta que você fez.
Bill Michell
3
A bandeira Hide500Users parece não funcionar mais sob o leão. Apenas os dois comandos restantes funcionam para Lion
Antony
Observe que isso não ocultará o usuário na tela de inicialização inicial se você tiver o FileVault2 ativado.
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

Isso cria um usuário visível em sysprefs / Accounts.

dscl . create /Users/test Password "*"

Isso oculta o usuário. Certifique-se de citar o "*" ou ele não funcionará.

EDIT : acidentalmente consegui recriar a situação do googletorp de não conseguir ocultar um usuário definindo sua senha como "*" e descobri como corrigi-lo. Dessa vez, eu criei um usuário usando o dsimport, assim:

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

Mas nesse comando, o * é usado para representar uma senha literal de um caractere de *e, portanto, o dsimport cria uma propriedade AuthenticationAuthority para o usuário e define a propriedade da senha como o hash de sombra de* (que aparece como ********no dscl, como para todos os senhas). Depois disso, tentar definir a senha como "*" usando dscl apenas define a senha como literal *, em vez de desabilitar a senha. A solução é excluir a propriedade indesejada e desabilitar a senha:

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

Isso oculta o usuário.

Laca
fonte
Em vez das citações, você tentou escapar da estrela? dscl . -create /Users/test Password \*
Eric3
Desde que o dscl veja um "*" literal depois de "Senha", tudo dará certo.
LaC
7

Caso você não tenha encontrado uma solução viável (ou caso alguém encontre essa pergunta do Google), definir o shell do usuário para /usr/bin/false impedir que ele faça login e ocultá-lo na tela de login e nas preferências do sistema. Para fazer isso, use a seguinte linha de comando:

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

E para reverter a mudança:

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

Onde [username]está o nome do usuário que você deseja ocultar ( _postgresno seu caso, eu suponho). Não sei por que dsclquer o valor antigo primeiro, mas é o que diz a página de manual e funciona muito bem.

zneak
fonte
1
Essa solução é muito ruim, pois desativa o shell para esse usuário, exatamente para o que eu quero usá-lo. Se eu quiser reiniciar o banco de dados, etc. #
googletorp
@ googletorp: Você ainda pode fazer a sudo -s -u _postgrespartir de uma conta de administrador para obter um shell como _postgres; isso funcionará mesmo se o dele UserShellestiver definido como /usr/bin/false. Além disso, não definir a senha como "sem senha", como você tentou, também desativa a conta?
Zneak 29/03/10