Ocultar usuarios de la pantalla de inicio de sesión de Mac OS X Snow Leopard

25

De alguna manera, logré establecer un passwd para mi usuario _postgres en mi sistema operativo en lugar de configurarlo en el rol de postgres que tengo como mi superusuario / root. De todos modos, desde entonces, he estado luchando con ese usuario que aparece en la sección de la cuenta y la pantalla de inicio de sesión, lo que realmente me gustaría evitar. He leído algunos documentos sobre esto, y establecer la contraseña *debería ser todo lo que se necesita para solucionarlo. Pero después de varios intentos de hacer esto con y sin dscl en vano, llegué a un punto en el que ya no sé qué hacer.

No pensé que sería difícil hacerlo, pero claramente me estoy perdiendo algo, entonces, ¿cómo haces esto?

googletorp
fuente
Tener una contraseña para tu usuario de _postgres no es una idea particularmente mala en absoluto.
Hasaan Chop el
1
Los documentos de postgres en realidad recomiendan lo contrario, de esa manera solo los usuarios del sistema pueden acceder a postgres, y hay una contraseña menos para recordar / riesgo de seguridad.
googletorp
¿Has intentado eliminar y volver a crear el usuario?
Chealion el
Sí, lo he intentado varias veces en realidad. Debe de alguna manera establecer el passwd en deshabilitado ya que no tener un passwd no es suficiente. Este es el punto de dolor que no he podido superar.
googletorp

Respuestas:

31

El método más fácil para ocultar usuarios del sistema (si su ID de usuario es <500) en la ventana de inicio de sesión es ejecutar el siguiente comando:

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

Alternativamente, puede ocultar manualmente solo el nombre de usuario ejecutando

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

Para ocultar el elemento 'Otros ...' de la ventana de inicio de sesión si es necesario:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE
Chealion
fuente
2
Esta es una solución algo hacky y en realidad no "resuelve" el problema, solo oculta los síntomas. Tengo muchos usuarios diferentes del sistema para cosas como mysql y otras cosas, y no se muestran porque su contraseña está marcada como '*'. Esto es lo que estoy tratando de lograr para mi usuario de postgres. Su solución sería mala si tuviera otros usuarios que quisiera ocultar, pero poder iniciar sesión con otros. Realmente me gustaría ir a la raíz y solucionarlo en lugar de ocultar el problema.
googletorp
1
Esta es una excelente respuesta, y precisamente respondió mi pregunta. Pero probablemente tengas razón en que no es exactamente la pregunta que hiciste.
Bill Michell
3
La bandera Hide500Users ya no parece funcionar debajo del león. Solo los dos comandos restantes funcionan para Lion
Antony
Tenga en cuenta que esto no ocultará al usuario en la pantalla de arranque inicial si tiene FileVault2 activado.
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

Esto crea un usuario que es visible en sysprefs / Cuentas.

dscl . create /Users/test Password "*"

Esto oculta al usuario. Asegúrese de citar el "*" o no funcionará.

EDITAR : accidentalmente logré recrear la situación de googletorp de no poder ocultar a un usuario estableciendo su contraseña en "*", y descubrí cómo solucionarlo. Esta vez, había creado un usuario usando dsimport, así:

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

Pero en ese comando, se toma el * para representar una contraseña literal de un carácter de *, por lo que dsimport crea una propiedad AuthenticationAuthority para el usuario y establece la propiedad de contraseña en el hash de sombra *(que se muestra como ********en dscl, como para todos contraseñas) Después de eso, intentar establecer la contraseña en "*" usando dscl simplemente sigue configurando la contraseña en un literal *, en lugar de deshabilitar la contraseña. La solución es eliminar la propiedad no deseada y luego deshabilitar la contraseña:

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

Esto oculta al usuario.

Laca
fuente
En lugar de las citas, ¿has intentado escapar de la estrella? dscl . -create /Users/test Password \*
Eric3
Mientras dscl vea un literal "*" después de "Contraseña", todo vale.
LaC
7

En caso de que no haya encontrado una solución viable (o en caso de que alguien encuentre esta pregunta de Google), configurar el shell del usuario para /usr/bin/false evitar que inicie sesión y lo oculta de la pantalla de inicio de sesión y de las preferencias del sistema. Para hacerlo, use la siguiente línea de comando:

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

Y para revertir el cambio:

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

¿Dónde [username]está el nombre del usuario que desea ocultar ( _postgresen su caso, supongo). No sé por qué dsclquiere el valor anterior primero, pero eso es lo que dice la página de manual, y funciona bastante bien.

zneak
fuente
1
Esta solución es muy pobre ya que deshabilita el shell para ese usuario, para lo que quiero usarlo. Si quisiera reiniciar la base de datos, etc.
googletorp
@googletorp: aún puede hacerlo sudo -s -u _postgresdesde una cuenta de administrador para obtener un shell como _postgres; esto funcionará incluso si el suyo UserShellestá configurado como /usr/bin/false. Además, ¿no establece su contraseña en "sin contraseña", como trató de hacer, también deshabilita la cuenta?
zneak