本篇主要讲述:
文件和目录的基本权限;
设置基本权限(chmod,chown,chgrp);
附加权限;
1、基本权限
(1)访问方式(权限)
读取:允许查看内容-read r
写入:允许修改内容-write w
可执行:允许运行和切换-execute x
(2)使用者与群组
权限适用对象(归属)
所有者:拥有此文件/目录的用户-user u
所属组:拥有此文件/目录的组-group g
其他用户:除所有者、所属组以外的用户-other o
(3)使用 ls -ld 命令
ls -ld 文件或目录 #查看文件或者目录自身的属性
第一栏代表这个文件的类型与权限;
其中第一个字符
以 - 开头:文本文件
以 d 开头:目录
以 l 开头:快捷方式
接下来的字符中,以三个为一组
第一组为“文件拥有者可具备的权限”
第二组为“加入此群组之帐号的权限”
第三组为“非本人且没有加入本群组之其他帐号的权限”
第二栏表示有多少文件名链接到此节点(i-node)
第三栏表示这个文件(或目录) 的“拥有者帐号”
第四栏表示这个文件的所属群组
第五栏为这个文件的容量大小,默认单位为Bytes
第六栏为这个文件的创建日期或者是最近的修改日期
第七栏为这个文件的文件名
2、设置基本权限
2.1 使用 chmod 命令
chmod [-R] 归属关系 -=权限类别 文档...
更改权限的方法:
第一种:以数字的形式
r:4 w:2 x:1
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# ls -ld /nsd01/
drwxr-xr-x. 2 root root 6 11月 24 20:16 /nsd01/
[root@server0 ~]# chmod 777 /nsd01/
[root@server0 ~]# ls -ld /nsd01/
drwxrwxrwx. 2 root root 6 11月 24 20:16 /nsd01/
第二种:符号类型
user=u ; group=g; other=o ; all=a
[root@server0 ~]# chmod u=rwx,g=rw,o=--- /nsd01/
[root@server0 ~]# ls -ld /nsd01/
drwxrw----. 2 root root 6 11月 24 20:16 /nsd01
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# chmod g w /nsd01
[root@server0 ~]# chmod u-w /nsd01
[root@server0 ~]# chmod o=rwx /nsd01
[root@server0 ~]# chmod u=rwx,g=rx,o=--- /nsd01
临时切换用户身份:
[root@server0 ~]# su - zhangsan
(不能将 - 去掉,代表所处的环境也切到另一个用户上去了)
目录的 r 权限:能够 ls 浏览此目录内容
目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作
目录的 x 权限:能够 cd 切换到此目录
总结:在Linux中新建目录默认的权限rwxr-xr-x
在Linux中新建文件默认的权限rw-r--r--
为什么新建目录或者文件是这样的权限?
umask 命令了解一下
案例:以root用户新建/nsddir/目录,在此目录下新建readme.txt文件,并进一步完成下列操作
1)使用户zhangsan能够在此目录下创建子目录 切换用户 su - zhangsan
chmod o w /nsddir/
2)使用户zhangsan不能够在此目录下创建子目录
chmod o-w /nsddir/
3)使用户zhangsan能够修改readme.txt文件
chmod o w /nsddir/readme.txt
4)调整此目录的权限,使所有用户都不能进入此目录
chmod u-x,g-x,o-x /nsddir/
5)为此目录及其下所有文档设置权限 rwxr-x---
chmod -R u=rwx,g=rx,o=--- /nsddir/
2.2 使用 chown 命令
设置文档归属
– chown [-R] 属主 文档...
– chown [-R] :属组 文档...
– chown [-R] 属主:属组 文档...
[root@server0 /]# mkdir /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# groupadd test
[root@server0 /]# chown zhangsan:test /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# chown student /nsd03
[root@server0 /]# ls -ld /nsd03
[root@server0 /]# chown :root /nsd03
[root@server0 /]# ls -ld /nsd03
2.3使用chgrp命令
change group
chgrp [-R] 组名 文件名/目录名
组名信息存放在/etc/group下
2.4附加权限(特殊权限)
Set GID
在该父目录上操作,属组 s,新建的子目录都会继承父目录的属组
• 附加在属组的 x 位上
– 属组的权限标识会变为 s
– 适用于目录,Set GID可以使目录下新增的文档自动设置与父目录相同的属组(继承)
对于属组而言:
如何判断原来的权限是否有x:
大写S 表示原来属组的权限没有x
小写s表示原来的属组的权限有x
具有继承作用:
[root@server0 ~]# mkdir /nsd06
[root@server0 ~]# ls -ld /nsd06
drwxr-xr-x. 2 root root 6 11月 24 11:51 /nsd06 #nsd06刚开始的权限和属组
[root@server0 ~]# chown :test /nsd06
[root@server0 ~]# ls -ld /nsd06
drwxr-xr-x. 2 root test 6 11月 24 11:51 /nsd06 #更改属组之后的权限
[root@server0 ~]# mkdir /nsd06/abc01 #新建子目录abc01
[root@server0 ~]# ls -ld /nsd06/abc01/
drwxr-xr-x. 2 root root 6 11月 24 11:53 /nsd06/abc01/ #属组和父目录没有关系
[root@server0 ~]# chmod g s /nsd06 #属组权限 s
[root@server0 ~]# ls -ld /nsd06
drwxr-sr-x. 3 root test 18 11月 24 11:53 /nsd06
[root@server0 ~]# mkdir /nsd06/abc02 #新建子目录abc02
[root@server0 ~]# ls -ld /nsd06/abc02
drwxr-sr-x. 2 root test 6 11月 24 11:54 /nsd06/abc02 #继承了父目录nsd06的所有者,属组
Set Uid(并没有继承)
[root@server0 ~]# ls -ld /nsd/ #nsd目录的权限
drwxr-sr-x. 2 harry adminuser 20 11月 25 09:58 /nsd/
[root@server0 ~]# chmod u s /nsd/ #对所有者加s,是否能够继承?
[root@server0 ~]# ls -ld /nsd/
drwsr-sr-x. 2 harry adminuser 35 11月 25 10:09 /nsd/
[root@server0 ~]# touch /nsd/nsd2.txt #在目录下新建子文件
[root@server0 ~]# ls -ld /nsd/nsd2.txt #查看新文件的权限
-rw-r--r--. 1 root adminuser 0 11月 25 10:10 /nsd/nsd2.txt
对Set uid一般情况下不使用s权限,这样会造成 对系统的安全存在风险
– 属主的权限标识会变为 s
– 适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限拥有root的权限
Sticky bit
附加在其他人的x位上
其他人的权限标识会变为t
适用于开放w权限的目录,可以阻止用户滥用w写入权限(禁止操作别人的文档)
3、ACL策略权限
使用场景:当用户属组具有写(或者其他)的权限,其他人什么权限也没有,
来了一个想要查看文件的用户,但不能使该用户具有写。
意义:能够对个别用户,个别组设置独立的权限
acl策略的作用
• 文档归属的局限性
– 任何人只属于三种角色:属主、属组、其他人
– 无法实现更精细的控制
acl访问策略
– 能够对个别用户、个别组设置独立的权限
– 大多数挂载的EXT3/4、XFS文件系统默认已支持
[root@server0 /]# mkdir /nsd10 #新建目录
[root@server0 /]# chmod o=--- /nsd10 #使该目录对其他人没有任何权限
[root@server0 /]# su - zhangsan #验证
[zhangsan@server0 ~]$ cd /nsd10
-bash: cd: /nsd10: Permission denied #不能进入
[zhangsan@server0 ~]$ exit #回到root
logout
[root@server0 /]# setfacl -m u:zhangsan:rx /nsd10 #设置ACL,使能够具有读和执行权限
[root@server0 /]# su - zhangsan #验证
[zhangsan@server0 ~]$ cd /nsd10 #可以进入
[zhangsan@server0 nsd10]$ pwd
[zhangsan@server0 nsd10]$ exit #回到root
logout
• 使用 getfacl、setfacl 命令
– getfacl 文档... #查看acl策略
– setfacl -m u:用户名:权限类别 文档...
– setfacl -m g:组名:权限类别 文档...
– setfacl -b 文档... #清除所有的ACL策略
– setfacl -x 文档... #清除指定的ACL策略
[root@server0 /]# getfacl /nsd10 #查看ACL策略的命令
[root@server0 /]# setfacl -m u:natasha:rwx /nsd10
[root@server0 /]# setfacl -m u:lisi:rwx /nsd10
[root@server0 /]# setfacl -m u:kenji:rx /nsd10
[root@server0 /]# getfacl /nsd10
[root@server0 /]# setfacl -x u:kenji /nsd10
[root@server0 /]# getfacl /nsd10
[root@server0 /]# setfacl -b /nsd10
[root@server0 /]# getfacl /nsd10