【02-05】权限管理 [chown|chmod|getfacl|setfacl | chattr|lsattr ]

权限管理 

chown

chown 命令: 设置文件所有者和文件关联组的命令
chown [-cfhvR] [--help] [--version] user[:group] file...

user : 新的文件拥有者的使用者 ID
group : 新的文件拥有者的使用者组(group)
-c : 显示更改的部分的信息
-f : 忽略错误信息
-h :修复符号链接
-v : 显示详细的处理信息
-R : 处理指定目录以及其子目录下的所有文件
--help : 显示辅助说明
--version : 显示版本

 

 chmod

chmod 命令:控制用户对文件的权限的命令

chmod [-cfvR] [--help] [--version] mode file...

u 表示该文件的拥有者,
g 表示与该文件的拥有者属于同一个群体(group)者,
o 表示其他以外的人,
a 表示这三者皆是。

+ 表示增加权限、
- 表示取消权限、
= 表示唯一设定权限。

r 表示可读取,
w 表示可写入,
x 表示可执行,
X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。

7 读 + 写 + 执行 rwx 111
6 读 + 写 rw- 110
5 读 + 执行 r-x 101
4 只读 r-- 100
3 写 + 执行 -wx 011
2 只写 -w- 010
1 只执行 --x 001
0 无 --- 000

其他参数说明:
-c : 若该文件权限确实已经更改,才显示其更改动作
-f : 若该文件权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有文件与子目录进行相同的权限变更(即以递归的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

 

getfacl

getfacl 命令:查看(获取)文件访问控制列表(ACL列表)
getfacl [-aceEsRLPtpndvh] 文件 ...
getfacl [-aceEsRLPtpndvh] -

-a, --access 仅显示文件访问控制列表
-d, --default 仅显示默认的访问控制列表
-c, --omit-header 不显示注释表头
-e, --all-effective 显示所有的有效权限
-E, --no-effective 显示无效权限
-s, --skip-base 跳过只有基条目(base entries)的文件
-R, --recursive 递归显示子目录
-L, --logical 逻辑遍历(跟随符号链接)
-P, --physical 物理遍历(不跟随符号链接)
-t, --tabular 使用制表符分隔的输出格式
-n, --numeric 显示数字的用户/组标识
-p, --absolute-names 不去除路径前的 '/' 符号
-v, --version 显示版本并退出
-h, --help 显示本帮助信息

 

setfacl

setfacl 命令:设置文件访问控制列表(ACL列表)
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
setfacl --restore=file

-m, --modify=acl     更改文件的访问控制列表
-M, --modify-file=file  从文件读取访问控制列表条目更改
-x, --remove=acl     根据文件中访问控制列表移除条目
-X, --remove-file=file  从文件读取访问控制列表条目并删除
-b, --remove-all     删除所有扩展访问控制列表条目
-k, --remove-default   移除默认访问控制列表
    --set=acl   设定替换当前的文件访问控制列表
  --set-file=file 文件中读取访问控制列表条目设定
  --mask       重新计算有效权限掩码
-n, --no-mask   不重新计算有效权限掩码
-d, --default 应用到默认访问控制列表的操作
-R, --recursive 递归操作子目录
-L, --logical 依照系统逻辑,跟随符号链接
-P, --physical 依照自然逻辑,不跟随符号链接
--restore=file 恢复访问控制列表,和“getfacl -R”作用相反
--test 测试模式,并不真正修改访问控制列表属性
-v, --version 显示版本并退出
-h, --help 显示本帮助信息

 

lsattr

lsattr 命令:显示文件属性
lsattr [-adlRvV][文件或目录...]

-a  显示所有文件和目录,包括以"."为名称开头字符的额外内建,现行目录"."与上层目录".."。
-d  显示,目录名称,而非其内容。
-l  此参数目前没有任何作用。
-R  递归处理,将指定目录下的所有文件及子目录一并处理。
-v  显示文件或目录版本。
-V  显示版本信息。

 

chattr

chattr 命令:改变文件属性
chattr [ -RVf ] [ -v version ] [ mode ] 文件...
 
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。

-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v<版本编号>:设置文件或目录版本;
-V:显示指令执行过程;
+<属性>:开启文件或目录的该项属性;
-<属性>:关闭文件或目录的该项属性;
=<属性>:指定文件或目录的该项属性。

 

 

 案例:

创建用户user1、user2、user3。在/data/下创建目录test
    //创建user1……3用户
        [root@host ~]# name=user;for i in {1..3};do useradd $name$i;done
    //创建data和test目录
        [root@host ~]# mkdir -p /data/test

(1)、目录/data/test属主、属组为user1
    //查看当前目录属主属组
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 root root 4096 Oct 30 22:51 /data/test/
    //修改属主属组为user1
        [root@host ~]# chown user1:user1 /data/test/
    //查看修改后的目录属主属组
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 user1 user1 4096 Oct 30 22:51 /data/test/

(2)、在目录属主、属组不变的情况下,user2对文件有读写权限
    //查看默认的权限
        [root@host ~]# ll -d /data/test/
        drwxr-xr-x. 2 user1 user1 4096 Oct 30 22:51 /data/test/
        //查看默认的acl权限
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rwx
        group::r-x
        other::r-x
    //设置user2用户对/data/test/目录具有读写权限
        [root@host ~]# setfacl -m u:user2:rw /data/test/
    //查看修改后的acl权限
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rwx
        user:user2:rw-
        group::r-x
        mask::rwx
        other::r-x
 
(3)、user1在/data/test目录下创建文件a1.sh, a2.sh, a3.sh, a4.sh,
设置所有用户都不可删除1.sh,2.sh文件、除了user1及root之外,所有用户都不可删除a3.sh, a4.sh

    //创建所需要的文件病查看
        [root@host ~]# touch /data/test/a{1..4}.sh
        [root@host ~]# ls /data/test/
        a1.sh a2.sh a3.sh a4.sh

     
    //修改文件属性,给1和2文件增加不可删除属性并查看
        [root@host ~]# chattr +i /data/test/a{1..2}.sh
        [root@host ~]# lsattr /data/test/
        -------------e-- /data/test/a3.sh
        ----i--------e-- /data/test/a1.sh
        -------------e-- /data/test/a4.sh
        ----i--------e-- /data/test/a2.sh
    //对文件尝试删除,删除失败
        [user2@host ~]# rm /data/test/a1.sh
        rm: remove regular empty file ‘/data/test/a1.sh’? y
        rm: cannot remove ‘/data/test/a1.sh’: Operation not permitted
     
    //为文件加上sticky标志
    //设置sticky bit位后,就算用户对目录具有写权限,但也只能添加文件而不能删除文件
        [root@host ~]# chmod o+t /data/test/a{3..4}.sh
        [root@host ~]# ll /data/test/
        total 0
        -rw-r--r--. 1 root root 0 Oct 31 00:14 a1.sh
        -rw-r--r--. 1 root root 0 Oct 31 00:14 a2.sh
        -rw-r--r-T. 1 root root 0 Oct 31 00:14 a3.sh
        -rw-r--r-T. 1 root root 0 Oct 31 00:14 a4.sh
    //尝试删除
        [test1@host ~]$ rm /data/test/a3.sh
        rm: cannot remove ‘/data/test/a3.sh’: Permission denied


(4)、user3增加附加组user1,同时要求user1不能访问/data/test目录及其下所有文件
    //查看当前user3组信息
        [root@host ~]# id user3
        uid=1004(user3) gid=1004(user3) groups=1004(user3)
    //为user3增加附加组user1
        [root@host ~]# usermod -G user1 user3
    //确认增加附加组的user3
        [root@host ~]# id user3
        uid=1004(user3) gid=1004(user3) groups=1004(user3),1002(user1)
    //查看当前文件夹情况
        [root@host ~]# ll -d /data/test/
        drwxrwxr-x+ 2 user1 user1 4096 Oct 31 00:41 /data/test/
    //修改权限并去掉x权限
        [root@host ~]# chmod -x /data/test/
        [root@host ~]# ll -d /data/test/
        drw-rw-r--+ 2 user1 user1 4096 Oct 31 00:41 /data/test/
    //切换user1并尝试访问文件夹
        [root@host ~]# su - user1
        [user1@host ~]$ cd /data/test/
        -bash: cd: /data/test/: Permission denied

 
(5)、清理/data/test目录及其下所有文件的acl权限
    //查看/data/test/默认acl权限表
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rw-
        user:user2:rw-
        user:user3:rw-
        group::r--
        other::r--
    //递归删除扩展访问所有权限
        [root@host ~]# setfacl -R -b /data/test/
    //查看删除后的情况
        [root@host ~]# getfacl /data/test/
        getfacl: Removing leading '/' from absolute path names
        # file: data/test/
        # owner: user1
        # group: user1
        user::rw-
        group::r--
        other::r--

 

上一篇:上云迁移-海量数据迁移解决方案


下一篇:Linux基础(练习三)