题 如何在Mac OS X 10.5中从终端创建用户帐户?


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


84
2018-06-05 18:07




我还没有回答的声誉,但如果你正在寻找如何做到这一点 single_user 模式(安全重置)然后你需要重新按住 Command-S,获取每个屏幕细节的磁盘写入权限,然后 rm /var/db/.AppleSetupDone 这将允许您创建一个新的管理员帐户。希望这有助于某人 - New Alexandria


答案:


使用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

80
2018-06-05 18:15



如何确保UID是唯一的? - JR Lawhorne
没有自动的方式;如果你编写脚本,你可以让它运行“id ####”命令,并确保它返回“没有这样的用户”或一些这样的黑客。 - palmer
如果您没有权限,请记得使用sudo。 - Raffi Khatchadourian
顺便说一句,因为这比它应该更冗长, 我移植了 这些命令进入了 useradd 句法。 - Xiong Chiamiov
注意 PrimaryGroupID 80 是 admin所以 luser 可以使用 sudo 即使您没有将他添加到管理员组。 - ruslo


(这个答案应该被视为填写帕尔默程序中一些空白的附录)

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

maxid=$(dscl . -list /Users UniqueID | awk '{print $2}' | sort -ug | tail -1)
newid=$((maxid+1))

...然后使用palcl命令的dscl命令创建帐户,然后使用以下命令创建新用户的主目录:

cp -R /System/Library/User\ Template/English.lproj /Users/luser
chown -R luser:staff /Users/luser

(有一个createhomedir命令,但是当我测试它时它没有用。)


20
2018-06-05 20:21



我创建了一个脚本,用新用户填充我们的Open Directory Master,然后调用 sudo createhomedir -s (IIRC)在Open Directory Replicas / Fileshares上,他们很高兴地创建了主目录。 - Clinton Blackmore
dscl -list 限制为256个结果,因此如果您有超过256个用户,此技术将无法保证唯一的UID。 - smokris


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

苹果 命令行管理 指南有一整章关于用户和群组。


8
2018-06-05 19:19



奇。 Apple似乎已经废除了您最初提到的文档的v10.5,但是 保持v10.3 而且不太全面 雪豹版 - chb


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

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

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


7
2017-11-30 16:10



dscl -list 限制为256个结果,因此如果您有超过256个用户,此技术将无法保证唯一的UID。 - smokris
是的,这是在这里立即添加该用户的最短途径 grep 它与 id 你想到的是为新用户使用 - yair


我在这里利用不同的答案来提出我认为是一个很好的脚本来创建用户帐户。不可否认,这不是为了从ssh一次运行命令而设计的;它也被设计成在编译OS X的基于包的图像时运行的脚本(由...创建) 卡斯帕成像 要么 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的版本。我跑的时候会得到不同的结果 id 作为OS X 10.6上的管理员,而不是我在OS X 10.5上作为管理员运行时的管理员。


7
2018-01-14 23:02



在另一个答案中,Elliott警告说,'createhomedir -c'命令,最后,将为您绑定的目录中的所有用户创建帐户。 ('-c'选项,在手册页中,'仅为本地主路径创建主目录。')还有另一个选项'-u username'可以更好地工作。 - Clinton Blackmore
你好我正在使用上面的脚本。所以它添加了我的新用户,但是当用户连接到他的日历时,它表示他没有权限!你能帮助我吗 ?
@jimmy:我建议在serverfault上提出一个新问题并链接到这个答案,而不是仅仅在评论中提问,这些问题很少见。我希望权限是正确的。如果你能识别一个没有正确权限的文件,那么使用'chown'和'chmod'会有所帮助......但我不知道它会是哪一个。 - Clinton Blackmore
dscl -list 限制为256个结果,因此如果您有超过256个用户,此技术将无法保证唯一的UID。 - smokris


我已开始 一个小包装 关于 dscl 需要 useradd的参数 - 它不完整(我认为它也不可能,因为在OS X上有些东西是不可能的),但我用它来做一些用户创建。

该框架适用于所有参数,因此如果您想利用GitHub的强大社交功能,这很容易做到。


4
2017-10-17 06:15