好的,我已经使用 dscl 创建了一个用户和一个组,如下所示:
dscl . -create /Users/deadline
dscl . -create /Groups/deadline
dscl . -append /Groups/deadline GroupMembership deadline
现在我正试图像这样 chown 东西:
mkdir /tmp/stuff
chown deadline:deadline /tmp/stuff
但问题是它将用户和组设置为无人,而不是此用户“最后期限”。我需要向用户和组添加什么神奇的巫术属性才能让其正确设置 unix 权限?
另外,为什么苹果会讨厌我和我的 Unix 背景 :(
答案1
您创建了用户记录,但未提供任何设置,因此它使用默认值。
sudo dscl . -append /Groups/deadline PrimaryGroupID 100
sudo dscl . -append /Users/deadline UniqueID 1000 PrimaryGroupID 100
您可能希望查看类似以下内容的输出:
dscl . -read /Users/$USER
dscl . -read /Groups/admin
看看可以设置哪些属性。
答案2
实际上,在任何 unix 系统上,您都会遇到或多或少相同的问题:您没有为新用户和组分配用户和组 ID,因此无法识别他们的文件。解决方案:分配 ID。请参阅先前这个问题,尤其是palmer和我的答案;如果把它们放在一起,这是一个相当完整的新用户创建过程(尽管在OS X上让新用户拥有20[staff]而不是80[admin]的PrimaryGroupID是标准的)。
组非常相似,但它们的 PrimaryGroupID 应该是唯一生成的(并且它们不需要 UserShell、UniqueID、NFSHomeDirectory 或密码)。
将用户添加到组也比您习惯的要复杂一些。要正确执行此操作,您既应该将用户的 RecordName 添加到组的 GroupMembership 列表,又应该将用户的 GeneratedUID 添加到组的 GroupMembers 列表。使用 dscl 执行此操作很麻烦,但您可以使用以下方法轻松完成:
dseditgroup -o edit -a username -t user groupname
(注意:dseditgroup 也可以创建组,但我认为它并不比 dscl 更容易。)