Linux基础-(文件权限)
stat 文件名 用于显示文件时间和 inode 内容,inode相关的知识会在后面的磁盘管理章节详细讲解,这边主要来看文件的时间
[root@rhel8-server sch]# stat 123.txt
File: 123.txt
Size: 10 Blocks: 8 IO Block: 4096 regular file
Device: fd00h/64768d Inode: 35350365 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2022-01-23 05:49:36.508028685 -0500
Modify: 2022-01-23 05:42:04.540686236 -0500
Change: 2022-01-23 05:42:04.544679714 -0500
Birth: -
* Access:访问时间,也叫atime
* 当文件被访问的时候,这个时间就会发生改变
* Linux文件运行的时候查看文件又频繁数量又大,如果每次atime发生变化的时候都记入硬盘,或造成很大的压力。RHEL6开始relatime,atime延迟修改,必须满足其中一个条件:
* 自上次atime修改后,已达到86400秒
* 发生写操作时
* Modify:修改时间,也叫mtime
* 当文件内容发生变化的时候,这个时间就会发生改变
* Change:改变时间,也叫ctime
* 当文件状态被改变的时候,这个时间就会发生修改
文件权限设置:可以赋予某个用户或组,能够以何种方式,访问某个文件
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
-rw-r--r--. 1 root root 19 Dec 11 14:10 12345.txt
- rw-r--r-- 1 root root 9 Jul 16 13:09 1234.txt
文件类型 权限 连接数 属主 属组 大小 创建时间 文件名
文件类型: - 普通文件 d 目录
每一个文件都会有uid gid 属主 属组
同时这个文件运行时也会带上uid gid 其实就是这个属主ID 属组ID
访问任何一个文件 我们都有权限规定
每个文件 都有3个对象 对三个对象赋予不同权限
1.属主
2.属组
3.其他人
每个文件 都有三个权限 : r 可读 w 可写 x 可执行
某脚本123.txt 属主 root 属组 root
对root而言 某脚本A这个文件可读可写可以执行
对root这个组而言 某脚本A这个文件 只可以看和编写不能执行
对其他人而言 某脚本A这个文件 只可以看
于是这个文件的权限: rwxrw-r--
三个对象: 属主 属组 其他人
rwx rw- r--
数字表述: 7 6 4
在linux当中 权限可以用数字表示
r=4 w=2 x=1 每个对象需要相加
所以:rw-r--r-- 用数字表示: 644
chmod 修改权限 可以一次性对三个对象 三个权限全都修改
chmod 755 123.txt 属主可读可写可执行 属组 可读可执行 其他人 可读可执行
chmod u-x,g-w,o-r 123.txt 属主拿掉执行权限 属组拿掉可写权限 其他人 拿掉可读权限
chown 设置文件的属主和属组
chown redhat 1234.txt 修改属主为redhat
chown :redhat 1234.txt 修改属组为redhat
chown root:root 1234.txt 修改属主 属组都是root
chgrp 单独修改属组
chgrp redhat 1234.txt 修改属组为redhat
setfacl可以单独针对某个用户设置权限
setfacl -m u:rheladmin:rwx 1234.txt
-m 是modify的意思
如何查看 getfacl
mask有效权限
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。
setfacl -m m::rw 1234.txt 修改mask最大权限 (对属主不生效的)
[root@rhel-server1 wh]# getfacl 1234.txt
# file: 1234.txt
# owner: root
# group: redhat
user::rw-
user:rheladmin:rwx #effective:rw-
group::r--
mask::rw-
other::r--
特殊权限:
SUID: chmod u+s 当一个文件被设置了SUID(会在该文件所有者的执行为直接变成s)
这样任何人执行这个文件,会直接获取属主的权限。
SGID: chmod g+s 当一个目录被设置了SGID后 ,任何人在这个目录中创建的文件,都属于这个目录所有者,不能对文件设置其他属主
SBIT: chmod o+t 假设这个目录里面对象是其他人 针对其他人一旦被打上T这个值
那么这个目录中其他用户创建的任何文件,只有文件所有者才能删除
SUID=4
SGID=2
SBIT=1
删除特殊权限 chmod u-s chmod g-s chmod o-t
UMASK
umask命令指定在建立文件时预设的权限掩码,进程 新建文件、目录的默认权限会收到umask的影响,umask表示要减掉得到权限。
umask可用来设定[权限掩码]。[权限掩码]是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。
[root@rhel-server1 wh]# umask
0022
权限需要通过777减去umask值就可以得到 所以得到 777-022=755
执行权限是不可以默认存在的 755-111=644
umask是系统文件,每次开机会自动读取 /etc/profile 来读取当中的umask
临时修改umask数值 umask 0000 此时 默认创建文件时 权限变成了777 因为执行权限默认不能存在 所以 此时文件权限为666
[root@rhel-server1 wh]# umask 0000
[root@rhel-server1 wh]# touch 444444
此时:ls -l显示
-rw-rw-rw-. 1 root root 0 Dec 11 16:02 444444cd
2.永久修改umask数值 要编辑配置文件 用shell编程写入
vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 000
fi
保存退出 这样root的umask永久修改成了000
source /etc/profile 立即在当前shell中生效 调取source文件
3、永久修改单个用户 非root的umask值
首先要知道这个用户的uid 例如 1002
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
if [ $UID -eq 1002 ]; then
umask 000
fi
保存退出后
切换用户su - rheladmin
source /etc/profile 触发source文件
这样一来 用户rheladmin就永久修改umask为000了
chattr
修改文件属性
chattr命令用于改变文件属性。
这项指令可改变存放在文件或目录属性,这些属性共有以下8种模式:
选项: + 来增加标签
a:让文件或目录仅供附加用途
b:不更新文件或目录的最后存取时间
c:将文件或目录压缩后存放
d:将文件或目录排除在倾倒操作之外
i:不得任意更动文件或目录
s:保密性删除文件或目录
S:即时更新文件或目录
u:预防意外删除
实例1: 用chattr 防止系统中某个关键文件被修改
chattr +i 6666.txt
lsattr 6666.txt 查看目前被打的标签
接下来尝试修改 会发现完全不能动
chattr -i 123.txt 取消标签
实例2 : 让某个文件只能往里面追加内容,但是不能删除历史内容,适用于企业服务器日志
chattr +a /var/log/messages
lsattr /var/log/messages
-----a------------ /var/log/messages
vi /var/log/messages 无法编辑
echo 123123 >> /var/log/messages 成功了
最后在最后一行 找到了 123123 说明该文件只能在最后追加内容

浙公网安备 33010602011771号