权限管理
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--