25

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

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

3 ответа3

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
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 "*"

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

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-странице, и оно работает довольно хорошо.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .