Скрыть пользователей с экрана входа в Mac OS X Snow Leopard

30450
googletorp

Каким-то образом мне удалось установить passwd для моего пользователя _postgres в моей ОС вместо того, чтобы установить его для роли postgres, которую я имею в качестве суперпользователя / root. В любом случае с тех пор я боролся с тем, чтобы этот пользователь появлялся в разделе учетной записи и на экране входа в систему, чего я действительно хотел бы избежать. Я прочитал несколько документов об этом, и установка пароля *должна быть все, что нужно, чтобы это исправить. Но после нескольких попыток сделать это с и без dscl безрезультатно, я дошел до того, что не знаю, что делать дальше.

Я не думал, что это будет даже трудно сделать, но, очевидно, я что-то упускаю, так как ты это делаешь?

25
Наличие пароля для вашего пользователя _postgres не является особенно плохой идеей. Hasaan Chop 14 лет назад 0
Документы postgres на самом деле рекомендуют обратное: таким образом, только пользователи системы могут получить доступ к postgres, и есть один пароль, который нужно помнить / риск для безопасности. googletorp 14 лет назад 1
Вы пытались удалить и восстановить пользователя? Chealion 14 лет назад 0
Да, я пробовал это несколько раз на самом деле. Вам нужно каким-то образом отключить passwd, так как его отсутствие недостаточно. Это болевая точка, которую я не смог преодолеть. googletorp 14 лет назад 0

3 ответа на вопрос

31
Chealion

Самый простой способ скрыть пользователей системы (если их идентификатор пользователя <500) в окне входа в систему - это выполнить следующую команду:

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

Кроме того, вы можете вручную скрыть только имя пользователя, запустив

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

Чтобы скрыть пункт «Другие ...» из окна входа в систему, если это необходимо:

sudo defaults write /Library/Preferences/com.apple.loginwindow SHOWOTHERUSERS_MANAGED -bool FALSE 
Это несколько хакерское решение, которое на самом деле не «решает» проблему, а просто скрывает симптомы. У меня много разных системных пользователей для таких вещей, как mysql и еще много чего, и они не отображаются, потому что их пароль помечен как '*'. Это то, что я пытаюсь сделать для своего пользователя postgres. Ваше решение было бы плохим, если бы у меня были другие пользователи, которых я хотел бы скрыть, но мог бы войти, используя других. Я действительно хотел бы пойти в корень и на самом деле исправить это, а не скрывать проблему. googletorp 14 лет назад 2
Это отличный ответ, и он точно ответил на мой вопрос. Но вы, вероятно, правы, что это не совсем тот вопрос, который вы задали. Bill Michell 13 лет назад 1
Флаг Hide500Users больше не работает под львом. Только две оставшиеся команды работают на Lion Antony 12 лет назад 3
Обратите внимание, что это не скроет пользователя на начальном экране загрузки, если у вас включен FileVault2. James McMahon 8 лет назад 0
12
LaC
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 

Это создает пользователя, который виден в sysprefs / Accounts.

dscl . create /Users/test Password "*" 

Это скрывает пользователя. Убедитесь, что вы указали "*", иначе это не сработает.

РЕДАКТИРОВАТЬ : мне случайно удалось воссоздать ситуацию googletorp не в состоянии скрыть пользователя, установив его пароль "*", и я обнаружил, как это исправить. На этот раз я создал пользователя с помощью dsimport, например так:

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

Но в этой команде * используется для обозначения буквального односимвольного пароля *, поэтому dsimport создает для пользователя свойство AuthenticationAuthority и устанавливает для свойства пароля теневой хеш *(который отображается как ********в dscl, как и для всех пароли). После этого, попытка установить пароль на «*» с помощью dscl просто продолжает устанавливать пароль на литерал *, а не отключать пароль. Решение состоит в том, чтобы удалить нежелательное свойство, а затем отключить пароль:

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

Это скрывает пользователя.

Вместо цитат вы пытались убежать от звезды? `dscl. -создать / Пользователи / Тестовый пароль \ * ` Eric3 12 лет назад 0
Пока dscl видит буквальное «*» после «Пароль», все идет. LaC 12 лет назад 0
7
zneak

На случай, если вы не нашли жизнеспособного решения (или если кто-то другой найдет этот вопрос в Google), настройте оболочку пользователя таким образом, чтобы он /usr/bin/false не мог войти в систему и скрывал ее от экрана входа в систему и от системных настроек. Для этого используйте следующую командную строку:

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

И чтобы отменить изменение:

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

Где [username]имя пользователя, которого вы хотите скрыть ( _postgresя полагаю, в вашем случае). Я не знаю, почему dsclсначала нужно старое значение, но это то, что написано на man-странице, и оно работает довольно хорошо.

Это решение очень плохое, так как оно отключает оболочку для этого пользователя, именно то, для чего я хочу его использовать. Если бы я хотел перезапустить базу данных и т. Д. googletorp 14 лет назад 1
@googletorp: Вы все еще можете сделать `sudo -s -u _postgres` из учетной записи администратора, чтобы получить оболочку как` _postgres`; это будет работать, даже если его `UserShell` установлен в` / usr / bin / false`. Кроме того, не устанавливает ли пароль пароль «no password», как вы пытались это сделать, также отключает учетную запись? zneak 14 лет назад 0