Какие шаги необходимы для создания нового пользователя из командной строки?

27

Какие команды (или сценарии) могут создать полнофункциональную учетную запись пользователя на Mountain Lion, запускаемую только из командной строки через терминал или ssh.

Похоже , что существующие пары из ответов могут работать, но я задавался вопрос , есть ли короткий сценарий или инструмент для создания полнофункциональных учетных записей пользователей на Mountain Lion?

bmike
источник

Ответы:

33

Вот сценарий оболочки, который я написал на работе, чтобы обработать это как часть процесса NetInstall (создание учетной записи локального администратора автоматически во время процесса создания образа).

#!/bin/sh
. /etc/rc.common
dscl . create /Users/administrator
dscl . create /Users/administrator RealName "Administrator Account"
dscl . create /Users/administrator hint "Password Hint"
dscl . create /Users/administrator picture "/Path/To/Picture.png"
dscl . passwd /Users/administrator thisistheaccountpassword
dscl . create /Users/administrator UniqueID 501
dscl . create /Users/administrator PrimaryGroupID 80
dscl . create /Users/administrator UserShell /bin/bash
dscl . create /Users/administrator NFSHomeDirectory /Users/administrator
cp -R /System/Library/User\ Template/English.lproj /Users/administrator
chown -R administrator:staff /Users/administrator

Некоторые примечания, чтобы упомянуть:

  • Я сохранил это как исполняемый файл ".sh".
  • Поскольку он выполняется во время NetInstall, он запускается от имени пользователя root и должен работать от имени пользователя root для правильной работы. Вы также можете вычесть первые две строки, добавить «sudo» в начало каждой последующей строки и вручную запустить их как отдельные команды в терминале.
  • Измените UniqueID с 501 на номер, который, как вы знаете, безопасен во всех системах (501 берется первой учетной записью, созданной на Mac, обычно что-то более высокое, например 550, вероятно, будет безопасным, в зависимости от того, сколько пользователей в вашей системе). ,
  • PrimaryGroupID из 80 создает пользователя-администратора. Измените PrimaryGroupID на 20, чтобы создать обычного пользователя.
  • Таким образом, я без проблем представил более 50 компьютеров Mac. Я использую эту учетную запись для запуска команд через SSH, для установки патчей через ARD и для локального администрирования.
bispymusic
источник
Выглядит многообещающе - скоро опробую!
bmike
Кажется, у меня возникает проблема, когда я пытаюсь адаптировать этот скрипт для создания обычных пользователей путем передачи переменных в скрипт, что все, кроме последней строки, работает нормально. То есть dscl создает пользователя, и когда я использую dscl. list / users, пользователь обнаруживается просто замечательно, но chown не распознает пользователя, и, поскольку я не могу правильно изменить разрешения домашнего каталога, он не позволит этому пользователю войти в систему. Есть идеи?
Я бы хотел. Одна из моих слабостей, когда дело доходит до сценариев оболочки, заключается в том, что я никогда не изучал использование переменных очень хорошо, в основном потому, что мне на самом деле не нужно было использовать их для чего-либо на данном этапе моей работы. Может быть, @bmike или кто-то еще может предложить совет.
биспимузы
@HackintoshCoat вы можете опубликовать свой сценарий? В вашей команде вы набрали строчные буквы "/ users", когда на самом деле это "/ Users". Я сомневаюсь, что это проблема с вашим сценарием; но, если взглянуть на нее свежим взглядом, она может быстро найти проблему. У меня есть похожий скрипт, который на самом деле настраивает нескольких пользователей, поэтому использование переменных само по себе не проблема.
Кент,
2
Вместо двух последних строк ( cp -R ...; chown -R ...) вы можете использовать команду createhomedir -u administrator. createhomedirтакже есть страница справочника.
Алекс Лич
14

Для дальнейшей автоматизации этого можно использовать следующую строку для получения следующего «доступного» идентификатора пользователя, если вы работаете на Mac, на котором уже настроены пользователи.

LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`

NextID=$((LastID + 1))

Затем соответствующую строку в ответе bispymusic выше можно изменить:

 dscl . create /Users/administrator UniqueID $NextID
Кент
источник
2

У меня есть некоторые обновления на ответ выше.

dscl / -append /Groups/admin GroupMembership newUserName

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

dscl . create /Users/newUserName PrimaryGroupID 80

Это устанавливает идентификатор основной группы пользователя. 80 означает админ и 20 означает персонал . И установка на 20 не сделает пользователя стандартным. Если только первая команда не упоминается.

Випин Джонни
источник
Чтобы уточнить, любая из этих команд будет выполнять то же самое?
МаксГабриэль
Я предпочитаю первую команду, добавляя в / Groups / admin .
Випин Джонни
0

Вот сценарий оболочки, который я написал для добавления новых пользователей в Max OS X с помощью командной строки. Работает так же, как если бы это был Linux. Не стесняйтесь редактировать один для ваших личных потребностей. Просто назовите его useradd.sh и установите правильные разрешения ( chmod 0700 useradd.shв моем случае). Спасибо Биспимус, Алекс Лич, Кент за их вклад.

OS X High Sierra протестирована

#!/bin/sh

if [[ `id -u` != 0 ]]; then
    echo "Must be root to run script"
    exit
fi

read -p "Enter user name and press [ENTER]: " UserName

if [[ $UserName == `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` ]]; then
    echo "User already exists!"
    exit 0
fi

read -p "Enter real name and press [ENTER]: " RealName
read -p "Enter PrimaryGroupID (80 - admin, 20 - user) and press [ENTER]: " PrimaryGroupID
LastID=`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1`
NextID=$((LastID + 1))

. /etc/rc.common
dscl . create /Users/$UserName
dscl . create /Users/$UserName RealName $RealName

read -p "Enter password hint and press [ENTER]: " PasswordHint
dscl . create /Users/$UserName hint $PasswordHint
PasswordHint=0

echo " "
read -s -p "Enter Account Password and press [ENTER]: " AccountPassword
echo " "
read -s -p "Enter Account Password again and press [ENTER]: " AccountPasswordRepeat
if [[ $AccountPassword == $AccountPasswordRepeat ]]; then
  dscl . passwd /Users/$UserName $AccountPassword
  AccountPassword=0
else
  echo "Passwords do not match!"
  exit 1
fi
echo " "
dscl . create /Users/$UserName UniqueID $NextID
dscl . create /Users/$UserName PrimaryGroupID $PrimaryGroupID
dscl . create /Users/$UserName UserShell /bin/bash
dscl . create /Users/$UserName NFSHomeDirectory /Users/$UserName
createhomedir -u $UserName -c

echo " "
echo "New user `dscl . -list /Users UniqueID | awk '{print $1}' | grep -w $UserName` has been created with unique ID `dscl . -list /Users UniqueID | grep -w $UserName | awk '{print $2}'`"

вы можете получить то же самое из моей сути

Игорь Вольтаик
источник
Может быть, NextID=$((`dscl . -list /Users UniqueID | awk '{print $2}' | sort -n | tail -1` + 1))но это выглядит лучше и яснее, чем сейчас.
Игорь Вольтаич