本文最后更新于 319 天前,其中的信息可能已经过时,如有错误请发送邮件到wuxianglongblog@163.com
文件权限
一、文件权限说明
1、文件的权限主要针对三类对象进行定义
owner: 属主, u
group: 属组, g
other: 其他, o
2、每个文件针对每类访问者都定义了三种权限
r: Readable
w: Writable
x: eXcutable
3、文件:
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
4、目录:
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件元数据(须配合r),可以cd进入此目录
X:只给目录x权限,不给文件x权限
二、chown修改文件的属主和属组
修改文件的属主: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 递归
举例
3.1 改变指定文件的属组和属主
[root@localhost ~]# ll passwd
-rw-r--r--. 1 root root 2259 2月 16 13:03 passwd
[root@localhost ~]# chown host:host passwd
[root@localhost ~]# ll passwd
-rw-r--r--. 1 host host 2259 2月 16 13:03 passwd
3.2 修改指定文件的属组和属主,并显示过程
[root@localhost ~]# chown -c root:root passwd
changed ownership of "passwd" from host:host to root:root
[root@localhost ~]# ll passwd
-rw-r--r--. 1 root root 2259 2月 16 13:03 passwd
3.3 递归修改目录及以下子文件的属组和属主
[root@localhost ~]# chown -R host:host test/
3.4 显示文件修改属组的信息
[root@localhost ~]# ll passwd
-rw-r--r--. 1 root host 2259 2月 16 13:03 passwd
[root@localhost ~]# chown -v :host passwd
changed ownership of "passwd" from root:root to :host
3.5 修改属组和属主的几种写法
3.5.1 如果是修改文件的属组:直接不加前面的属主,只写冒号+属组
chown :root passwd
3.5.2 如果是修改文件的属主: 不需要再加冒号跟后面的参数
chown root passwd
3.5.3 如果文件的属组和属主都修改,那么就是一起写
chown root:root passwd
三、chmod修改文件权限
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
举例
4.1 设定文件的权限为775
[root@localhost ~]# chmod 775 anaconda-ks.cfg
[root@localhost ~]# ll anaconda-ks.cfg
-rwxrwxr-x. 1 root root 1365 2月 8 00:02 anaconda-ks.cfg
4.2 设定文件可以让任何人读取
[root@localhost ~]# chmod a=r anaconda-ks.cfg
[root@localhost ~]# ll anaconda-ks.cfg
-r--r--r--. 1 root root 1365 2月 8 00:02 anaconda-ks.cfg
4.3 设定目录及子文件的所有者可以读执行,其他无权限
[root@localhost ~]# chmod -R 500 data/
[root@localhost ~]# ll data/
总用量 0
-r-x------. 1 root root 0 2月 17 16:34 a.txt
-r-x------. 1 root host 0 2月 17 16:35 b.txt
4.4 让用户临时拥有重启系统的权限
[root@localhost ~]# which reboot
/usr/sbin/reboot
[root@localhost ~]# ll /usr/sbin/reboot
lrwxrwxrwx. 1 root root 16 2月 8 00:25 /usr/sbin/reboot -> ../bin/systemctl
[root@localhost ~]# chmod u+s !$
chmod u+s /usr/sbin/reboot
4.5 设定文件无法执行
[root@localhost ~]# chmod a-x anaconda-ks.cfg
四、umask新建文件和目录的默认权限
umask值可以用来保留在创建文件权限
新建FILE权限:
666减去umask
如果所得结果某位存在执行(奇数)权限,则将其权限+1
新建DIR权限:
777减去umask
非特权用户umask是002
root的umask是022
umask: 查看
umask#: 设定
umask 002
umask– S 模式方式显示
umask –p 输出可被调用
全局设置:/etc/bashrc
用户设置:~/.bashrc
五、chattr、lsattr设定文件特定属性
chattr命令来自于英文词组“chang attribute”的缩写,其功能是用于更改文件隐藏属性。常用的ls命令仅能能够查看到文件的一般权限、特殊权限、SELinux安全上下文与是否有FACL访问控制列表的情况,且无法查看到文件隐藏属性。
语法及常用参数和模式
语法:chattr 【参数】【模式】文件
这里语法的格式除了可以加参数,还需要加模式。
2.2 常用参数
先来讲讲参数方面有哪些比较常用到的,以表格形式列出
-R 递归处理目录下的所有文件
-v 设置文件或目录版本
-V 显示指令执行过程
2.3 命令的模式
命令的模式有以下这些内容,以表格形式呈现,即设置的权限和对应的作用
权限 作用
i #无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
x 可以直接访问压缩文件中的内容
参考实例
3.1 给文件添加无法修改的权限
可以看到文件设置了无法修改的权限后,文件不能被删除;
[root@localhost ~]# chattr +i anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
----i----------- anaconda-ks.cfg
[root@localhost ~]# rm -r anaconda-ks.cfg
rm:是否删除普通文件 "anaconda-ks.cfg"?y
rm: 无法删除"anaconda-ks.cfg": 不允许的操作
3.2 从指定文件移除隐藏属性
[root@localhost ~]# chattr -i anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
---------------- anaconda-ks.cfg
3.3 给目录添加隐藏属性,递归操作
[root@localhost ~]# chattr -R +i data/
[root@localhost ~]# lsattr data/
----i----------- data/a.txt
----i----------- data/b.txt
[root@localhost ~]# lsattr data/ -d
----i----------- data/
3.4 设置文件只能添加内容,无法覆盖
[root@localhost ~]# echo "123456" > a.txt
[root@localhost ~]# chattr +a a.txt
[root@localhost ~]# echo "123456" > a.txt
bash: a.txt: 不允许的操作
[root@localhost ~]# echo "123456" >> a.txt
[root@localhost ~]# cat a.txt
123456
123456
3.5 不再修改文件或目录的访问时间
[root@localhost ~]# chattr +A anaconda-ks.cfg
[root@localhost ~]# lsattr anaconda-ks.cfg
-------A-------- anaconda-ks.cfg
[root@localhost ~]# vim anaconda-ks.cfg
[root@localhost ~]# stat anaconda-ks.cfg
文件:"anaconda-ks.cfg"
大小:1371 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67259498 硬链接:1
权限:(0444/-r--r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2023-02-18 10:43:12.451650907 +0800
最近更改:2023-02-18 10:43:12.451650907 +0800
最近改动:2023-02-18 10:43:12.453650916 +0800
创建时间:-
[root@localhost ~]# vim anaconda-ks.cfg
[root@localhost ~]# stat anaconda-ks.cfg
文件:"anaconda-ks.cfg"
大小:1384 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:67664943 硬链接:1
权限:(0444/-r--r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:system_u:object_r:admin_home_t:s0
最近访问:2023-02-18 10:43:31.555734612 +0800
最近更改:2023-02-18 10:43:31.555734612 +0800
最近改动:2023-02-18 10:43:31.555734612 +0800
创建时间:-
[root@localhost ~]# echo "123456" > anaconda-ks.cfg
[root@localhost ~]# tail -n 1 anaconda-ks.cfg
123456
A模式的访问时间不变,但是可以修改文件的内容以及覆盖。