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


86

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


我尚无人问津,但是,如果您正在寻找如何从single_user模式(安全性重置)执行此操作,则需要重新启动并按住Command-S,并根据屏幕上的详细信息获得对磁盘的写访问权,然后rm /var/db/.AppleSetupDone让您创建一个新的管理员帐户。希望这对某人有帮助
新亚历山大

Answers:


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,2009年

3
没有自动的方法。如果您编写此脚本,则只需运行“ id ####”命令并确保其返回“ No such user”或某些此类hack。
帕尔默,2009年

1
如果您没有权限,请记住使用sudo。
拉菲·哈特查杜安

顺便说一句,由于这比应该的更为冗长,因此我将这些命令移植到了useradd语法中。
熊加米奥夫

1
需要注意的是PrimaryGroupID 80admin,那么luser可以使用sudo,如果你不是他添加到管理员的组偶数。
ruslo 2014年

20

(此答案应视为补编,以填补Palmer程序中的某些空白)

要为新用户选择一个未使用的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命令,但在我测试它时不起作用。)


1
我创建了一个脚本,使用新用户填充我们的Open Directory Master,然后sudo createhomedir -s在Open Directory Replicas / Fileshares上调用(IIRC),他们愉快地创建了主目录。
克林顿·布莱克莫尔

2
dscl -list最多只能有256个结果,因此,如果您有256个以上的用户,则此技术将无法保证唯一的UID。
smokris 2012年

驱逐2条额外管道的小技巧(仅使用awk):dscl。-list /用户的UniqueID | awk'{if($ 2> max)max = $ 2; } END {print max + 1; }'
Valtoni Boaventura于

@ValtoniBoaventura不错。我通过答案将其并入(如果没有常规帐户,则使用默认值)。我还添加了设置投递箱ACL(在10.6中添加)的步骤。
戈登·戴维森


7

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

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

如果您需要使用特定的ID,则非常方便


dscl -list最多只能有256个结果,因此,如果您有256个以上的用户,则此技术将无法保证唯一的UID。
smokris 2012年

烨这就是最短路径添加该用户就在这里,现在,只是grep它与id你脑子里要使用的新用户
亚伊尔

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)"

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


在另一个答案中,Elliott警告说,'createhomedir -c'命令在最后将为您绑定到的目录中的所有用户创建帐户。(手册页中的“ -c”选项“仅为本地主目录路径创建主目录。”)还有另一个选项“ -u用户名”可能会更好。
克林顿·布莱克摩尔

你好,我正在使用上面的脚本。因此它添加了我的新用户,但是当该用户连接到他的日历时,它说他没有该权限!你能帮助我吗 ?

@jimmy:我建议对serverfault提出一个新问题,并链接到此答案,而不是仅在评论中提出问题,这种情况很少见。我希望权限是正确的。如果您可以识别没有正确权限的文件,则使用'chown'和'chmod'可以有所帮助...但是我不知道它将是哪个文件。
克林顿·布莱克莫尔

dscl -list最多只能有256个结果,因此,如果您有256个以上的用户,则此技术将无法保证唯一的UID。
smokris 2012年

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.