基本权限和归属
Linux 系统是一种典型的多用户系统,不同的用户处于不同的地位,拥有不同的权限。
为了保护系统的安全性,Linux 系统对不同的用户访问同一文件(包括目录文件)的权限做了不同的规定。
Linux 中我们通常使用以下两个命令来修改文件或目录的所属用户与权限:
● chown (change owner) : 修改所属用户与组。
● chmod (change mode) : 修改用户的权限。
下图中通过 chown 来授权用户,通过 chmod 为用户设置可以开门的权限。
查看文件属性
在 Linux 中我们可以使用 ll 或者 ls –l 命令来显示一个文件的属性以及文件所属的用户和组:ls -l (可简写ll)或 ls -ld 数据
在 Linux 中第一个字符代表这个文件是目录、文件或链接文件等等。
● 当为 d 则是目录
● 当为 - 则是文件;
● 若是 l 则表示为链接文档(link file);表示快捷方式 /tmp #有附加权限
● 若是 b 则表示为装置文件里面的可供储存的接口设备(可随机存取装置);
● 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
接下来的字符中,以三个为一组,且均为 rwx 的三个参数的组合。其中, r 代表可读(read)、 w 代表可写(write)、 x 代表可执行(execute)。 要注意的是,这三个权限的位置不会改变,如果没有权限,就会出现减号 - 而已。
● 读取:允许查看内容-read r
● 写入:允许修改内容-write w
● 可执行:允许运行和切换-excute x
1. tips:
● 对于文本文件[rwx] :
● r读取权限:cat、less、grep、head、tail
● w写入权限:vim、> 、 >>
● x可执行权限:Shell与Python
● 对于目录[rwx] :
● r读取权限:ls命令查看目录内容
● w写入权限:能够创建、删除、修改等目录的内容
● x 执行权限:能够cd切换到此目录下(进入此目录)
每个文件的属性由左边第一部分的 10 个字符来确定(如下图)。
从左至右用 0-9 这些数字来表示。
第0 位确定文件类型,第 1-3位确定属主(该文件的所有者)拥有该文件的权限。
第4-6位确定属组(所有者的同组用户)拥有该文件的权限,第7-9位确定其他用户拥有该文件的权限。其中,第1、4、7 位表示读权限,如果用 r 字符表示,则有读权限,如果用 - 字符表示,则没有读权限;
第2、5、8 位表示写权限,如果用 w 字符表示,则有写权限,如果用 - 字符表示没有写权限;第 3、6、9 位表示可执行权限,如果用 x 字符表示,则有执行权限,如果用 -字符表示,则没有执行权限。
Linux文件属性有两种设置方法,一种是数字,一种是符号。
Linux 文件的基本权限就有九个,分别是owner/group/others(拥有者/组/其他) 三种身份各有自己的 read/write/execute 权限。
Linux中判断用户具备的权限:
1.查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止
2.查看相应身份的权限位
chown 修改归属关系
•chown命令 (change owner) : 修改所属用户与组。
–chown 属主 文件...
–chown 属主:属组 文件...
–chown :属组 文件...
-R:递归修改归属关系
修改所有者与所属组:
chown 所有者用户名称:所属组名称 /目录或文件
修改所有者:chown 所有者用户名 目录或文件
修改所属组:chown :所属组 目录或文件
递归修改归属关系:
chown -R 所有者:所属组 目录或文件
chmod更改文件9个属性
符号设置
命令格式1:chmod [ugoa] [+-=][rwx] 文件... #修改权限
归属关系[ugoa]
● 所有者(属主):拥有此文件/目录的用户-user
● 所属组(属组):拥有此文件/目录的组-group
● 其他用户:除所有者、所属组以外的用户-other
此外, a 则代表 all,即全部的身份。读写的权限可以写成 r, w, x,也就是可以使用下表的方式来看:
chmod | u g o a | +(加入) -(除去) =(直接设定) | r w x | 文件或目录 |
例如:如果我们需要将文件权限设置为 -rwxr-xr-- ,可以使用 chmod u=rwx,g=rx,o=r 文件名 来设定:
# touch test1 #创建test1文件
# ls -l test1 #查看test1默认权限
-rw-r--r--. 1 root root 0 3月 12 19:27 test1
# chmod u=rwx,g=rx,o=r test1 #修改test1权限
# ls -l test1
-rwxr-xr--. 1 root root 0 3月 12 19:27 test1
chmod a-x test1 #拿掉全部人的可执行权限
chmod u-w /nsd #所有者去掉w权限
chmod u+w /nsd #所有者加上w权限
chmod g+w /nsd #所属组加上w权限
chmod g=r /nsd #所属组重新定义权限
chmod a=rwx /nsd #a表示所有人都有对该目录rwx权限
命令格式2:
chmod -R[ugoa] [+-=][rwx] 文件... #递归修改权限
1. [root@localhost ~]# mkdir -p /opt/aa/bb/cc
2. [root@localhost ~]# chmod -R o=--- /opt/aa #所有者设为没有可执行权限
3. [root@localhost ~]# ls -ld /opt/aa
4. [root@localhost ~]# ls -ld /opt/aa/bb
5. [root@localhost ~]# ls -ld /opt/aa/bb/cc
chown -R lisi:tmooc /opt/aa #递归修改所有者为lisi,所属组为tmooc
数字设置权限
• 权限位的8进制数表示,各权限的分数对照表如下:
● r:4 ● w:2 ● x:1
数字类型 | 权限 | rwx |
7 | 读 + 写 + 执行 | rwx |
6 | 读 + 写 | rw- |
5 | 读 + 执行 | r-x |
4 | 只读 | r-- |
3 | 写 + 执行 | -wx |
2 | 只写 | -w- |
1 | 只执行 | --x |
0 | 无 |
每种身份(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 xyz 文件或目录选项与参数
chmod [-R] xyz 文件或目录选项与参数
● xyz: 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
● -R: 进行递归(recursive)的持续变更,以及连同次目录下的所有文件都会变更
ps:chmod 700 /目录 #修改目录权限
ls -ld /目录 #查看目录权限
附加权限
附加权限数字表示:
● 利用数字4表示suid
● 利用数字2表示sgid
● 利用数字1表示t
● 粘滞位,Sticky Bit 权限
Sticky权限是Linux特殊权限的一种,主要用来对公共目录的w权限进行限制。
注意事项:适用于目录,用来限制用户滥用写入权、其他人必须具备可执行权限、显示占用的是其他人的x位置。
–占用其他人(Other)的 x 位 x-可执行
–显示为 t 或 T,取决于其他人是否有 x 权限
–适用于目录,用来限制用户滥用写入权
–在设置了t权限的目录下,即使用户有写入权限,也不能删除或改名其他用户文档
tips:chmod o+t 目录 #限制用户权限
● Set GID权限(SGID权限)
SGID是Linux特殊权限的一种,其作用主要体现如下:
1) 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份。
注意事项:对可执行的程序/目录有效、可执行程序所属组必须具备可执行权限、显示占用的是所属组的x位置。
–占用属组(Group)的 x 位
–显示为 s 或 S,取决于属组是否有 x 权限
s表示原先有x执行权限,S表示原先没有
–对目录有效
–在一个具有SGID权限的目录下,新建的文档会自动继承父目录的属组身份
chown :tmooc /nsd18 #修改所属组
ls -ld /nsd18
chmod g+s /nsd18 #赋予SGID特殊权限
mkdir /nsd18/abc01 #在/nsd18下新建目录
ls -ld /路径/目录/子目录 #文件文档与父目录同属组
● 附加权限Set UID(SUID)权限(了解)
占用属主(User)的 x 位
显示为 s 或 S,取决于属主是否有 x 权限
s表示原先有x执行权限,S表示原先没有
tips: chmod u+s /usr/bin/hahadir
仅对可执行的程序有意义
当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限
tips:mkdir -m 700 /opt/cbd03 #创建目录时,指定目录的权限
umask值 文件/目录的默认权限
需要记住并理解umask值的作用,它决定着这个Shell环境创建文件以及目录的默认权限。
• 新建文件/目录的默认权限
– 一般文件默认均不给 x 执行权限
– 其他取决于 umask(权限掩码) 设置
– 新建目录默认权限为755 ,777-umask值后三位
– 新建文件默认权限为644 ,666-umask值后三位
umask #查看umask
umask -s #显示新建目录的默认权限
mkdir -m 777 /nsd26 #-m无视umask值创建数据指定数据的权限
ls -ld /nsd26 #查看权限
ACL策略管理setfacl
•文档归属的局限性:
–任何人只属于三种角色:属主、属组、其他人
–针对特殊的人实现更精细的控制
ACL 权限可以针对节点设置相关读写等权限,保障数据安全性。
ACL策略应用的情况是,当所有者、所属组、其他人三个归属关系,三种身份的权限都不能满足某个用户或组的权限设置。这个时候ACL可以为这个用户或组单独设置权限,使Linux权限划分设置更加灵活。
permissions 可以指定不同的权限范围及角色。
•acl访问策略作用:
–能够对个别用户、个别组设置独立的权限
Linux中判断用户具备的权限:
1.首先查看该用户或者组是否有ACL策略
2.查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止
3.查看相应身份的权限位
getfacl 文件或目录 #查看文件ACL策略
•setfacl命令
–格式:
setfacl [选项] u:用户名:权限文件... #修改文件用户acl策略
setfacl [选项] g:组名:权限 文件... #修改文件组acl策略
•常用命令选项
-m:修改ACL策略
-x:清除指定的ACL策略
-b:清除所有已设置的ACL策略
-R:递归设置ACL策略
setfacl -m u:用户名:权限rwx 文件或目录 #单独修改赋予用户权限
setfacl -x u:用户名 文件或目录 #删除文档中指定用户ACL权限
setfacl -b 文件或目录 #清除目录所有用户ACL策略
setfacl -m u:需拉黑用户名:--- 文件或目录 #ACL策略-黑名单的使用(单独拒绝某些用户,将权限设置为---)
setfacl -Rm u:用户名:权限rwx /路径/文件或目录 #-R:递归设置ACL策略
文档权限常用命令
1. ls -ld /路径/目录 #查看文件权限及归属关系
2. chgrp [-R] 属组名 文件名 #递归更改文件属组
3. chown [–R] 所有者 文件名 #更改文件所有者(owner)
4. chown [-R] 所有者:属组名 文件或目录名 #同时更改文件所有者和文件所属组
5. chmod [-R] xyz(r4w2x1) 文件或目录 #使用属性数值变更文件权限
6. chmod [-R] [-ugoa] [+-=] [rwx] 文件或目录 #使用符号类型改变文件权限
7. getfacl 文件或目录 #查看文件ACL策略(优先级较高)
8. setfacl [选项] u:组名:权限 文件... 选项:m、x、b、R
9. setfacl [选项] g:组名:权限 文件... #修改文件组acl策略
10. setfacl -m u:用户名:权限rwx 文件或目录 #更改文件访问控制列表策略,u为单独修改赋予用户权限
11. setfacl -x u:用户名 文件或目录 #删除文档中指定用户ACL权限
12. setfacl -b 文件或目录 #清除目录所有用户已设置的ACL策略
13. setfacl -m u:需拉黑用户名:--- 文件或目录 #ACL策略-黑名单的使用(单独拒绝某些用户,将权限设置为---)
14. setfacl -Rm u:用户名:权限rwx /路径/文件或目录 #-R:递归设置ACL策略
15. umask #查看当前umask值,需用最大权限777减去022 即当前权限
16. umask –S #另外一种查看方式,-S选项是直接显示wrx默认权限
17. chmod u+s/bin/mymd1 #添加SUID权限,继承属主及权限
18. chmod g+s /nsdpublic/ #为nsdpublic添加SGID权限,继承所属组
19. chmod o+t 目录 #限制用户滥用写入权(Sticky权限)
20. lsattr /etc/passwd # 查看文件的特殊属性
# 扩展命令:修改文件属性
21. chattr +i 文件 # 修改属性,不允许对文件做任何操作,只能看
22. chattr -i 文件 # 去除文件i属性
23. chattr +a 文件 # 文件只允许追加
24. chattr -a 文件 # 去除文件a属性