Linux权限管理
简介
在Linux多用户系统的管理中,权限是指某个特定的用户具有特定的系统资源使用权力.
权限身份类别
- user
- U ,文件的所有者,默认为文档的创建者.
- group
- G,文件所属组的用户,默认是创建文件的用户的主组.
- other
- O,既不是文件的创建者,也不在文件属组里的用户,称为其他用户.
- root
- 超级管理员,在所有用户中它拥有最大的权限,可以管理普通用户.设置文档权限时无需考虑root用户.
注意 : 除了ugo以外还有一个字母a(all users)表示所有用户,包含ugo.
ugo身份各自对应 read读 write写 execute执行 权限.
文件权限详解
普通文件权限
chmod 设置权限
-R : 递归设置权限. 用来设置文件夹权限.
语法 : chmod [选项] 权限信息 文档路径
字母设置形式
字母 | 选项 | 作用 |
---|---|---|
u(谁) | user | 文件拥有者 |
g(谁) | group | 与拥有者同组的组内用户 |
o(谁) | other | 其他用户 |
a(谁) | all | 所有人(包含ugo) |
+(作用) | 加 | 增加作用 |
-(作用) | 减 | 移除作用 |
=(作用) | 等于 | 赋值作用 |
r(权限) | read | 可读权限 |
w(权限) | write | 可写权限 |
x(权限) | execute | 可执行权限 |
-(权限) | - | 没有任何权限 |
示例 :
chmod u=rwx , g=rwx ,o=r ./ word.txt //给当前文件夹下的word.txt文件的用户u和用户组g设置读,写,执行权限.给其他用户o设置可读权限.
chmod u+x , g-r ,o=- ./word.txt //给当前文件夹下的word.txt文件的用户u增加执行权限,用户组删除读取权限,其他用户清除权限.
注意 :
- 如果ug权限相同时可以简写 ug=rwx .
- 设置权限时如果不指定用户默认应用所有用户.
- 设置多个身份时,多个身份之间需要用英文逗号分开.
数字设置形式
含义 : read = 4 write = 2 execute = 1
数字 | 权限 | 作用 |
---|---|---|
0 | - | 不能读,不能写,不能执行 |
1 | execute | 不能读,不能写,可执行 |
2 | write | 不能读,可写,不能执行 |
3 | 2+1 | 不能读,可写,可执行 |
4 | read | 可读,不能写,不能执行 |
5 | 4+1 | 可读,不能写,可执行 |
6 | 4+2 | 可读,可写,不能执行 |
7 | 4+2+1 | 可读,可写,可执行 |
示例 :
chmod -R 741 /test //给/test文件夹设置权限 用户u 读 写 执行 用户组 读 其他 执行.
注意 ;
1.权限设定时应注意不要设置 2,3 的权限数字,一般都是有问题的. 写入和执行应配合读取权限一起使用.
2.如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写和执行权限,有才可以删除.
特殊权限
设置位S
SetUID : 针对可执行文件有效 chmod u+s ./test
-rwsr-xr-x. //原本表示文件所有者权限中的 x 权限位,却出现了 s 权限,此种权限通常称为 SetUID,简称 SUID 特殊权限。SUID 特殊权限仅适用于可执行文件,所具有的功能是,只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
SetGID : 针对可执行文件有效 chmod g+s ./test
-rwxr-sr-x. //原本表示文件所属组权限中的 x 权限位,却出现了 s 权限, 此种权限通常称为 SetGID,只要用户对设有 SGID 的文件有执行权限,那么当用户执行此文件时,会以文件所属组的身份去执行此文件,一旦文件执行结束,身份的切换也随之消失。
SGID 和 SUID 的不同之处就在于,SUID 赋予用户的是文件所有者的权限,而 SGID 赋予用户的是文件所属组的权限.
粘贴位T
SetBIT : 针对目录有效 Sticky BIT,简称 SBIT 特殊权限,可意为粘着位、粘滞位、防删除位等。
d rwx rwx rwt //SBIT 权限仅对目录有效,一旦目录设定了 SBIT 权限,则用户在此目录下创建的文件或目录,就只有自己和 root 才有权利修改或删除该文件.用户只能操作自己创建的文件或目录,而无法修改甚至删除其他用户创建的文件或目录
示例:
/usr/bin/passwd在执行修改密码任务时会修改/etc/passwd和/etc/shadow等文件.这些文件除了root外其他用户都没有写权限,通过加s权限让普通用户能够修改密码.
chmod u-s /usr/bin/passwd //取消s权限普通用户不能修改密码
chmod u+s /usr/bin/passwd //添加s权限普通用户能够修改密码
chmod 0755 /usr/bin/passwd //前置位0代表清除任何特殊权限.
注意:
1.which命令可以查看二进制执行文件所在位置.
2.s权限只能应用在二进制可执行文件上.
设置位参数
数字 | 权限 | 作用 |
0 | --- | 无任何权限 |
1 | --t | SetBIT粘贴位,针对公共目录,只有root和文件的创建者可以删除文件,其他人只能自己管理自己。设置方式:o+t 或 o-t 或 1xxx |
2 | -s- | SetGID强制位,针对目录,任何在该目录里创建的任何文件的属组都继承了该目录的属组。设置方式:g+s 或 g-s 或 2xxx |
3 | -st | SetGID , SetBIT 两个选项的组合. g-s , o-t 取消 |
4 | s-- | SetUID冒险位,针对二进制文件,用户临时拥有文件拥有者的权限。设置方式:u+s 或 u-s 或 4xxx |
5 | s-t | SetUID , SetBIT 两个选项的组合. u-s , o-t 取消 |
6 | ss- | SetUID , SetGID 两个选项的组合. u-s ,g-s 取消 |
7 | sst | SetUID , SetGID , SetBIT 三个选项的组合. u-s ,g-s ,o-t 取消 |
修改文件或目录的隐藏属性(chattr命令)
chattr 专门用来修改文件或目录的隐藏属性,//只有 root 用户可以使用.
[root@localhost ~]# chattr [+-=] [属性] 文件或目录名 //+ 表示给文件或目录添加属性,- 表示移除文件或目录拥有的某些属性,= 表示给文件或目录设定一些属性。
属性选项 | 功能 |
i |
如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据; |
a |
如果对文件设置 a 属性,那么只能在文件中増加数据,但是不能删除和修改数据; |
u | 设置此属性的文件或目录,在删除时,其内容会被保存,以保证后期能够恢复,常用来防止意外删除文件或目录。 |
s | 和 u 相反,删除文件或目录时,会被彻底删除(直接从硬盘上删除,然后用 0 填充所占用的区域),不可恢复。 |
【例 1】为文件赋予i属性.
//设置有 i 属性的文件,即便是 root 用户,也无法删除和修改数据。
[root@localhost ~]# touch ftest #建立测试文件 [root@localhost ~]# chattr +i ftest [root@localhost ~]# rm -rf ftest rm:cannot remove 'ftest':Operation not permitted #无法删除"ftesr",操作不允许 #被赋予i属性后,root不能删除 [root@localhost ~]# echo 111>>ftest bash:ftest:Permission denied #权限不够,不能修改文件中的数据
【例 2】为目录赋予 i 属性。
//设置有 i 属性的目录,即便是 root 用户,也无法在目录内部新建或删除文件,但可以修改文件内容。
[root@localhost ~]# mkdir dtest #建立测试目录 [root@localhost dtest]# touch dtest/abc #再建立一个测试文件abc [root@localhost ~]# chattr +i dtest #给目录赋予i属性 [root@localhost ~]# cd dtest [root@localhost dtest]# touch bed touch: cannot touch 'bed':Permission denied #无法创建"bcd",权限不够,dtest目录不能新建文件 [root@localhost dtest]# echo 11>>abc [root@localhost dtest]# cat abc 11 #可以修改文件内容 [root@localhost dtest]# rm -rf abc rm: cannot remove 'abc': Permission denied #无法删除"abc",权限不够
给设置有 i 属性的文件删除此属性也很简单,只需将 chattr 命令中 + 改为 - 即可。
【例 3】演示 a 属性的作用。
假设有这样一种应用,我们每天自动实现把服务器的日志备份到指定目录,备份目录可设置 a 属性,变为只可创建文件而不可删除。可以修改但是因为不能删除的原因会产生很多缓存文件.
命令如下:
[root@localhost ~]# mkdir -p /back/log #建立备份目录 [root@localhost ~]# chattr +a /back/log #赋予a属性 [root@localhost ~]# cp /var/log/messages /back/log #可以复制文件和新建文件到指定目录中 [root@localhost ~]# rm -rf /back/log/messages rm: cannot remove '/back/log/messages': Permission denied #无法删除 /back/log/messages,操作不允许
lsattr 用于显示文件或目录的隐藏属性 //只有 root 用户可以使用.
[root@localhost ~]# lsattr [选项] 文件或目录名
选项 | 功能 |
-a | 后面不带文件或目录名,表示显示所有文件和目录(包括隐藏文件和目录) |
-d | 如果目标是目录,只会列出目录本身的隐藏属性,而不会列出所含文件或子目录的隐藏属性信息; |
-R | 和 -d 恰好相反,作用于目录时,会连同子目录的隐藏信息数据也一并显示出来。 |
【例 1】仅显示文件的隐藏信息
[root@localhost ~]# touch attrtest -----------e- attrtest [root@localhost ~]# chattr +aij attrtest [root@localhost ~]# lsattr attrtest ----ia---j-e- attrtest
【例 2】不带目录名称,表示显示所有文件和目录属性,包括隐藏文件和目录.
[root@localhost ~]#lsattr -a -----------e- ./. ------------- ./.. -----------e- ./.gconfd -----------e- ./.bashrc ...
【例 3】仅显示目录的隐藏信息
[root@localhost ~]#lsattr -d /back/log -----a------e- /back/log #查看/back/log目录,其拥有a和e属性
注意:
通常情况下,不要使用 chattr 命令修改 /、/dev/、/tmp/、/var/ 等目录的隐藏属性,很容易导致系统无法启动。另外,chatrr 命令常与 lsattr 命令合用,前者修改文件或目录的隐藏属性,后者用于查看是否修改成功
ACL访问控制
getfacl 查看文件的CAL策略及权限.
setfacl 给文件针对某个用户或者某个组来增加ACL策略.
-m 修改acl策略
-x 去掉某个用户或者某个组的权限
-b 删除所有的acl策略
-R 递归操作子目录
mask 定义除other和拥有者外的最大权限
示例:
setfacl -m u:test:rwx ./file.txt //file文件增加test用户的rwx权限
setfacl -m g:test:rwx ./file.txt //file文件增加test用户组rwx权限.
setfacl -x u:test:rwx ./file.txt //删除file文件test用户的rwx权限
setfacl -x g:test:rwx ./file.txt //删除file文件test用户组rwx权限.
setfacl -b ./file.txt //删除所有acl策略
文件属主属组设置
chown 修改所属主
-R 递归修改文件夹所属主
示例:
chown mysql ./test.txt //修改test文件所属主
chgrp 修改所属组
-R 递归修改文件夹所属组
示例:
chgrp -R mysql ./shop //递归修改shop文件夹所属组
chown 同时修改属主和属组
chown root:root ./test.txt //同时修改test文件的属主和属组
注意: 一般来说,chown这个指令只由root有权限使用.