Tim*_*tes 9 directory-services user-management mac-osx
我正在尝试在我的机器上手动安装一个守护进程(Oracle Grid Engine),我希望它在一个独立的帐户下运行。使用目录服务将“系统”帐户添加到 OS X 上的本地计算机的首选方法是什么?其中很多存在于 /etc/passwd ( _www
, _dovecot
, 等) 中,但该文件顶部的注释说它除了在单用户模式下不被使用。
我在 10.6 上运行,不需要任何特殊的网络帐户管理。我希望有一些简单的东西——相当于useradd
几乎所有其他类 Unix 操作系统。
par*_*par 12
编辑:2014 年 1 月 9 日更新了 OS X Mavericks(来自 Dave 的建议,谢谢!)
我写了一个 bash 脚本来做到这一点。它将使用第一个小于或等于 500(Mac OS X 上的守护程序帐户 uid)的未使用 uid,它也具有相同的未使用 gid。
将脚本保存到一个名为的文件中,add_system_user.sh
并使用chmod 755 add_system_user.sh
.
然后假设您要添加一个名为par的守护进程/系统用户。你会像这样运行这个脚本:
sudo add_system_user.sh par
你会得到一个系统用户_par
,它的别名是par
(你请求的名字)并且有一个匹配的 uid 和 gid(例如 499 或它找到的任何东西)。
这是脚本:
#!/bin/bash
if (( $(id -u) )) ; then
echo "This script needs to run as root"
exit 1
fi
if [[ -z "$1" ]] ; then
echo "Usage: $(basename $0) [username] [realname (optional)]"
exit 1
fi
username=$1
realname="${2:-$username}"
echo "Adding daemon user $username with real name \"$realname\""
for (( uid = 500;; --uid )) ; do
if ! id -u $uid &>/dev/null; then
if ! dscl /Local/Default -ls Groups gid | grep -q [^0-9]$uid\$ ; then
dscl /Local/Default -create Groups/_$username
dscl /Local/Default -create Groups/_$username Password \*
dscl /Local/Default -create Groups/_$username PrimaryGroupID $uid
dscl /Local/Default -create Groups/_$username RealName "$realname"
dscl /Local/Default -create Groups/_$username RecordName _$username $username
dscl /Local/Default -create Users/_$username
dscl /Local/Default -create Users/_$username NFSHomeDirectory /var/empty
dscl /Local/Default -create Users/_$username Password \*
dscl /Local/Default -create Users/_$username PrimaryGroupID $uid
dscl /Local/Default -create Users/_$username RealName "$realname"
dscl /Local/Default -create Users/_$username RecordName _$username $username
dscl /Local/Default -create Users/_$username UniqueID $uid
dscl /Local/Default -create Users/_$username UserShell /usr/bin/false
dscl /Local/Default -delete /Users/_$username AuthenticationAuthority
dscl /Local/Default -delete /Users/_$username PasswordPolicyOptions
break
fi
fi
done
echo -e "Created system user $username (uid/gid $uid):\n"
dscl /Local/Default -read Users/_$username
echo -e "\nYou can undo the creation of this user by issuing the following commands:\n"
echo "sudo dscl /Local/Default -delete Users/_$username"
echo "sudo dscl /Local/Default -delete Groups/_$username"
Run Code Online (Sandbox Code Playgroud)
小智 12
我尝试了par 中的脚本,发现了一些问题。因此,我针对一个特定的用户 ID 和 OS X Mavericks (10.9) 对其进行了修改。
我发现在 Mavericks 下的用户帐户中添加了一些无关的记录——一个 PasswordPolicyOptions 和一个 AuthenticationAuthority 记录——需要删除它们以正确模仿其他内置服务用户帐户(如 _www)。
我还将 Password 和 RealName 记录添加到 Group 帐户。
我为 WSGI 服务帐户创建了一个自定义的一次性脚本。这是更新后的脚本。
#! /bin/bash
#
# Check that we are superuser (i.e. $(id -u) is zero)
if (( $(id -u) ))
then
echo "This script needs to run as root"
exit 1
fi
username_=wsgi
uid_=240
realname_="WSGI Daemon"
dscl . -create /Groups/_$username_
dscl . -create /Groups/_$username_ PrimaryGroupID $uid_
dscl . -create /Groups/_$username_ RecordName _$username_ $username_
dscl . -create /Groups/_$username_ RealName $realname_
dscl . -create /Groups/_$username_ Password \*
dscl . -create /Users/_$username_
dscl . -create /Users/_$username_ NFSHomeDirectory /xpt/local/apache2/wsgi/api
dscl . -create /Users/_$username_ Password \*
dscl . -create /Users/_$username_ PrimaryGroupID $uid_
dscl . -create /Users/_$username_ RealName $realname_
dscl . -create /Users/_$username_ RecordName _$username_ $username_
dscl . -create /Users/_$username_ UniqueID $uid_
dscl . -create /Users/_$username_ UserShell /usr/bin/false
dscl . -delete /Users/_$username_ PasswordPolicyOptions
dscl . -delete /Users/_$username_ AuthenticationAuthority
Run Code Online (Sandbox Code Playgroud)
请注意,运行此脚本后,/etc/passwd 和 /etc/groups 文件不会更新。我相信它们会在重新启动时更新。
归档时间: |
|
查看次数: |
8497 次 |
最近记录: |