前言:
文件、目录权限说明
修改文件属性和权限
隐藏权限(如设置不可删除,root也不能删除)
特殊权限 facl(简单说明)
注:“这个”好像对md引用大量代码块,显示会有问题,引用的图床图片 大小缩放 也有点问题
所以,看的排版、或代码块有问题看的不舒服;
可以去 更新相同文章的 csdn查看 或 自搭博客
csdn 点击跳转
自搭博客跳转_1(github+hexo)或跳转_2(apche+hexo)
导图
基本权限
文件:
-
r
可读,可以使用类似cat等命令查看文件内容;
r单独存在,可查看文件内容 -
w
可写,可以编辑或删除此文件;
w单独存在,看不到文件内容,但是可以强制修改文件内容,会覆盖原文件内容,单独存在,意义不大 - x
可执行,executable,可以命令提示符下当作命令提交给内核运行;
x单独存在,毫无意义
目录:
-
r
可以对此目录执行ls以列出内部的所有文件;
只有r权限时,可以读(有报错),不能写,也不能进入目录 -
w
可以在此目录创建、修改、删除文件;
只有w权限时,毫无意义 -
x
可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;
只有x权限时,只能进入,不能读,不能写 -
rw
可以查看内容,不可以进入目录,不能删除目录或它里面的文件 -
rx
可以查看内容,可以进入目录,不可以修改目录的内容 - wx
不可以查看目录内容,可以进入目录,可以删除
查看文件的权限
]# ls -ld test.txt
-rw-r--r-- 1 root root 4 2月 3 18:25 test.txt
- 权限针对的三类用户:
- | - | - |
---|---|---|
u | user | 属主 |
g | group | 属组 |
o | other | 其它用户 |
]# ls -ld test.txt
-rw-r--r-- 1 root root 4 2月 3 18:25 test.txt
第一栏
这个文件的类型与权限
第一个字符代表这个文件是“目录、文件或链接文件等等”:
[d]是目录
[-]是文件
[l]为链接文件(link file)
[b]为设备文件里面的可供储存的周边设备(可随机存取设备)
[c]则表示为设备文件里面的序列埠设备,例如键盘、鼠标(一次性读取设备)
eg:“-rwxr-xr--”意义
这个文件是类型是“文件”
所有者:可读、可写、可执行(rwx)
所属组:本例中为可读可执行(rx)
其他人:只读
第二栏表示有多少文件名链接到此节点
每个文件都会将他的权限与属性记录到文件系统的i-node中,
不过,我们使用的目录树却是使用文件名来记录,
因此每个文件名就会链接到一个inode
这个属性记录的,就是有多少不同的文件名链接到相同的一个inode号码
第三栏表示这个文件(或目录)的“拥有者账号”
第四栏表示这个文件的所属群组
第五栏表示这个文件的容量大小,默认单位是Bytes(字节)
1KB(Kilobyte 千字节)=1024B,
1MB (Megabyte 兆字节 简称“兆”)=1024KB,
1GB (Gigabyte 吉字节 又称“千兆”)=1024MB,
1TB(Trillionbyte 万亿字节 太字节)=1024GB。 PB
注意:Byte是“字节数”,bit是“位数”,在计算机中每八位为一字节,
也就是1 Byte=8 bit,是1:8的对应关系。道因此在书写单位时一定要注意B字母的大小写和含义。
第六栏表示这个文件的创建日期或者是最近修改日期。
如果这个文件被修改的时间距离现在太久了,那么时间部分会仅显示年份而已。
第七栏为这个文件的文件名
修改文件的属性和权限
chgrp :改变文件所属群组
chown :改变文件拥有者
chmod :改变文件的权限, SUID, SGID, SBIT等等的特性
-
改变文件的拥有者;将test.txt文件的拥有者改为test用户
# chown test test.txt
-
将文件的小组改为test
# chown :test test.txt
-
用chown同时改变拥有者和所属组
# chown test:test test.txt
- 修改文件权限
]# ll test.txt
-rw-r--r-- 1 root root 0 Feb 9 16:39 test.txt
]# chmod u+x test.txt
]# ll test.txt
-rwxr--r-- 1 root root 0 Feb 9 16:39 test.txt
]# chmod g-r test.txt
]# ll test.txt
-rwx---r-- 1 root root 0 Feb 9 16:39 test.txt
]# chmod o+wx test.txt
]# ll test.txt
-rwx---rwx 1 root root 0 Feb 9 16:39 test.txt
更改权限方面也可以使用数字来代表权限 r:4 w:2 x:1
]# ll test.txt
-rw-r--r-- 1 root root 0 Feb 9 16:39 test.txt
]# stat -c '%n %a' test.txt
test.txt 644
]# chmod 755 test.txt
]# ll test.txt
-rwxr-xr-x 1 root root 0 Feb 9 16:39 test.txt
]# stat -c '%n %a' test.txt
test.txt 755
隐藏权限
除了基本r, w, x权限外,
在Linux传统的Ext2/Ext3/Ext4文件系统下,
我们还可以设置其他的系统隐藏属性。这部分可使用 chattr 来设置,而以lsattr 来查看,
最重要的属性就是可以设置其不可修改的特性!让连文件的拥有者都不能进行修改!
这个属性可是相当重要的,尤其是在安全机制上面(security)!
但是 xfs 就没有支持所有的 chattr 的参数了!仅有部份参数还有支持而已!
默认权限
umask
指定在建立文件时预设的权限掩码
(目前使用者在创建文件或目录时候的权限默认值)
]# umask
0022
]# umask -S
u=rwx,g=rx,o=rx
创建文件时:(-rw-rw-rw-) - (-----w--w-) ==> -rw-r--r-- -->644
创建目录时:(drwxrwxrwx) - (d----w--w-) ==> drwxr-xr-x ---->755
隐藏权限
查看文件的隐藏权限
]# lsattr test.txt
---------------- test.txt更改文件的隐藏权限
-
语法
chattr <选项> <参数>
- 选项
选项 | 描述 |
---|---|
a | 让文件或目录仅供附加用途 |
b | 不更新文件或目录的最后存取时间 |
c | 将文件或目录压缩后存放 |
d | 将文件或目录排除在倾倒操作之外 |
i | 不得任意更动文件或目录 |
s | 保密性删除文件或目录 |
S | 即时更新文件或目录 |
u | 预防意外删除 |
- 设置一个文件不能删除、重命名、修改,只能查看
]# chattr +i test.txt
]# lsattr test.txt
----i----------- test.txt
//删除
]# rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
//重命名
]# mv test.txt test1.txt
mv: cannot move ‘test.txt’ to ‘test1.txt’: Operation not permitted
//修改
]# echo add >> test.txt
-bash: test.txt: Permission denied
- 设置一个文件内容只能追加,不能覆盖。
]# cat test.txt
test1
]# chattr +a test.txt
]# lsattr test.txt
-----a---------- test.txt
//追加
]# echo test2 >> test.txt
]# cat test.txt
test1
test2
]# echo test3 > test.txt
-bash: test.txt: Operation not permitted
//删除
]# rm -rf test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
特殊权限和Facl
SUID:
运行某程序时,相应进程的属主是程序文件自身的属主,
而不是用户本身,只对二进制程序有效;
执行者对于程序需要有 <kbd>x</kbd> 权限;
- 详细 略
SGID:
对于文件:
运行某程序时,相应进程的属组是程序文件自身的属组,而不是用户本身的基本组对于目录:
用户对此目录有rx权限可以进入目录
用户进入此目录后,有效用户组会变成该目录的用户组
若用户在此目录有w权限,则用户创建的文件用户组与该目录用户组相同
- 详细 略
Sticky (BIT):
只针对目录有效,当用户对目录拥有wx权限时,
用户在该目录创建的文件或目录,只有自己与root才可以删除在一个公共目录,每个人都可以创建文件,删除自己的文件,但是不能删除别人的文件
- 详细 略
FACL
文件系统访问控制列表
FACL:filesystem access control list
利用文件的扩展属性,保存了额外的访问控制权限getfacl 查看
setfacl 设置
- 语法
setfacl [-bkRd] [-m|-x acl 参数] 目标文件名
选项 | 描述 |
---|---|
-m | 设置后续的acl参数,不可与-x一起使用 |
-x | 删除后续的acl参数,不可与-m一起使用 |
-b | 删除所有的acl参数 |
-k | 删除默认的acl参数 |
-R | 递归设置acl参数 |
-d | 设置默认acl参数,只对目录有效 |
eg:
用户userA 对 “/test/abc.txt” 文件有读和写的权限;
用户userB对 “/test/abc” 文件没有任何权限;
其他人只有读的权限
[root@yun test]# touch test_archives_1.txt
[root@yun test]# getfacl test_archives_1.txt
file: test_archives_1.txt
owner: root
group: root
user::rw-
group::r--
other::r--
[root@yun test]# useradd user1
[root@yun test]# useradd user2
[root@yun test]# echo 123 | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@yun test]# echo 123 | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.
//user1用户可读可写
[root@yun test]# setfacl -m u:user1:rw- test_archives_1.txt
//user2没有任何权限
[root@yun test]# setfacl -m u:user2:--- test_archives_1.txt
[root@yun test]# getfacl test_archives_1.txt
file: test_archives_1.txt
owner: root
group: root
user::rw-
user:user1:rw-
user:user2:---
group::r--
mask::rw-
other::r--
//验证user1有可读可写,user2没有任何权限
[root@yun test]# su user1
[user1@yun test]$ echo "user1-add" > test_archives_1.txt
[user1@yun test]$ cat test_archives_1.txt
user1-add
[user1@yun test]$ su user2
Password:
[user2@yun test]$ echo "user2-add" > test_archives_1.txt
bash: test_archives_1.txt: Permission denied
[user2@yun test]$ cat test_archives_1.txt
cat: test_archives_1.txt: Permission denied