实验环境:Red Hat Enterprise Linux release 8.0 (Ootpa)
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限,为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
文件基本属性
主要通过两条命令修改linux的文件属性
- chown (change ownerp) : 修改所属用户与组
- chmod (change mode) : 修改用户的权限。
用图片来表示就是,通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。
通过使用ll和ls命令来显示一个文件的属性以及文件所属的用户和组 [root@server test]# ls -l 总用量 0 drwxr-xr-x. 2 root root 6 4月 24 00:36 test -rw-r--r--. 1 root root 0 4月 24 00:35 test.txt 有些文件或者文件夹为隐藏的,用ls -a查看 [root@server test]# ll -a 总用量 0 drwxr-xr-x. 3 root root 49 4月 24 01:07 . dr-xr-xr-x. 18 root root 236 4月 24 00:35 .. -rw-r--r--. 1 root root 0 4月 24 01:07 .a.test drwxr-xr-x. 2 root root 6 4月 24 00:36 test -rw-r--r--. 1 root root 0 4月 24 00:35 test.txt
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等
- 当为d时则是目录
- 当为-时则是文件
- 若是 l 则表示为链接文档(link file)
- 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置)
- 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
文件基本权限
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)(4)、 w 代表可写(write)(2)、 x 代表可执行(execute)(1)。!!!
每个文件的属性由左边第一部分的 10 个字符(0-9)来确定(如下图)。
由以上图片可以知,文件主要分为4个部分,第1个部分为文件属性,剩余则是为权限的部分
第2部分确定属主(该文件的所有者)拥有该文件的权限。
第3部分确定属组(所有者的同组用户)拥有该文件的权限。
第4部分其他用户拥有该文件的权限。
其中读,写,执行有自己代表的数字,下面更改权限时会用到
- 读=r=4
- 写=w=2
- 执行=x=1
更改文件属性
1.chgrp:更改文件属组
chgrp [-R] 属组名 文件名 # chgrp -R mysql test
将test的文件所属组改为mysql,检验;-R: 递归更改文件属组,就是在更改某个目录文件的属组时,如果加上-R的参数,那么该目录下的所有文件的属组都会更改。
[root@server test]# ll 总用量 0 drwxr-xr-x. 2 root mysql 6 4月 24 00:36 test
可看到已经改成了mysql组了
2.chown:更改文件属主,也可以同时更改文件属组
chown [–R] 属主名 文件名 chown [-R] 属主名:属组名 文件名
介绍用法,第一种单纯更改文件所属主,将test文件属主改成mysql
# chown mysql test
第二种,将文件属主改成root,同时将文件属组改成mysql
# chown root:mysql test
3.chmod:更改文件权限
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是 owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
1.用数字更改权限:
再复习下,每个权限所代表的数字:
- 读=r=4
- 写=w=2
- 执行=x=1
每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为: -rwxrwx— 分数则是:
- owner = rwx = 4+2+1 = 7
- group = rwx = 4+2+1 = 7
- others= — = 0+0+0 = 0
所以等一下我们设定权限的变更时,该文件的权限数字就是 770。
变更权限的指令 chmod 的语法是这样的:
chmod [-R] 权限代表的数字 文件或目录
例子:将test文件递归更改权限为属主为读,写,执行;属组为读,执行;其他用户为读,执行;
按照需求,属主就是4+2+1=7,属组就是4+1=5,其他用户就是4+1=5
# chmod -R 755 test
2.用符号代表权限
还有一个改变权限的方法,从之前的介绍中我们可以发现,基本上就九个权限分别是:
- user:用户
- group:组
- others:其他
- all (代表全部:user+group+others)
例子,更之前一样将test文件递归更改权限为属主为读,写,执行;属组为读,执行;其他用户为读,执行;
# chmod -R u=rwx,g=rx,o=rx test
效果跟上面数字一样,只不过代码方式改变
也可以用加减法来配置属性
如:我不想给所属组和其他用户的读权限了
# chmod g-r,o-r test
想给回去属组和其他用户读权限,用加法即可,g+r,o+r
若我想给全部人test文件都有写权限则是
# chmod a+w test
T权限位
在Linux中,如果对一个目录具有写权限,那么我们就可以在这个目录下创建删除文件。
如果要创建这样一个目录,我们每个人都可以创建自己的文件,但是别人都不能删除或者更改自己的文件。只有自己才能更改自己的东西。
则我们要用到特殊权限位:T
可以在属主,属组,其他用户开启T权限位,更具需求自行开启
例子:给test文件属主,属组,其他用户开启T权限位
[root@server test]# chmod a+t test [root@server test]# ll 总用量 0 drwx-wx-wt. 2 root mysql 6 4月 24 00:36 test
可以开到权限位置已经有个t,代表已经开启了,要去掉用减号即可,a-t
ACL权限
我们想要让某个用户不具备某个权限,直接不给他分配这个目录的相应权限就行了。那么对应到Linux系统也是这样,我们给指定的用户指定目录分配指定的权限,也就是 ACL 权限分配。
简单来说,就跟window一下图片效果一样
使用介绍
setfacl [选项] [文件名] 选项: -m 设定ACL权限 -x 删除指定的ACL权限 -b 删除所有的ACL权限 -d 设定默认ACL权限 -k 删除默认ACL权限 -R 递归设定ACL权限
- 给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
- 给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
例子,给wl用户设定acl权限只有可读
# setfacl -m u:wl:r-- test.txt
验证
# chmod 777 test.txt # su wl # vi test.txt
可看到,尽管设置了777最高权限,可是因为acl权限的关系,wl用户只有可读权限,不能修改与删除这个文件
查看已经设置的ACL权限
# getfacl test.txt
删除ACL的操作如下
删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名 例子: # setfacl -x u:wl test.txt
删除指定用户组的 ACL 权限
setfacl -x g:用户名 文件名 例子: # setfacl -x g:wl test.txt
删除文件的所有 ACL 权限
# setfacl -b test.txt
如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限:setfacl -m d:u:用户名:权限 文件名
chattr权限
在linux系统中,权限最大的是root账号,但凡修改涉及到系统本身的重大权限的操作,都需要root的权限才能操作。但是有些时候也有root干不了的事情
比如:
[root@server test]# rm -rf test.txt rm: 无法删除'test.txt': 不允许的操作
Linux chattr命令用于改变文件属性。
这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
- a:让文件或目录仅供附加用途。
- b:不更新文件或目录的最后存取时间。
- c:将文件或目录压缩后存放。
- d:将文件或目录排除在倾倒操作之外。
- i:不得任意更动文件或目录。
- s:保密性删除文件或目录。
- S:即时更新文件或目录。
- u:预防意外删除。
比如:
让某个文件只能往里面追加数据,但不能删除,适用于各种日志文件:
# chattr +a test.txt
这样子root用户都删除不了这文件,除法再通过chatter 将a参数删除
查看是否生效
[root@server test]# lsattr test.txt -----a------------ test.txt
可看出已经有a权限存在,成功。
若要删除这个文件了则是
# chattr -a test.txt # rm -rf test.txt 可以成功删除了
师兄厉害啊
哈哈哈,谢谢夸奖