基本权限表示意义
代表字符 | 权限 | 对应数字 | 对文件含义 | 对目录含义 |
---|---|---|---|---|
r | 读 | 4 | 可以查看文件内容 | 可以列出目录中的内容 |
w | 写 | 2 | 可以修改文件内容 | 可以在目录中创建和删除文件 |
x | 执行 | 1 | 可以执行文件 | 可以进入目录 |
chmod 改变文件权限
常用选项
- -R 递归修改
$ chmod -R 0755 dirname
$ chmod u+x filename
chown 改变所属用户
常用选项
- -R 递归修改
$ chown -R username dirname
# 同时改变所属用户和组
$ chown username:groupname filename
chgrp 改变所属组
常用选项
- -R 递归修改
$ chgrp -R groupname dirname
umask 文件默认权限
常用选项
- -S 以rwx方式显示新建文件的默认权限
# 查看默认权限掩码
$ umask
0022
# 查看默认权限
$ umask -S
u=rwx,g=rx,o=rx
# 修改默认权限, 新建权限为 0644
$ umask 0133
ACL权限管理
ACL权限在我的理解是: 对某个文件或者目录单独为某个用户,或者某个组设立的一种权限,不属于ugo中任何一种;
如果要使用ACL权限,必须确保磁盘挂载了ACL权限,查看ACL权限是否开启可以通过以下方式:
# -h 仅显示超级块中信息,而不显示磁盘块组的详细信息
$ dumpe2fs -h /dev/sda1
#永久开启ACL方法
vim /etc/fstabl
UUID=0c126ca0-20c6-4f25-9ee2-4c6eb79578cc / xfs defaults,acl 0 0
#重新挂载硬盘,或者重启
mount -o remount /
setfacl 设置ACL权限
常用选项
- -m 设定ACL权限
- -x 删除指定ACL权限
- -b 删除所有ACL权限
- -k 删除所有ACL权限
- -R 递归设定ACL权限
# 为用户st设置读和执行权限
$ setfacl -mR u:st:rx project
# 删除用户st的ACL权限
$ setfacl -xR u:st project
# 删除所有ACL权限
$ setfacl -bR project
# 为gname组设置ACL权限
$ setfacl -mR g:gname:rx project
# 最大有效权限mask设置
$ setfacl -mR m:r project
# 设置目录默认ACL权限;如果给父目录设置ACL权限,那么父目录中所有新建的子文件都会集成父目录的ACL权限
# 注意:只有目录可以设置默认ACL权限
$ setfacl -m d:st:rx dir
# 删除默认ACL权限
$ setfacl -k dir
getfacl 查看ACL权限
$ getfacl project
# file: project
# owner: root
# group: root
user::rw-
user:st:r-x #这里是st用户单独对project的ACL权限
group::r--
group:gname:r-x #这里是gname组单独对project的ACL权限
mask::r-- #最大有效权限设置为r,所以这里是r--
other::r--
特殊权限
SUID权限
让普通用户在执行某个命令或者可执行程序时暂时获得文件属主身份(以属主身份运行)
如图,普通用户修改密码时需要修改shadow文件,shadow文件权限是000,无法直接修改;
所以用户可以通过passwd命令的SUID权限暂时性获passwd文件的属主(root)权限来修改shadow文件,虽然shadow的u权限是---,但是对root这个超级用户无效;
于是普通用户可以通过passwd对shadow进行更改,完成改密码操作。
需要注意的:
- 只有可以执行的文件设定SUID权限才有意义;
- 执行者要对被执行程序有执行权限;
- 属主身份只有程序执行中有效;
- 属于危险命令,无特殊需求不宜设置;
# 设置SUID权限
$ chmod 4755 filename.sh
SGID权限
- 对文件:让普通用户在执行某个命令或者可执行程序时暂时获得文件属组身份(以属组身份运行)
- 对目录:普通用户在这个目录中可以获得属组身份,如果目录可写,用户新建的文件属组也是这个目录的属组
# 设置SGID权限
$ chmod 2755 filename
SBIT权限(粘着位权限)
普通用户在某个目录拥有写权限,可以删除目录下所有文件。但是如果限制他只能删除自己创建的文件,就必须设置SBIT权限。
SBIT权限需注意:
- 只针对目录有意义
- 用户必须对目录有写和执行权限,否则进不去目录一切也毫无意义
# 设置SBIT权限
$ chmod 1777 dir
chattr权限
可以使用[+-=]这三个符号设置权限追加,减少,相等。其中最常用的是[ia]两个参数
- i:设定文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。(只读)
- a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全。只有root才能设定这个属性。
- A:文件或目录的 atime (access time)不可被修改(modified), 可以有效预防例如手提电脑磁盘I/O错误的发生。
- S:硬盘I/O同步选项,功能类似sync。
- c:即compresse,设定文件是否经压缩后再存储。读取时需要经过自动解压操作。
- d:即no dump,设定文件不能成为dump程序的备份目标。
- j:设定此参数使得当通过mount参数:data=ordered 或者 data=writeback 挂 载的文件系统,文件在写入时会先被记录(在journal中)。
- s:保密性地删除文件或目录,即硬盘空间被全部收回。
- u:与s相反,当设定为u时,数据内容其实还存在磁盘中,可以用于undeletion。
- e:表示可执行文件
这些属性最常用的还是i和a,其他的看看就好。
$ chattr -R +a /wwwlog/*
lsattr 查询
查询chattr设置的系统底层权限
sudo 权限
使用visudo命令可以快速修改sudo配置文件,配置文件真实路径是/etc/sudoers
# 用户名 本地主机地址 可使用的身份 授权的命令(绝对路径)
# root ALL = (ALL) ALL
# 组名 本地主机地址 可使用的身份 授权的命令(绝对路径)
# %wheel ALL = (ALL) ALL