特殊权限中:
1、文件基本权限;
2、文件默认权限;
3、ACL权限;
4、sudo权限;---只有这个权限是针对系统命令的,其他都是针对文件的。
5、文件特殊权限;
6、不可改变位权限
ACL权限:---解决用户身份不足。 作用于分区,属挂载权限。
查看分区ACL权限是否开启:
[root@localhost ~]# dumpe2fs -h /dev/sda5
dumpe2fs 命令是查询制定分区详细文件系统信息的命令
选项: -h:仅显示超级快中信息,而不显示磁盘块组的详细信息。
临时开启分区ACL权限:
[root@localhost ~]# mount -o remount,alc / --- -0:特殊挂载
重新挂载根分区,并挂载加入 acl 权限
永久开启分区ACL权限:
[root@localhost ~]# vim /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl 1 1
#加入 acl
注意:修改此文件的时候,必须小心修改,否则会影响Linux启动。
结合临时修改可直接达到---修改永久生效不用重启系统。
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重新启动系统,是修改生效。
查看ACL权限:
[root@localhost ~]# getfacl 文件名
#查看acl权限
设定ACL权限的命令:
[root@localhos ~]# setfacl 选项 文件名
选项: -m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认ACL权限
-R 递归设定ACL权限
设置ACL权限比较复杂,这只是基本的一些选项
创建一个用户,创建一个组,并对某个文件的所有者和所属组进行更改:
修改文件权限:r --- 4 w---2 x---1
[root@localhost ~]# chmod 770 kunDir --- 设置文件权限
添加一个用户,并设置这个用户的密码
[root@localhost ~]# useradd laow --- 添加一个用户
[root@localhost ~]# passwd laow --- 设置laow这个用户的密码
root切换到普通用户
[root@localhost ~]# su - laow
root用户切换到普通用户的身份,不用密码,如果普通切换到root需要root的密码
给文件添加ACL权限:
[root@localhost ~]# setfacl -m u:laow:rx kunDir
u:laow:rx --- u:设置用户ACL权限,laow:用户,rx:读,执行 权限
查看文件的ACL权限:
[root@localhost ~]# getfacl kunDir ---- getacl 文件名 查看这个文件的ACL权限
[root@localhost ~]# setfacl -m u:laow:rx /kunDir --- 给用户添加ACL权限
给用户laow赋予r-x权限,使用:“u:用户名:权限” 格式
[root@localhost ~]# setfacl -m g:student:rx /kunDir
给组 student 分配ACL权限。使用“g:组名:权限” 格式
最大有效权限与删除ACL权限:
1、最大有效权限mask
mask是用来指定最大有效权限的。如果给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限。
修改最大有效权限:
[root@localhost ~]# setfacl -m m:rx 文件名
#设定mask的权限为r-x。使用“m:权限” 格式
删除ACL权限:
[root@localhost ~]# setfacl -x u:用户名 文件名
#删除指定用户的ACL权限
[root@localhost ~]# setfacl -x g:组名 文件名
#删除指定用户组的ACL权限
[root@localhost ~]# setfacl -b 文件名
#会删除文件的所有的ACL权限 --- 不管是组,还是用户的ACL都会删除掉。
默认ACL权限和递归ACL权限:
递归ACL权限---只针对目录生效。
递归权限仅能赋予目录,不能赋予文件。 已经有的子目录和子文件。赋予文件递归ACL权限会报错。
递归式父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。
[root@localhost ~]# setfacl -m u:用户名:权限 -R 目录名
注意:如果ACL使用递归则就会产生权限溢出的问题,(目录慎用w-2写的权限,对文件慎用x-1执行的权限),所以当递归后其子目录或文件也拥有了跟这个文件相同的权限。除非一个一个文件设置,否则没办法修改。所以:ACL尽量别人,能用所有者,所属组,其他人的权限就别用ACL权限。
默认ACL权限:--- 赋予文件默认权限不会报错--只针对目录生效
作用是:如果给父目录设定了ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
[root@localhost ~]# setfacl -m d:u:用户名:权限 目录名
sudu权限:---(备份,添加用户,ifconfig普通用户不能用。)很不安全
root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是系统命令
sudo使用:
[root@localhost ~]# visudo
#实际修改的是 /etc/sudoers 文件
在配置文件:需要启用Defaults logfile=/var/log/sudo 配置
默认日志文件:/var/log/sudo
例如:[root@localhost ~]# visudo
-user1 ALL=/sbin/shutdown -r now
注意:ALL对应的值描述的越详细越好,这样user1使用这个命令的权限就越小。
[root@localhost ~]# sudo -l --- 查看被超级用户允许执行的系统命令
必须是绝对路径,但也可以在contentos 6 中可以直接执行(做了优化)。写绝对路径是为了兼容其他版本
root ALL=(ALL) 前ALL:表示所有IP ALL
#用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
#%wheel ALL=(ALL) 前ALL:表示所有IP ALL
#%组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
注意:必须在组名前加百分号
授权普通用户可以添加其他用户:
[root@localhost ~]# visudo
- user1 ALL=/usr/sbin/useradd
- user1 ALL=/usr/bin/passwd
#授予用户设定密码的权限
- user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd "", !/usr/bin/passwd root
上面条件的中顺序必须是这样。
[root@localhost ~]# whereis 命令 --- 查看这个命令所在位置
保存密码的文件: /etc/passwd
文件特殊权限: ---- 特殊权限尽量少修改。
SetUID --- 非常不安全权限--系统需要这种权限来完成一些特殊的功能,不允许手动自己去配置--- 只能对文件
1、只有可以执行的二进制程序才能设定SUID权限
是一个执行文件,必须有可执行权限,SUID才有意义,否则无效。
2、命令执行者要对该程序拥有x(执行)的权限
3、命令执行者在执行改程序时获得该程序属主的身份(执行过程中赋为文件的属主)
4、SetUID权限只在改程序执行过程中有效,也就是身份改变只在程序执行过程中有效。
设定SetUID的方法
4代表SUID
chmod 4755 文件名
chmod u+s 文件名
赋予文件abc,SUID权限:
文件没有执行权限,赋予SUID权限是没有意义的:为:大S
取消SUID权限:
chmod 0755 文件名
chmod u-s 文件名
危险的SetUid:注意:
1、关键目录应严格控制写权限。比如: “/” “/usr”等
2、用户的密码设置要严格遵守密码三原则。
3、对系统中默认应该具有SetUID权限的文件作一列表,定时检查有没有这些之外的文件被设置了SetUID权限。
查找系统当中所有拥有SUID和SGID的所有文件,并保存到suid.log文件当中:
[root@localhost ~]# find / -perm -4000 -o -perm -2000 > suid.log
创建aaa文件赋予aaa文件 SUID的权限:
SetGID --- 非常不安全权限
--系统需要这种权限来完成一些特殊的功能,不允许手动自己去配置--- 即可以针对文件设置,也可以对目录设置
1、只有可执行的二进制程序才能设置SGID权限
2、命令执行者要对该程序拥有x(执行)权限
3、命令执行在执行程序的时候,组身份升级为该程序文件的属组。
4、SetGID权限同样只在该程序执行过程中有效,也就是组身份改变只在执行过程中有效。
典型例子:
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x 1 root slocate 35612 8月 24 2010 /usr/bin/locate
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r----- 1 root slocate 1838850 1月 20 04:29 /var/lib/mlocate/mlocate.db
备注:
1、/usr/bin/locate是可执行二进制程序,可赋予SGID。
2、执行用户lamp对/usr/bin/locate命令拥有执行权限
3、执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对 /var/lib/mlocate/mlocate.db 数据库拥有r权限,所以普通用户可以使用locate命令查询,mlocate.db数据库
4、命令结束,lamp用户的组身份返回lamp组。
SetGID针对目录的作用:
1、普通用户必须对此目录拥有r和x权限,才能进入此目录
2、普通用户在此目录中的有效组会变成此目录的属组
3、若普通用户对此目录拥有w权限时,新建文件的默认所属组是这个目录的所属组。
设定SetGID:
chmod 2755 文件名
chmod g+s 文件名
root创建测试目录 test:
此时并未对 目录 test 设置 SGID权限
未设置SGID权限时候在test目录下创建文件:默认的所有者,所属组都是当前用户
给test目录设置SGID权限:
此时用户在test目录下创建的文件的所属组就是root组:
取消SetGID
chmod 0755 文件名
chmod g-s 文件名
sticky BIT--- 只能针对目录生效。
注意:一般的对目录只有x权限是不够的,只能cd。只有让其他人对这个目录拥有7权限,粘着位才有作用。
所以,除非系统当中自带有粘着位的目录,不建议手工建立拥有粘着位的目录。
SBIT粘着位作用:
1、粘着位目前只对目录有效
2、普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
3、如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦被赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。
设置粘着位:
chmod 1755 目录名
chmod o+t 目录名
取消粘着位:
chmod 0777 目录名
chmod o-t 目录名
默认的/tmp 就是拥有粘着位权限的。
不可改变位权限:
chattr权限:
chattr命令格式
chattr [+-=] [选项] 文件或目录
+:增加权限
-:删除权限
=:等于某权限
chattr选项包括:i 和 a --- 这2个最长用
i:等价于 insert
如果对文件设置了i属性,那么不允许对文件进行删除、改名、也不能添加和修改数据;如果对目录设置了i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a:等价于 append --- 必须得用输出重定向追加进入内容才可以。
如果对文件设置了a属性,那么只能在文件中增加数据,但不能删除也不能修改数据;如果对目录设置a属性,只允许在目录中建立和修改文件,但不允许删除。
查看文件系统属性:
[root@localhost ~]# lsattr 选项 文件名
选项:
-a 显示所有文件和目录
-d 若目标是目录,仅列出目录本身的属性,而不是子文件的。