Сховати користувачів із екрана входу в Mac OS X Snow Leopard


25

Якось мені вдалося встановити passwd для мого користувача _postgres в моїй операційній системі замість того, щоб встановити його на роль postgres, яку я маю як суперпользователь / root. З цього моменту я боровся з тим, щоб цей користувач відображався в розділі облікового запису та екрані входу, чого я дійсно хотів би уникнути. Я прочитав деякі документи про це, і встановити пароль *повинен бути всім, що потрібно, щоб виправити це. Але після декількох спроб зробити це з без dscl безрезультатно, я потрапляю до моменту, коли я вже не знаю, що робити.

Я не думав, що це буде навіть важко зробити, але явно щось мені не вистачає, то як це зробити?


Наявність пароля для користувача _postgres зовсім не дуже погана ідея.
Hasaan Chop

1
Документи Postgres насправді рекомендують навпаки, таким чином, лише користувачі системи можуть отримувати доступ до постгресів, і є один менший пароль для запам'ятовування / ризику безпеки.
googletorp

Ви спробували видалити та відтворити користувача?
Chealion

Так, я вже кілька разів це намагався. Потрібно якось встановити passwd відключеним, оскільки недоступний 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

2
Це дещо хакітне рішення і насправді не "вирішує" проблему, воно просто приховує симптоми. У мене є багато різних користувачів системи для таких предметів, як mysql і що-небудь, і вони не відображаються, оскільки їх пароль позначений як "*". Це я намагаюся зробити для свого користувача postgres. Ваше рішення було б поганим, якби у мене були інші користувачі, яких я хотів приховати, але я міг би увійти, використовуючи інших. Мені дуже хотілося б перейти до кореня та фактично виправити це, а не приховувати проблему.
googletorp

1
Це відмінна відповідь і точно відповів на моє запитання. Але ви, мабуть, праві, що це не саме питання, яке ви задали.
Білл Мішелл

3
Прапор Hide500Users, здається, більше не працює під левом. Лише дві команди працюють для Лева
Антоній

Зауважте, що це не буде приховувати користувача на початковому екрані завантаження, якщо у вас 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 "*"

Це приховує користувача. Переконайтесь, що ви цитуєте "*", інакше це не спрацює.

EDIT : Мені випадково вдалося відтворити ситуацію 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спочатку хоче стару цінність, але саме так пише manpage, і вона працює досить добре.


1
Це рішення дуже бідне, оскільки воно вимикає оболонку для цього користувача, саме те, для чого я хочу його використовувати. Якщо я хотів би перезапустити базу даних тощо
googletorp

@googletorp: Ви все ще можете зробити sudo -s -u _postgresз облікового запису адміністратора, щоб отримати оболонку як _postgres; це буде працювати, навіть якщо його UserShellвстановлено /usr/bin/false. Крім того, чи не встановлення свого пароля на "без пароля", як ви намагалися зробити, також вимикає обліковий запис?
zneak
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.