Nascondi gli utenti dalla schermata di accesso di Mac OS X Snow Leopard


25

In qualche modo, sono riuscito a impostare un passwd per il mio utente _postgres sul mio sistema operativo invece di impostarlo sul ruolo postgres che ho come mio superutente / root. Ad ogni modo da allora, ho avuto problemi con quell'utente che appare nella sezione dell'account e nella schermata di accesso, che vorrei davvero evitare. Ho letto alcuni documenti su questo e impostare la password su *dovrebbe essere tutto ciò che è necessario per risolvere questo problema. Ma dopo diversi tentativi di fare questo con e senza dscl inutilmente, sono arrivato a un punto in cui non so più cosa fare.

Non pensavo che sarebbe stato difficile farlo, ma chiaramente mi manca qualcosa, quindi come si fa?


Avere una password per l'utente _postgres non è affatto una cattiva idea.
Hasaan Chop,

1
I documenti di Postgres in realtà raccomandano il contrario, in questo modo solo gli utenti del sistema possono accedere a Postgres e c'è una password in meno da ricordare / rischio per la sicurezza.
googletorp,

Hai provato a eliminare e ricreare l'utente?
Chealion,

Sì, l'ho provato alcune volte in realtà. È necessario in qualche modo impostare il passwd su disabilitato in quanto non avere un passwd non è sufficiente. Questo è il punto dolente che non sono stato in grado di superare.
googletorp,

Risposte:


31

Il metodo più semplice per nascondere gli utenti del sistema (se il loro ID utente è <500) nella finestra di accesso è eseguire il comando seguente:

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

In alternativa puoi nascondere manualmente solo il nome utente eseguendolo

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

Per nascondere l'elemento "Altri ..." dalla finestra di accesso, se necessario:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE

2
Questa è una soluzione un po 'confusa e in realtà non "risolve" il problema, nasconde solo i sintomi. Ho molti utenti di sistema diversi per cose come mysql e quant'altro, e non si presentano perché la loro password è contrassegnata come '*'. Questo è ciò che sto cercando di realizzare per il mio utente postgres. La tua soluzione sarebbe male se avessi altri utenti che volevo nascondere, ma potrei accedere con altri. Mi piacerebbe davvero andare alla radice e risolverlo invece di nascondere il problema.
googletorp,

1
Questa è una risposta eccellente e ha risposto esattamente alla mia domanda. Ma probabilmente hai ragione nel dire che non è esattamente la domanda che hai posto.
Bill Michell,

3
La bandiera di Hide500Users non sembra più funzionare sotto il leone. Solo i restanti due comandi funzionano per Lion
Antony,

Si noti che ciò non nasconderà l'utente nella schermata di avvio iniziale se FileVault2 è attivo.
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

Questo crea un utente visibile in sysprefs / Accounts.

dscl . create /Users/test Password "*"

Questo nasconde l'utente. Assicurati di citare il "*" o non funzionerà.

EDIT : sono riuscito accidentalmente a ricreare la situazione di googletorp di non riuscire a nascondere un utente impostando la sua password su "*", e ho scoperto come risolverlo. Questa volta, avevo creato un utente usando dsimport, in questo modo:

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

Ma in quel comando, si assume che * rappresenti una password letterale di un carattere di *, quindi dsimport crea una proprietà AuthenticationAuthority per l'utente e imposta la proprietà password sull'hash dell'ombra di *(che appare come ********in dscl, come per tutti Le password). Successivamente, il tentativo di impostare la password su "*" utilizzando dscl continua a impostare la password su un valore letterale *, anziché disabilitare la password. La soluzione è eliminare la proprietà indesiderata e quindi disabilitare la password:

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

Questo nasconde l'utente.


Invece delle virgolette, hai provato a fuggire dalla stella? dscl . -create /Users/test Password \*
Eric3,

Finché dscl vede un "*" letterale dopo "Password", tutto va bene.
LaC

7

Nel caso in cui non abbiate trovato una soluzione praticabile (o nel caso in cui qualcun altro trovi questa domanda da Google), impostando la shell dell'utente per /usr/bin/false impedirgli di accedere e la nasconde dalla schermata di accesso e dalle preferenze di sistema. Per fare ciò, utilizzare la seguente riga di comando:

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

E per ripristinare la modifica:

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

Dov'è [username]il nome dell'utente che vuoi nascondere ( _postgresnel tuo caso presumo). Non so perché dscldesideri prima il vecchio valore, ma è quello che dice la manpage e funziona abbastanza bene.


1
Questa soluzione è molto scarsa in quanto disabilita la shell per quell'utente, la cosa stessa per cui voglio usarla. Se vorrei riavviare il database, ecc.
googletorp

@googletorp: puoi ancora fare sudo -s -u _postgresda un account amministratore per ottenere una shell come _postgres; questo funzionerà anche se il suo UserShellè impostato su /usr/bin/false. Inoltre, l'impostazione della sua password su "nessuna password", come hai provato a fare, disabilita anche l'account?
zneak,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.