Mac OS Xのadduserコマンドに相当するものは何ですか?


20

管理者としてログインしているときに、コマンドラインから新しいユーザーを作成できるようにしたい。具体的には、adduserLinux でのコマンドに相当するものを探しています。

回答:


12

http://wiki.freegeek.org/index.php/Mac_OSX_adduser_scriptに利用可能な優れたスクリプトがありますが、 いくつかのタイプミスがあり、時には十分な柔軟性がないため、ここにいくつかの改良を加えた私の修正版があります:

#!/bin/bash
# =========================
# Add User OS X Interactive Command Line
# =========================

getHiddenUserUid()
{
    local __UIDS=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ugr)

    #echo $__UIDS
    local __NewUID
    for __NewUID in $__UIDS
    do
        if [[ $__NewUID -lt 499 ]] ; then
            break;
        fi
    done

    echo $((__NewUID+1))
}

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

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

read -p "Enter your desired user name: " USERNAME

read -p "Enter a full name for this user: " FULLNAME

read -s -p "Enter a password for this user: " PASSWORD
echo
read -s -p "Validate a password: " PASSWORD_VALIDATE
echo

if [[ $PASSWORD != $PASSWORD_VALIDATE ]] ; then
    echo "Passwords do not match!"
    exit 1;
fi

# ====

# A list of (secondary) groups the user should belong to
# This makes the difference between admin and non-admin users.

read -p "Is this an administrative user? [y/n] (n): " GROUP_ADD
GROUP_ADD=${GROUP_ADD:-n}

if [ "$GROUP_ADD" = n ] ; then
    SECONDARY_GROUPS="staff"  # for a non-admin user
elif [ "$GROUP_ADD" = y ] ; then
    SECONDARY_GROUPS="admin _lpadmin _appserveradm _appserverusr" # for an admin user
else
    echo "You did not make a valid selection!"
    exit 1;
fi

# ====

# Create a UID that is not currently in use

read -p "Should this user have interactive access?  [y/n] (y): " IS_INTERACTIVE
IS_INTERACTIVE=${IS_INTERACTIVE:-y}

if [ "$IS_INTERACTIVE" = y ] ; then
    USERID=$(getInteractiveUserUid)
elif [ "$IS_INTERACTIVE" = n ] ; then
    USERID=$(getHiddenUserUid)
else
    echo "You did not make a valid selection!"
    exit 1;
fi

echo "Going to create user as:"
echo "User name: " $USERNAME
echo "Full name: " $FULLNAME
echo "Secondary groups: " $SECONDARY_GROUPS
echo "UniqueID: " $USERID

read -p "Is this information correct?  [y/n] (y): " IS_INFO_CORRECT
IS_INFO_CORRECT=${IS_INFO_CORRECT:-y}

if [ "$IS_INFO_CORRECT" = y ] ; then
    echo "Configuring Open Directory..."
elif [ "$IS_INFO_CORRECT" = n ] ; then
    echo "User creation cancelled!"
    exit 1;
else
    echo "You did not make a valid selection!"
    exit 1;
fi


# Create the user account by running dscl (normally you would have to do each of these commands one
# by one in an obnoxious and time consuming way.

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 user to any specified groups
echo "Adding user to specified groups..."

for GROUP in $SECONDARY_GROUPS ; do
    dseditgroup -o edit -t user -a $USERNAME $GROUP
done

# Create the home directory
echo "Creating home directory..."
createhomedir -c 2>&1 | grep -v "shell-init"

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

少なくとも10.12 / Sierraでは、これは問題になる可能性があります。試してみたところ、ネットワーク上のすべてのユーザーのディレクトリを作成していました。具体的には、「-uユーザー名」を指定せずに「createhomedir」を使用することはおそらく賢明ではありません。
Jan Kyu Peblik

17

あなたはdsclコマンドを探していると思います。NiutilはNetInfoのように聞こえますが、NetInfoはOS Xで廃止され、LDAPとも呼ばれるOpen Directoryを支持しています。

Dscl、またはディレクトリサービスのコマンドラインを使用して、ローカルまたはリモートの両方のユーザーデータストアのオープンディレクトリを編集できます。sudoコマンドで実行できますが、rootとして使用する方が簡単です。

これは短く、非常に不適切なチュートリアルです。ターミナルで、ユーザーをrootに切り替えるsudo -s。dscl2という名前の機能的なユーザーアカウントを作成するには、次の操作を行う必要があります。

dscl . -create /Users/dscl2

dscl . -create /Users/dscl2 UserShell /bin/bash

dscl . -create /Users/dscl2 RealName "DSCL 2"

dscl . -create /Users/dscl2 UniqueID 8005

dscl . -create /Users/dscl2 PrimaryGroupID 20

dscl . -create /Users/dscl2 NFSHomeDirectory /Users/dscl2

dscl . -passwd /Users/dscl2 password

UUIDは通常、約501以上です。501は、最初に作成されたアカウントのデフォルトのUIDです。500未満のUIDは、デフォルトでは[アカウント]ペインに表示されません。必要な番号を選択しますが、ローカルシステム上で一意であることを確認してください。既存のUIDを上書きしないでください。上書きすると、大きな問題が発生します。

Dsclには、少し異なる動作をするインタラクティブモードもあります。プロンプトで「dscl」と入力して、対話モードに入ります。

インタラクティブモードの場合は、lsと入力して、使用可能なディレクトリを一覧表示します。BSD、LDAP、およびLocalが表示されます。cdでディレクトリをナビゲートします。詳細については、友人のmanページを参照してください。


2
これは不十分であると警告してきましたが、dsclが完了した後でも、アカウントを作成するために必要なすべての手順を確認できれば素晴らしいと思います。たとえば、/ Users / dscl2フォルダーを作成する必要がありますか?ACLを適用する方法?
ネイサンガラベディアン

1
この答えは正しいですが、@ anton-matosovの答えのスクリプトは素晴らしいです。同じコマンドを実行します。
-bmucklow
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.