Как создать учетные записи пользователей из Терминала в Mac OS X 10.5?


86

Я хотел бы иметь возможность создавать новых пользователей в Mac OS X 10.5 удаленно после ssh'ing в машину. Как мне это сделать?


У меня пока нет репутации, чтобы отвечать, но если вы ищете, как сделать это из single_userрежима (сброс настроек безопасности), вам нужно перезагрузить компьютер, удерживая его Command-S, получить доступ для записи на диск в соответствии с подробностями на экране. , а затем, rm /var/db/.AppleSetupDoneкоторый позволит вам создать новую учетную запись администратора. Надеюсь, что это поможет кому-то
Новая Александрия

Ответы:


80

Используйте команду dscl. Этот пример создаст пользователя "luser", вот так:

dscl . -create /Users/luser
dscl . -create /Users/luser UserShell /bin/bash
dscl . -create /Users/luser RealName "Lucius Q. User"
dscl . -create /Users/luser UniqueID "1010"
dscl . -create /Users/luser PrimaryGroupID 80
dscl . -create /Users/luser NFSHomeDirectory /Users/luser

Затем вы можете использовать passwd для изменения пароля пользователя или использовать:

dscl . -passwd /Users/luser password

Вам нужно будет создать / Users / luser для домашнего каталога пользователя и изменить владельца, чтобы пользователь мог получить к нему доступ, и быть уверенным, что UniqueID на самом деле уникален.

Эта строка добавит пользователя в группу администраторов:

dscl . -append /Groups/admin GroupMembership luser

7
Как я могу гарантировать, что UID уникален?
JR Lawhorne

3
Там нет автоматического пути; если вы запишете это, вы можете просто запустить команду «id ####» и убедиться, что она возвращает «Нет такого пользователя» или что-то подобное.
Палмер

1
Не забудьте использовать sudo, если у вас нет прав.
Раффи Хачадурян

Кстати, поскольку это более многословно, чем должно быть, я перенес эти команды в useraddсинтаксис.
Сюн Чямов

1
Обратите внимание , что PrimaryGroupID 80это admin, так luserможно использовать sudoдаже если вы не добавите его в группу администраторов игрового.
Русло

20

(Этот ответ следует рассматривать как дополнение к некоторым пробелам в процедуре Палмера)

Чтобы выбрать неиспользуемый UniqueID для вашего нового пользователя, вы можете использовать:

maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))

... затем используйте последовательность команд dscl, которые дал palmer для создания учетной записи, а затем создайте домашний каталог нового пользователя с помощью:

cp -R /System/Library/User\ Template/English.lproj /Users/luser
chown -R luser:staff /Users/luser
if [[ "$(sw_vers -productVersion)" != 10.[0-5].* ]]; then
    # Set ACL on Drop Box in 10.6 and later
    chmod +a "user:luser allow list,add_file,search,delete,add_subdirectory,delete_child,readattr,writeattr,readextattr,writeextattr,readsecurity,writesecurity,chown,file_inherit,directory_inherit" /Users/luser/Public/Drop\ Box
fi

(есть команда createhomedir, но она не работала, когда я ее тестировал.)


1
Я создал сценарий, который заполняет наш мастер открытых каталогов новыми пользователями, а затем вызывает sudo createhomedir -s(IIRC) реплик / файловые ресурсы открытого каталога, и они с радостью создают домашние каталоги.
Клинтон Блэкмор

2
dscl -listограничено 256 результатами, поэтому если у вас более 256 пользователей, этот метод не сможет гарантировать уникальный UID.
Smokris

Маленькая хитрость, чтобы выселить 2 дополнительные трубы (используйте только awk): dscl. -лист / Пользователи UniqueID | awk '{if ($ 2> max) max = $ 2; } END {print max + 1; } '
Валтони Боавентура

@ValtoniBoaventura Хорошо. Я включил это в ответ (по умолчанию на случай, если нет регулярных учетных записей). Я также добавил шаг для установки ACL Drop Box (который был добавлен в 10.6).
Гордон Дэвиссон

8

Если вам нужно создать группу пользователей, можно создать структурированный текстовый файл и передать его dsimportдля выполнения работы.

Руководство по администрированию командной строки Apple содержит целую главу о пользователях и группах.


Странный. Apple, похоже, покончила с v10.5 документа, на который вы ссылались изначально, но сохранила v10.3 и менее полную версию Snow Leopard
chb

7

Еще один способ выбрать уникальный идентификатор пользователя перед созданием учетной записи - просто просмотреть список и убедиться, что того, кого вы хотите использовать, там нет:

 sudo dscl . list /Users uid
 sudo dscl . list groups gid

Удобно, если вам нужно использовать определенный идентификатор


dscl -listограничено 256 результатами, поэтому если у вас более 256 пользователей, этот метод не сможет гарантировать уникальный UID.
Smokris

да, это кратчайший путь для добавления этого пользователя прямо здесь и сейчас, просто grepс учетом idтого, что вы хотели использовать для нового пользователя
yair

7

Я использовал разные ответы здесь, чтобы придумать хороший сценарий для создания учетных записей пользователей. Следует признать, что он не предназначен для одновременного запуска команды из ssh; Более того, он предназначен для выполнения сценариев при компиляции образа OS X на основе пакетов (созданного Casper Imaging или InstaDMG ).

#!/bin/bash
# This script creates a user account under Mac OS X
# (tested with 10.5 and 10.6; likely works with 10.4 but not earlier)
# Written by Clinton Blackmore, based on work at
# http://serverfault.com/questions/20702

# === Typically, this is all you need to edit ===

USERNAME=joeadmin
FULLNAME="Joe Admin"
PASSWORD="hard_to_hack"

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.
# Leave only one uncommented
#SECONDARY_GROUPS=""  # for a non-admin user
SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user

# ====

if [[ $UID -ne 0 ]]; then echo "Please run $0 as root." && exit 1; fi

# Find out the next available user ID
MAXID=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
USERID=$((MAXID+1))

# Create the user account
dscl . -create /Users/$USERNAME
dscl . -create /Users/$USERNAME UserShell /bin/bash
dscl . -create /Users/$USERNAME RealName "$FULLNAME"
dscl . -create /Users/$USERNAME UniqueID "$USERID"
dscl . -create /Users/$USERNAME PrimaryGroupID 20
dscl . -create /Users/$USERNAME NFSHomeDirectory /Users/$USERNAME

dscl . -passwd /Users/$USERNAME $PASSWORD


# Add use to any specified groups
for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
createhomedir -c > /dev/null

echo "Created user #$USERID: $USERNAME ($FULLNAME)"

Скрипт позволяет указать, к каким группам должен принадлежать пользователь. Мне кажется, что это может отличаться в зависимости от версии OS X, которую вы используете. Я получаю другие результаты при работе idв качестве администратора в OS X 10.6, чем при работе в качестве администратора в OS X 10.5.


В другом ответе Эллиотт предупреждает, что команда 'createhomedir -c' ближе к концу создаст учетные записи для всех пользователей в каталоге, к которому вы привязаны. (Опция '-c' на странице руководства 'создает домашние каталоги только для локальных домашних путей.') Есть еще одна опция, '-u username', которая может работать лучше.
Клинтон Блэкмор

привет, я использую скрипт выше. Таким образом, он добавляет моего нового пользователя, но когда пользователь подключается к своему календарю, он говорит, что у него нет разрешений! Можешь мне помочь ?

@jimmy: Я бы порекомендовал задать новый вопрос о сбое сервера и дать ссылку на этот ответ, а не просто задавать вопрос в комментариях, которые будут встречаться редко. Я ожидаю, что разрешения будут правильными. Использование 'chown' и 'chmod' может помочь, если вы можете определить файл, который не имеет правильных разрешений ... но я не знаю, какой это будет.
Клинтон Блэкмор

dscl -listограничено 256 результатами, поэтому если у вас более 256 пользователей, этот метод не сможет гарантировать уникальный UID.
Smokris

4

Я начал немного обертки о dsclтом , что принимает useraddпараметры «s - это не полная (и я не думаю , что это может быть, так как некоторые вещи невозможно на OS X), но я использовал его , чтобы сделать некоторые созданий пользователя.

Фреймворк есть для всех параметров, поэтому, если вы хотите воспользоваться удивительными социальными функциями GitHub, это легко сделать.


Запуск # gem install osx-useradd.gemspecна OS X 10.5 приводит к ERROR: While executing gem ... (Gem::RemoteSourceException)появлению второй строки HTTP Response 301 fetching http://gems.rubyforge.org/yaml.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.