LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: leonardgu

Access Control List (ACL) 学习笔记

[复制链接]
发表于 2007-7-10 11:34:00 | 显示全部楼层
多谢兄台指点,原来里面还有这么多的学问,刚刚发现man acl里面就有解释,惭愧。

   另外关于acl的使用场合问题,因为我们这边是做cg的,有很多项目文件夹,每个项目文件夹的权限都是根据项目组(用户组)来设定的,可能某一个项目文件夹要两个组的成员都有写权限,所以只能用acl来控制。 而默认的umask是022,很多用户又不习惯直接在项目文件夹里面直接创建文件,而是在本地创建,再copy过去,所以会产生上面的问题,现在只能把umask改成002了,不知道兄台有什么更好的解决办法。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-10 21:18:42 | 显示全部楼层
我还是认为应该用subversion比较好

我觉得让用户直接自由地读写project folder是很不安全的一种做法。即便你有很好的备份措施,一旦文件被误删除或者损坏了还是需要时间来恢复的。

你可以在subversion里面设置不同的project folder,然后把权限缩小到用户本身(通过ssh-key来做authentication). 这样子你可以很清楚每个用户在哪个时间修改了哪一个文件,还可以很轻送地revert any changes.

还有就是在Mac, Linux, Windows都有不同的svn client. 那么你的developer现在就可以在自己的desktop machine上开发,然后再把文件check into repository.

当然缺点方面就是用了subversion你就需要额外的disk space, more backups这些都是需要考虑的问题,特别是你们做cg的有可能文件容量会很大.

我只是觉得我们不应该把所有的authentication都做到系统里来,很多可以由application所能控制的权限不应该加重系统管理员的任务
回复 支持 反对

使用道具 举报

发表于 2007-7-10 21:30:59 | 显示全部楼层
我同意 " leonardgu"的观点, 在“aries1998” 所需的要求下,适用cvs 或是 svn 等版本控制工具比较现实和安全,指定人员或是指定时间下自动导出稳定版本,然后用rsync的方式从版本控制机同步到工程服务器上。
回复 支持 反对

使用道具 举报

发表于 2007-7-11 00:46:33 | 显示全部楼层
如果类似于代码开发这样的任务,用svn是很好的,以前也使用过。
  但就我们的目前应用环境来看,首先是文件很大(场景文件),一个项目动辄100G左右(很多都是一些贴图和素材文件,而这些都是每个用户必须使用的),很多用户会同时会做不同的项目,如果每个用户都check一份项目目录到本地,本地硬盘空间肯定是不够用的,而且网络流量也会很高。
  其次是文件的修改频率也很高,多用户如果要编辑同一个文件,频繁的check和update也会增加用户的使用难度(使用linux已经让他们很郁闷了)。而且场景文件修改完以后马上就要渲染,渲染的结果用户也要马上看到,这样一来是svn的数据库会增加得很快。
  公司也开发了一个以svn为底层的项目管理系统,但还没有使用起来,我觉得效果也不会太好。虽然目前权限做得比较底层,但管理起来还不算太麻烦。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-11 05:27:39 | 显示全部楼层
恩,我也没有经验处理如此大容量的文件什么办法处理比较好。如果一定要使用ACL的话我想你是不是可以写个script对于特定的目录定期设置ACL权限呢?我自己试了一下

先定义个周期

  1. # crontab -e
  2. */5 8-17 * * 1-5 /home/leonard/acl.sh
复制代码


然后将没有ACL_GROUP_OBJ权限的文件或者目录全部打上表记


  1. vi /home/leonard/acl.sh

  2. #!/bin/bash

  3. PROJECT_DIR=/home/leonard/dir
  4. ACL_GROUP=leonard
  5. LOG_FILE=/tmp/acl.log

  6. for file in $PROJECT_DIR/*
  7. do
  8.   ACL_GROUP_PERM=$(getfacl $file 2>/dev/null| grep -v '#' | grep ^group:$ACL_GROUP|awk -F':' '{print $3}')

  9.   if [ -z $ACL_GROUP_PERM ] || [ $ACL_GROUP_PERM != "rw-" ]; then
  10.     echo -e "**********************************" >> $LOG_FILE
  11.     date >> $LOG_FILE
  12.     echo -e "Target:`basename "$file"` do not have $ACL_GROUP rw-" >> $LOG_FILE
  13.     echo -e "Now set `basename "$file"` to have $ACL_GROUP rw-" >> $LOG_FILE
  14.     setfacl -R -m g:$ACL_GROUP:rw- $file  2>&1 >> $LOG_FILE
  15.     echo -e "**********************************\n" >> $LOG_FILE
  16.   fi
  17. done
复制代码
回复 支持 反对

使用道具 举报

发表于 2007-7-13 14:51:31 | 显示全部楼层
看了这个帖子,受益非浅啊,但我有个问题想请教一下,如过我有个文件1,我想A用户对它有某个权限,B用户对它又有某种权限,C有某种权限,…………一直到Z,就是说有很多用户,对这个文件有若干种不同的权限,请问该如何设置?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-13 20:55:57 | 显示全部楼层
我能不能问下你为什么会想到有这样的要求呢?有什么实际需要没有? 或者你自己有没有想过如果你来设置的话你会怎么做?

在问问题之前一定要自己先想想这些个问题
回复 支持 反对

使用道具 举报

发表于 2007-7-16 12:13:32 | 显示全部楼层
Post by leonardgu
我能不能问下你为什么会想到有这样的要求呢?有什么实际需要没有? 或者你自己有没有想过如果你来设置的话你会怎么做?

在问问题之前一定要自己先想想这些个问题
我想用samba做文件服务,来替代windows,但在windows下,我可以对每个用户设置不同的权限,那么,在linux下,该怎么做?
回复 支持 反对

使用道具 举报

发表于 2007-7-16 14:02:53 | 显示全部楼层
只要acl设置好了,samba里面只要设置好用户认证就好了,因为samba里面的用户肯定首先都是系统用户,权限最终还是由系统来识别的,与samba没多大关系。我们这边就是samba做PDC然后加acl来控制windows的用户的权限。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-8-1 07:02:26 | 显示全部楼层
继续补充一点和ACL有关的信息

今天看到一则Redhatmagazine上的消息写到,由于ACL和SELinux给Linux的文件增加了很多额外的属性,称之为extended attributes (或者叫xattrs)那么我们在用tar进行归档备份的时候是不是也可以将这些属性也保存起来呢?

Redhat给出的答案是:如果你使用的是RHEL4的话,那么只有使用star命令才可以把这些属性也备份起来。然而在RHEL5下面Redhat对tar进行了修改,所以tar也可以对xatrrs进行备份了,只需要用以下的选项:

--selinux 归档SELinux文件和目录的属性
--acls 归档ACL文件和目录的属性
--xattrs 归档所有的Extended Attributes (包括SELinux和ACL)

同理,如果你不需要备份这些属性的话就可以用

--no-selinux
--no-acls
--no-xattrs

详细介绍请看官方的链接: http://www.redhatmagazine.com/20 ... xattrs/?sc_cid=3218
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表