Як створити облікові записи користувачів з терміналу в 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, якщо у вас немає дозволів.
Раффі Хатчадуріан

BTW, оскільки це набагато більш багатослівний, ніж повинен бути, я переніс ці команди в useraddсинтаксис.
Xiong Chiamiov

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, яку палмер дав, щоб створити обліковий запис, а потім створити домашній каталог нового користувача за допомогою:

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
Я створив сценарій, який заповнює наш майстер Open Directory новими користувачами, а потім викликає sudo createhomedir -s(IIRC) репліки / файлові файли Open Directory, і вони із задоволенням створюють домашні каталоги.
Клінтон Блекмор

2
dscl -listобмежено 256 результатами, тому якщо у вас більше 256 користувачів, ця методика не зможе гарантувати унікальний UID.
smokris

Маленький трюк, щоб виселити 2 додаткові труби (використовуйте лише awk): dscl. -list / Користувачі UniqueID | awk '{if ($ 2> max) max = $ 2; } END {print max + 1; } '
Валтоні Боавентура

@ValtoniBoaventura Nice. Я включив це у відповідь (із замовчуванням у випадку, якщо немає регулярних облікових записів). Я також додав крок, щоб встановити ACL Box Drop (який був доданий у 10.6).
Гордон Девіссон

8

Якщо у вас є маса користувачів для створення, можна створити структурований текстовий файл і передати його dsimportдля виконання завдання.

Посібник з управління командним рядком Apple містить цілий розділ про користувачів та групи.


Незвичайно. Apple, схоже, покінчила з версією документа, про який ви згадували, v10.5, але зберегла версію
10.10

7

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

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

Зручно, якщо вам потрібно використовувати певний ідентифікатор


dscl -listобмежено 256 результатами, тому якщо у вас більше 256 користувачів, ця методика не зможе гарантувати унікальний UID.
smokris

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

7

Тут я використав різні відповіді, щоб придумати те, що, на мою думку, є гарним сценарієм для створення облікових записів користувачів. Правда, це не розроблено для запуску команди одночасно з ssh; Крім того, він призначений для запуску сценарію під час компілювання зображення на основі пакета ОС 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)"

Сценарій дозволяє вказати, до яких груп повинен належати користувач. Мені здається, що це може відрізнятися залежно від версії ОС X, яку ви працюєте. Я отримую інші результати, коли запускаюсь idяк адміністратор на OS X 10.6, ніж у мене, коли я працюю як адміністратор на OS X 10.5.


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

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

@jimmy: Я б рекомендував задавати нове запитання на сервері за замовчуванням і посилатися на цю відповідь, а не просто задавати питання в коментарях, які рідко можна побачити. Я б очікував, що дозволи будуть правильними. Використання 'chown' та 'chmod' може допомогти, якщо ви можете виявити файл, який не має правильних дозволів ... але я не знаю, який би це був.
Клінтон Блекмор

dscl -listобмежено 256 результатами, тому якщо у вас більше 256 користувачів, ця методика не зможе гарантувати унікальний UID.
smokris

4

Я почав невелику обгортку про dsclте, що приймає useraddпараметри - це не є повним (і я не думаю, що це може бути, оскільки деякі речі неможливі в 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.