在以前介绍ACL的“Unix File Permissions and ACLs in OS X”一文中,后面举例中说到的,使用ACL方便设置类似沙盒的方法,现在予以补正。
该文基于10.6以及以前的OS X系统,这个版本是在10.8.5和Windows 7系统上测试通过,建立沙盒的方法应该是使用下面的步骤。
注:如果使用OS X Server,那么用户以及访问权限可以在Server.app或者Server Admin.app中进行可视化的管理,本文针对使用普通客户版OS X系统。
沙盒(SandBox)的用意是, 在沙盒里面:
- 任何人都可以创建(create)文件/目录
- 任何人都可以打开(open)/删除(delete)/执行(execute)其他人创建的文件/目录
- 任何人都可以添加(append)/修改(modify)其他人创建的文件/目录
- 任何人都可以修改其他人创建的文件/目录的属性(attribut/properties)
- 任何人,通过其它系统(Win/Unix/OSX)通过AFP/SMB访问,也可以完成上面各项的操作
**为了方便,下面以/Users/Shared/SandBox目录举例。** |
要达到这些目的,首先要规划好作为服务提供的OS X系统的用户和用户组:
- 一个本地管理员用户, 比如叫Emperor。
- 一个或者多个用于本地/网络访问的用户-根据你的实际情况而定,比如其中一个用户叫Apple,密码可以为空。
- OS X默认地所有的本地用户都属于本地staff组,普通用户的默认组也是staff,后面我们会用户staff组。
- 如果使用一个网络用户(例如AD)访问,那么这个管理员至少应该属于everyone用户组, 对应在AD中这个用户组的SID是S-1-1-0,而staff用户组在AD中的SID是S-1-5-32-545,也就是Windows中的Users用户组(注,所有的常用SID列表可以在这里找到)。
- 如果使用一个网络用户(例如AD)作为管理员,那么这个管理员至少应该属于admin用户组,对应的AD的SID是S-1-5-32-544,也就是Administrators组。
建立SandBox目录并共享,开通SMB并准许每个用户及设置密码,然后设置共享目录属性,执行下面的命令:
sudo mkdir -p /Users/Shared/SandBox
sudo chown root:staff /Users/Shared/SandBox
sudo chmod -R 777 /Users/Shared/SandBox
sudo chmod -R +a "everyone allow list,add_file,search,delete,add_subdirectory,delete_child,chown,writesecurity,writeattr,readextattr,readattr,file_inherit,directory_inherit,only_inherit" /Users/Shared/SandBox
sudo chmod -R +a "staff allow list,add_file,search,delete,add_subdirectory,delete_child,chown,writesecurity,writeattr,readextattr,readattr,file_inherit,directory_inherit,only_inherit" /Users/Shared/SandBox
如果需要输入当前管理员用户的密码.
好,大功告成。
另注:对于使用FTP协议,可以参考Apple KB HT4704。其中主要的是生成FTP的ACL用户组com.apple.access_ftp,然后把需要的用户和用户组加入到其中(dseditgroup),如果需要可以是staff,最后启用FTP服务(sudo launchctl load -w /System/Library/LaunchDaemons/ftp.plist)。
补充:命令行开启SMB服务,添加一个用户使用SMB访问共享:
# Enable SMB service
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smbd.plist
# Enable user "apple" SMB sharing access with empty password.
pwpolicy -u apple -sethashtypes SMB-NT on
sudo dscl . -passwd /Users/apple ""