目录
一、文件的一般权限
1、针对三类对象进行定义
2、针对每类访问者定义了三种主要权限
二、修改权限
1、修改文件或目录的权限 chmod
2、对文件和目录来说,rwx有着不同的作用和含义
1)对文件:无意义权限 -wx -w-
2)对文件夹:无意义权限 rw- -w-
3、修改文件或目录的属主和属组
1)修改文件或目录的所属者
2)修改文件或目录的属组
三、ACL权限
四、文件和目录的特殊权限
1、SUID -- 让普通用户临时获取root权限
2、SGID -- 共享目录权限
3、Sticky Bit
五、修改文件属性 chattr
六、umask
rwx = 111 = 7
rw- = 110 = 6
r-x = 101 = 5
r-- = 100 = 4注意:root账户不受文件权限的读写限制,执行权限受限制
——change mode
格式:1)chmod [选项] [ugoa] [+-=] [rwx] 文件或目录...
:2)chmod [选项] nnn 文件或目录
==>chmod [选项] 权限字 文件
选项:-r :递归修改指定目录下所有文件、子目录的权限
权限字:
第一种方式:
第二种方式:
(wx权限是建立在r权限之上,当用了r的权限时,wx的权限才有意义)
(当文件具有x权限的时候w权限才有意义,对于文件夹来说 r--和rw-没有区别都是只能显示文件内容)
格式:chown [选项] 新属主[:[新数组]] 文件或目录
选项:-R 可递归设置指定目录下的全部文件(包括子目录和子目录中的文件)的所属关系。
格式:
1)chown [选项] :新属组 文件或目录……
2)chgrp [选项] 新属组 文件或目录…… (change group修改文件的组信息)
===>chown 用户:组 文件名
chown 用户.组 文件名
chown 用户 文件名
chgrp 用户组 文件
选项:-R 递归修改权限
——给指定的用户指定目录分配指定的权限
查看ACL权限:getfacl 文件名
设定ACL权限:setfacl [选项] [u:用户名:权限] 文件名
选项:
-m 添加扩展权限 【如setfacl -m u:redhat:rwx 123.txt】
-x 删除指定的ACL扩展权限
-b 清空所有的ACL扩展权限
-d 设定默认 ACL 权限 只对目录生效 指目录中新建立的文件拥有此默认权限
-k 删除默认ACL权限
-R 递归设定 ACL 权限。指设定的 ACL 权限会对目录下的所有子文件生效
#给用户和用户组添加ACL权限
给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
#通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限
setfacl -Rm u:用户名:权限 -R 文件名
# 如果给父目录设定了默认的 ACL 权限,那么父目录中所有新建的子文件会继承父目录的 ACL 权限
setfacl -m d:u:用户名:权限 文件名
setfacl -md u:用户名:权限 文件名
[root@localhost ~]# setfacl -m u:new_user:rwx a
[root@localhost ~]# getfacl a
# file: a
# owner: root
# group: root
user::rw-
user:new_user:rwx
group::r--
mask::rwx
other::r--
#删除指定用户的 ACL 权限
setfacl -x u:用户名 文件名
#删除指定用户组的 ACL 权限
setfacl -x g:组名 文件名
#删除文件的所有 ACL 权限
setfacl -b 文件名
# 当会用-x删除扩展权限时,虽然权限已经删除掉了 但此时使用ll还能看到.的位置上是一个+,如果想要变回.则取消使用-b
[root@localhost ~]# setfacl -x u:new_user a
[root@localhost ~]# getfacl a
rws------.
当设置了SUID权限到可执行文件上时,假如文件本身是rwx------.,此时就会变为rws------.
当普通用户运行 u权限具有s的可执行文件时(即该程序的权限为-rwsr-xr-x.),普通户在程序的运行过程中临时具备root权限,所以普通户在运行passwd命令时可以,修改/etc/shadow文件
#cat可执行文件本身全显示rwxr-xr-x,也就是说普通用户无法通过cat命令阅读权限不允许的文件
#当使用suid将cat命令权限改为 rwsr-xr-x时,普通用户在使用cat时可以临时获取root权限,这时普通户可以阅读任何文件
[root@localhost tmp]# chmod u+s /usr/bin/cat
[root@localhost tmp]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 36320 Jan 6 2023 /usr/bin/cat
[root@localhost tmp]# cat 123.txt
123
suid仅对二进制文件有效。
在执行过程中,调用者会暂时获得该文件的所有者权限。
该权限只在程序执行的过程中有效。
SGID权限一般赋予给目录,任何用户管在该目录中创建新文件,这个新文件的属组都是拥有SGID这个目录的属组
当设置了SGID权限到文件夹上时,假如文件夹本身是---rwx---.,此时就会变为---rws---.
一般用于协同工作,共同在同一目录下进行文件管理。
#任意用户创建的文件,该文件的属组本应属于该用户的基本组
[qqqq@localhost tmp]$ mkdir qqqqDir
[qqqq@localhost tmp]$ mkdir test
[qqqq@localhost tmp]$ touch test/a
[qqqq@localhost tmp]$ ll test/a
-rw-r--r--. 1 qqqq qqqq 0 Sep 24 21:21 test/a
#当目录具有SGID权限时,任何用户在该目录下创建新文件,文件的属组都会变为用户SGID权限的目录的属组。
[qqqq@localhost tmp]$ chmod g+s qqqqDir/
[qqqq@localhost tmp]$ chmod g=rws qqqqDir/
[qqqq@localhost tmp]$ ll qqqqDir/ -d
drwxrwSr-x. 2 qqqq qqqq 6 Sep 24 21:12 qqqqDir/
[qqqq@localhost tmp]$ cd qqqqDir/
[qqqq@localhost qqqqDir]$ touch a
[qqqq@localhost qqqqDir]$ ll a
-rw-r--r--. 1 qqqq qqqq 0 Sep 24 21:14 a
当设置了SBit权限到文件夹上时,假如文件夹本身是------rwx.,此时就会变为------rwt.
但目录具有sbit权限时,在文件中的文件只能被文件的所有者删除
#使用redhat创建个test目录 权限给满 这时任何人都可以在这个目录中删除任何文件
[redhat@RHEL tmp]$ mkdir test
[redhat@RHEL tmp]$ chmod 777 test/
[redhat@RHEL tmp]$ ll test/ -d
drwxrwxrwx. 2 redhat redhat 6 Sep 24 11:55 test/
[redhat@RHEL tmp]$ touch test/a
#此时普通用户还可以删除其他用户的文件
[caixukun@RHEL test]$ rm -rf a
#当设置了粘滞位sticky bit权限后,普通用户只能删除自己的文件,别人不可以。
[redhat@RHEL tmp]$ chmod a=rwxrwxrwt test/
[redhat@RHEL tmp]$ ll test/ -d
drwxrwxrwt. 2 redhat redhat 6 Sep 24 11:56 test/
[redhat@RHEL tmp]$ touch test/a
#此时普通用户就不可以删除其他人的文件了
[caixukun@RHEL test]$ rm -rf a
rm: cannot remove 'a': Operation not permitted
为文件或目录添加三种特殊权限同样可以通过chmod命令来实施,使用“u±s”、“g±s”、“o±t”的字符权限模 式分别用于添加和移除SUID、GUID、sticky权限。
若使用数字形式的权限模式,可采用“nnnn”格式的四位八进制数字表示,其中:后面三位是一般权限的数 字表示,前面第一位则是特殊权限的标志数字:
0——表示不设置特殊权限
1——表示只设置sticky
2——表示只设置GUID权限
3——表示只设置SGID和sticky权限
4——表示只设置SUID权限
5——表示只设置SUID和sticky权限
6——表示只设置SUID和SGID
7——表示同时设置SUID、GUID、sticky3种权限
——change attribute
格式:chattr [选项] 文件名
选项:
+a 不可修改 -a拿掉不可修改的属性(root不可以删)
+i 表示只读 -i取消只读
+d 不可删除 -d取消不可删除(root可以删)
——权限掩码
权限掩码直接影响到新建文件的权限
新建文件的权限时 666 = rw-rw-rw-
666 - 权限掩码 rw-r--r--
新建目录的默认权限=0777-umask值
[root@localhost ~]# umask //查看当前用户的umask权限
0022
#临时赋予权限掩码
[root@RHEL tmp]# umask 000
#永久性质的权限掩码设置 可以在.bashrc .bash_profile 添加 umask 000
[root@localhost ~]# vim .bashrc
#重新加载配置
[root@localhost ~]# source .bashrc
另一种方式:
#修改shell umask值(永久)
[root@localhost ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then
umask 002
else
umask 022
fi
[root@localhost ~]# source /etc/profile //立即在当前shell中生效
# 在/etc/login.defs中记录权限掩码等系统配置(轻易不要修改)
[root@localhost ~]# vim /etc/login.defs