文件权限
文件属性
文件属性:
[root@centos8 ~]#ll .vimrc
-rw-r--r--. 1 root root 732 Oct 8 16:52 .vimrc
//不同属性代表的含义
-rw-r--r--. //权限最后的.是selinux的意思
1 //链接数为1
root //所有者为root用户
root //所属组为root组
732 //文件大小,单位字节
Oct 8 16:52 //mtime
.vimrc //文件名
文件属性操作:
- chown 设置文件的所有者
- chgrp 设置文件的属组信息
修改文件的属主和属组
修改文件的属主:chown
- chown [OPTION]... [OWNER][:[GROUP]] FILE...
- OWNER
- OWNER:GROUP
- :GROUP,冒号也可用 . 替换
- -R: 递归
- chown [OPTION]... --reference=RFILE FILE...
修改文件的属组:chgrp
- chgrp [OPTION]... GROUP FILE...
- chgrp [OPTION]... --reference=RFILE FILE...
- -R 递归
文件权限
文件的权限主要针对三类对象进行定义:
- owner 属主, u
- group 属组, g
- other 其他, o
每个文件针对每类访问者都定义了三种权限:
- r Readable
- w Writable
- x eXcutable
文件:
- r 可使用文件查看类工具获取其内容
- w 可修改其内容
- x 可以把此文件提请内核启动为一个进程
目录:
- r 可以使用ls查看此目录中文件列表
- w 可在此目录中创建文件,也可删除此目录中的文件
- x 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
- X 只给目录x权限,不给文件x权限
文件权限操作
文件权限操作命令:chmod
文件权限(rwx|X)
八进制数字:
- --- 000 0
- --x 001 1
- -w- 010 2
- -wx 011 3
- r-- 100 4
- r-x 101 5
- rw- 110 6
- rwx 111 7
- 例如:
- 640 rw-r-----
- 755 rwxr-xr-x
修改文件权限:
- chmod [OPTION]... OCTAL-MODE FILE...
- -R: 递归修改权限
- chmod [OPTION]... MODE[,MODE]... FILE...
- MODE:
- 修改一类用户的所有权限
- u= g= o= ug= a= u=,g=
- 修改一类用户某位或某些位权限
- u+ u- g+ g- o+ o- a+ a- + -
- chmod [OPTION]... --reference=RFILE FILE...
- 参考RFILE文件的权限,将FILE的修改为同RFILE
权限设置示例:
- chgrp sales testfile
- chown root:admins testfile
- chmod u+wx,g-r,o=rx file
- chmod -R g+rwX /testdir
- chmod 600 file
- chown mage testfile
新建文件和目录的默认权限:
- umask值 可以用来保留在创建文件权限
- 新建文件的默认权限: 666-umask,如果所得结果某位存在执行(奇数)权限,则将其权限+1
- 新建目录的默认权限: 777-umask
- 非特权用户umask是 002
- root的umask 是 022
- umask: 查看
- umask # 设定
- 示例:umask 002
- umask u=rw,g=r,o=
- umask –S 模式方式显示
- umask –p 输出可被调用
- 全局设置: /etc/bashrc 用户设置:~/.bashrc
Linux文件系统上的特殊权限
- SUID, SGID, Sticky
- 三种常用权限:r, w, x user, group, other
- 安全上下文
- 前提:进程有属主和属组;文件有属主和属组
- 任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属主为发起者,进程的属组为发起者所属的组
- 进程访问文件时的权限,取决于进程的发起者
- 进程的发起者,同文件的属主:则应用文件属主权限
- 进程的发起者,属于文件属组;则应用文件属组权限
- 应用文件“其它”权限
可执行文件上SUID权限:
- 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有执行权限
- 启动为进程之后,其进程的属主为原程序文件的属主
- SUID只对二进制可执行程序有效
- SUID设置在目录上无意义
- 权限设定:
- chmod u+s FILE...
- chmod u-s FILE...
可执行文件上SGID权限:
- 任何一个可执行程序文件能不能启动为进程:取决发起者对程序文件是否拥有
执行权限 - 启动为进程之后,其进程的属组为原程序文件的属组
- 权限设定:
- chmod g+s FILE...
- chmod g-s FILE...
目录上的SGID权限:
- 默认情况下,用户创建文件时,其属组为此用户所属的主组
- 一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组
- 通常用于创建一个协作目录
- 权限设定:
- chmod g+s DIR...
- chmod g-s DIR...
特殊权限数字法:
- SUID SGID STICKY
- 000 0
- 001 1
- 010 2
- 011 3
- 100 4
- 101 5
- 110 6
- 111 7
- chmod 4777 /tmp/a.txt
Sticky位
- 具有写权限的目录通常用户可以删除该目录中的任何文件,无论该文件的权限或拥有权
- 在目录设置Sticky 位,只有文件的所有者或root可以删除该文件
- sticky 设置在文件上无意义
- 权限设定:
- chmod o+t DIR...
- chmod o-t DIR...
- 例如:
- ls -ld /tmp
- drwxrwxrwt 12 root root 4096 Nov 2 15:44 /tmp
权限位映射
- SUID: user,占据属主的执行权限位
- s:属主拥有x权限
- S:属主没有x权限
- SGID: group,占据属组的执行权限位
- s: group拥有x权限
- S:group没有x权限
- Sticky: other,占据other的执行权限位
- t:other拥有x权限
- T:other没有x权限
设置文件特定属性
- chattr +i 不能删除,改名,更改
- chattr +a 只能追加内容
- lsattr 显示特定属性
访问控制列表
-
ACL:Access Control List,实现灵活的权限管理
-
除了文件的所有者,所属组和其它人,可以对更多的用户设置权限
-
CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
-
CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
- tune2fs –o acl /dev/sdb1
- mount –o acl /dev/sdb1 /mnt/test
-
ACL生效顺序:所有者,自定义用户,所属组|自定义组,其他人
-
为多用户或者组的文件和目录赋予访问权限rwx
- mount -o acl /directory
- getfacl file |directory
- setfacl -m u:wang:rwx file|directory
- setfacl -m g:admins:rw file| directory
- setfacl -x u:wang file |directory
- setfacl -b file1 清除所有ACL权限
- getfacl file1 | setfacl --set-file=- file2 复制file1的acl权限给file2
-
mask只影响除所有者和other的之外的人和组的最大权限
- mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限(Effective Permission)
- 用户或组的设置必须存在于mask权限设定范围内才会生效
- setfacl -m mask::rx file
-
--set选项会把原有的ACL项都删除,用新的替代,需要注意的是一定要包含
- UGO的设置,不能象-m一样只是添加ACL就可以
-
示例:
- setfacl --set u::rw,u:wang:rw,g::r,o::- file1
-
备份和恢复ACL
-
主要的文件操作命令cp和mv都支持ACL,只是cp命令需要加上-p 参数。但是
- tar等常见的备份工具是不会保留目录和文件的ACL信息
- getfacl -R /tmp/dir1 > acl.txt
- setfacl -R -b /tmp/dir1
- setfacl -R --set-file=acl.txt /tmp/dir1
- setfacl --restore acl.txt
- getfacl -R /tmp/dir1