控制单/多用户权限

avatar
作者
猴君
阅读量:0

多用户权限控制

        Unix/类Unix是一个多用户的操作系统,拥有众多的发行版系统。单一用户可以使用chmod命令修改可读可写可执行权限。多用户使用chmod就显得力不从心了。多用户操作权限则使用ACL规则(Access Control List),即访问控制列表,ACL规则允许管理员为每个文件或目录指定多个用户或组的权限,更精细的控制文件和目录的访问方式。

chmod用法

chmod命令用于修改文件或目录的权限(rwx),常用于控制单用户对文件的访问权限。其基本用法有两种:数字模式和符号模式

数字模式(Numeric Mode)

使用数字模式可以直接为文件或目录设置权限。权限数字由三个八进制数字组成,每个数字代表一组权限:

第一个数字:所有者(owner)

第二个数字:用户组(group)

第三个数字:其他用户(other)

每组权限的值可以是以下组合之一:

4(读取权限,read)

2(写入权限,write)

1(执行权限,execute)

示例:     

1、chmod 755 file.txt:给所有者赋予读、写、执行权限(4+2+1),给用户组和其他用户赋予读、执行权限(4+0+1);

2、chmod 741 file.txt:给所有者赋予读、写、执行权限(4+2+1),给用户组赋予读权限(4+0+0),给其他用户赋予执行权限(0+0+1)。

符号模式(Symbolic Mode)

符号模式可以在当前权限基础上增加或减少权限,而不是直接设置所有权限,它由以下部分组成:

u:所有者(User)

g:用户组(Group)

o:其他用户(Others)

a:所有用户(all,等同于ugo组合)

每个部分后面可以跟一个操作符和权限符号:

+:增加权限

-:减少权限

=:设置权限为指定的值

权限符号可以是:

r:读权限(Read)

w:写权限(Write)

x:执行权限(Execute)

示例:

1、chmod u+x file.txt:给所有者增加执行权限

2、chmod go-rw file.txt:去掉用户组和其他用户的读写权限

3、chmod a=r file.txt:设置所有用户的权限为只读。

其他选项

-R:递归的应用权限修改,包括目录中的所有文件和子目录

--help:显示chmod命令的帮助信息

--version:显示chmod命令的版本信息

ALC规则用法

        在Unix和类Unix系统中,ACL通常与标准的文件权限(rwx)结合使用,提供更灵活的权限管理。它允许特定用户或组具有特定的权限,例如读、写、执行等,而不受文件所有者或所属组用户的限制。

要查看或修改文件或目录的ACL,通常使用getfacl和setfacl命令。这两个命令使管理员能够查看当前ACL设置并对其进行修改,从而根据特定需求设置更复杂的访问控制策略。

getfacl用法

getfacl命令用来查看是否设置了ACL规则,以及设置的ACL信息。getfacl命令通常情况下需要管理员权限(root)或者文件及目录的所有者权限

getfacl [选项] 文件或目录

选项:

        -R:递归的获取指定目录及其子目录下的所有文件和目录的ACL信息

        -c:在标准输出中显示命令执行的详细信息,包括获取ACL信息的过程

        -p:输出权限信息显示绝对路径名

实例

getfacl -Rpc ./code/

使用getfacl命令递归的显示当前code目录的ACL信息,这里显示ACL信息没有被设置。

 getfacl -R ./code/

使用getfacl 命令递归显示code目录的acl信息,出现绝对路径和所有者、用户组信息

 setfacl用法

setfacl用于设置文件或目录ACL(Access Control List,访问控制列表)的命令,在Unix和类Unix系统中使用,它允许管理员为特定文件或目录设置复杂和精细化的访问控制规则,包括指定不同用户或组的具体权限。

setfacl [选项] ACL规则 文件或目录

选项:

-m:添加或修改指定的ACL规则

-x:移除指定的ACL规则

-b:移除所有的ACL规则

-R:递归的应用ACL规则到指定目录及其子目录下所有文件和目录

ACL规则:指定要设置的ACL规则,通常包括用户或组及其相应的权限设置。

实例

setfacl -Rm u:sunwukong:rwx ./code/

使用useradd命令创建三个用户孙悟空、太上老君、哪吒,使用setfacl命令递归的将code目录及其子目录的所有文件赋予rwx权限给到用户孙悟空,并使用getfacl查看到孙悟空已经有了code目录的rwx权限。

 

 setfacl -Rm u:taishanglaojun:rwx ./code/

 setfacl -Rm u:nezha:rwx ./code/

 

setfacl -Rb ./code/

使用setfacl命令递归的清除code目录及其子目录的所有文件的ACL规则,通过getfacl命令查看ACL规则全部清空

 

小结

setfacl命令并不是对所有用户有效,有一个特殊的超级用户root,setfacl命令对其是完全无效的(设置了也是白设,可以绕过)。另外使用setfacl命令可以帮助我们理解Unix和类Unix的多用户权限操作原理,了解命令使用方法可以帮助我们进一步的使用自动化的方式批量的来完成大型且复杂的权限操作,比如将setfacl、getfacl命令写入脚本中批量设置多用户权限等。

小细节: 通过ll或ls命令可以查看目录或文件是否设置了ACL规则,比如ll ./code/ 如果设置了ACL规则,在ugo权限的后面多了+(第一列的末位),表示额外的使用了ACL规则。(绿色的文件名后加*,表示该文件可执行)

注意:ACL规则不能代替文件或目录的基本权限,它只是一种对文件或目录基本权限的扩展,可以理解为壳,即基本权限外加了一层保护壳。

    广告一刻

    为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!