Які кроки необхідні для створення нового користувача з командного рядка?


27

Які команди (або скрипт) можуть створити повністю функціональний обліковий запис користувача на Mountain Lion, який працює лише з командного рядка через термінал або ssh.

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

Відповіді:


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" до початку кожного наступного рядка та вручну запустити їх як окремі команди в Terminal.
  • Змініть UniqueID з 501 на число, яке ви будете знати, що це безпечно для всіх систем (501 приймається першим обліковим записом, створеним на Mac, як правило, щось вище, як 550, можливо, буде безпечним, залежно від кількості користувачів у вашій системі) .
  • PrimaryGroupID 80 створює користувача адміністратора. Перейдіть на PrimaryGroupID 20, щоб створити стандартного користувача.
  • Я зображував понад 50 Macs таким чином, без проблем. Я використовую цей обліковий запис для запуску команд через SSH, для виштовхування патчів через ARD та для адміністрування на місцевому столі.

Виглядає багатообіцяюче - випробуємо це незабаром!
bmike

Проблема, яку я маю, коли я намагаюся адаптувати цей скрипт для створення постійних користувачів, передаючи змінні до сценарію, полягає в тому, що все, крім останнього рядка, працює просто чудово. Тобто, dscl створює користувача, а коли я використовую dscl. список / користувачів, користувач відображається просто чудово, але chown не розпізнає користувача, і оскільки я не можу змінити дозволи домашнього каталогу належним чином, він не дозволить цьому користувачеві увійти. Будь-які ідеї?

Я б хотів, щоб міг. Однією з моїх слабких сторін, що стосується сценаріїв оболонок, є те, що я ніколи не дуже добре навчився використанню змінних, головним чином тому, що мені фактично не потрібно було їх використовувати для чогось у цій моїй роботі. Можливо, @bmike або хтось інший може запропонувати пораду.
bispymusic

@HackintoshCoat ви можете опублікувати свій сценарій? У вашій команді ви набрали малі регістри "/ користувачів", коли насправді це "/ Користувачі". Сумніваюсь, що це проблема вашого сценарію; але, перевіривши свіжі очі, проблему вдасться знайти досить швидко. У мене є аналогічний сценарій, який фактично налаштовує декілька користувачів, тому використання самих змінних не є проблемою.
Кент

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 не зробить користувача стандартним. Якщо перша команда не згадується.


Для уточнення, чи одна з цих команд виконає те саме?
MaxGabriel

Я віддаю перевагу першій команді, що додається до / Групи / адміністратор .
Vipin Johney

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))але це просто виглядає краще і зрозуміліше, як зараз.
Ігор Волтаїк
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.