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

25

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

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

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

Ответы:

31

Самый простой способ скрыть пользователей системы (если их идентификатор пользователя <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
Chealion
источник
2
Это несколько хакерское решение, которое на самом деле не «решает» проблему, оно просто скрывает симптомы. У меня много разных системных пользователей для таких вещей, как mysql и еще много чего, и они не появляются, потому что их пароль помечен как '*'. Это то, что я пытаюсь сделать для своего пользователя postgres. Ваше решение было бы плохим, если бы у меня были другие пользователи, которых я хотел бы скрыть, но мог бы войти, используя других. Я действительно хотел бы пойти в корень и на самом деле исправить это, а не скрывать проблему.
googletorp
1
Это отличный ответ, и он точно ответил на мой вопрос. Но вы, вероятно, правы, что это не совсем тот вопрос, который вы задали.
Билл Мичелл
3
Флаг Hide500Users больше не работает под львом. Только две оставшиеся команды работают на Lion
Antony
Обратите внимание, что это не скроет пользователя на начальном экране загрузки, если у вас включен FileVault2.
Джеймс МакМэхон
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

Это создает пользователя, который виден в 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 . -create /Users/test Password \*
Eric3
Пока dscl видит буквальное «*» после «Пароль», все идет.
LaC
7

На случай, если вы не нашли жизнеспособного решения (или если кто-то другой найдет этот вопрос в 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-странице, и оно работает довольно хорошо.

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