如何从 Mac OS X 10.5 的终端创建用户帐户?

JR *_*rne 88 user-management mac-osx

我希望能够在 ssh 进入机器后远程在 Mac OS X 10.5 中创建新用户。我该怎么做呢?

pal*_*mer 86

使用 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
Run Code Online (Sandbox Code Playgroud)

然后您可以使用 passwd 更改用户的密码,或使用:

dscl . -passwd /Users/luser password
Run Code Online (Sandbox Code Playgroud)

您必须为用户的主目录创建 /Users/luser 并更改所有权,以便用户可以访问它,并确保 UniqueID 实际上是唯一的。

此行会将用户添加到管理员组:

dscl . -append /Groups/admin GroupMembership luser
Run Code Online (Sandbox Code Playgroud)

  • 如何确保 UID 是唯一的? (7认同)
  • 没有自动的方式;如果你编写这个脚本,你可以让它运行“id ####”命令并确保它返回“没有这样的用户”或一些这样的黑客。 (3认同)

Gor*_*son 20

(这个答案应该被视为补充帕默程序中的一些空白)

要为您的新用户选择一个未使用的 UniqueID,您可以使用:

maxid=$(dscl . -list /Users UniqueID | awk 'BEGIN { max = 500; } { if ($2 > max) max = $2; } END { print max + 1; }')
newid=$((maxid+1))
Run Code Online (Sandbox Code Playgroud)

...然后使用 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
Run Code Online (Sandbox Code Playgroud)

(有一个 createhomedir 命令,但在我测试时它不起作用。)

  • `dscl -list` 限制为 256 个结果,因此如果您有超过 256 个用户,此技术将无法保证唯一的 UID。 (2认同)

Cli*_*ore 8

如果您要创建一堆用户,则可以创建一个结构化的文本文件并将其传递dsimport给完成这项工作。

Apple 的命令行管理指南有一整章是关于用户和组的。


小智 7

在创建帐户之前选择唯一用户 ID 的另一种方法是查看列表并检查您要使用的用户 ID 是否不存在:

 sudo dscl . list /Users uid
 sudo dscl . list groups gid
Run Code Online (Sandbox Code Playgroud)

如果您需要使用某个 ID 很方便


Cli*_*ore 7

我利用这里的不同答案提出了我认为创建用户帐户的好脚本。诚然,这不是为从 ssh 一次运行一个命令而设计的;它更被设计为在编译基于包的 OS X 映像(由Casper ImagingInstaDMG创建)时运行的脚本。

#!/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)"
Run Code Online (Sandbox Code Playgroud)

该脚本确实让您指定用户应该属于哪些组。在我看来,这可能会因您运行的 OS X 版本而异。我id在 OS X 10.6 上以管理员身份运行时得到的结果与在 OS X 10.5 上以管理员身份运行时得到的结果不同。