マシンにsshした後、Mac OS X 10.5でリモートから新しいユーザーを作成できるようにしたいと思います。どうすればよいですか?
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
(この回答は、パーマーの手順でいくつかの空白を埋めるための補遺と見なされます)
新しいユーザーの未使用のUniqueIDを選択するには、次を使用できます。
maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))
...次にPalmerが提供した一連の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コマンドがありますが、テストしたところ機能しませんでした。)
作成するユーザーが多数いる場合は、構造化テキストファイルを作成し、それをdsimport
に渡してジョブを実行することができます。
Appleの コマンドライン管理 ガイドには、ユーザーとグループに関する章が1つあります。
アカウントを作成する前に一意のユーザーIDを選択する別の方法は、リストを調べて、使用したいものが存在しないことを確認することです。
Sudo dscl . list /Users uid
Sudo dscl . list groups gid
特定のIDを使用する必要がある場合に便利
ここでさまざまな答えを利用して、ユーザーアカウントを作成するための素敵なスクリプトだと思います。確かに、これは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のバージョンによって異なる場合があるようです。 OS X 10.6で管理者としてid
を実行すると、OS X 10.5で管理者として実行する場合とは異なる結果が得られます。
私は始めました 小さなラッパーdscl
についてuseradd
のパラメーターを受け取ります-それは完全ではありません(OS Xではいくつかのことができないため、可能ではないと思います) )が、ユーザーの作成に使用しました。
フレームワークはすべてのパラメーターに対応しているため、GitHubの素晴らしいソーシャル機能を利用したい場合は、簡単に実行できます。