特殊权限
1.特殊权限 — SUID
1.问题环境
在 Linux 系统中,每个普通用户都可以更改自己的密码,这是合理的设置。问题是,普通用户的信息保存在 /etc/passwd 文件中,用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己的密码时修改了 /etc/shadow 文件中的加密密码,但是文件权限显示,普通用户对这两个文件其实都是没有写权限的,那为什么普通用户可以修改自己的权限呢?
2.解决方案
普通用户可以修改自己的密码在于 passwd 命令。该命令拥有特殊权限 SetUID,也就是在属主的权限位的执行权限上是 s。可以这样来理解它:当一个具有执行权限的文件设置 SetUID 权限后,用户在执行这个文件时将以文件所有者的身份来执行。
PS: 当普通用户使用 passwd 命令更改自己的密码时,实际上是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,root 当然可以将密码写入/etc/shadow 文件,所以普通用户也可以修改/etc/shadow 文件,命令执行完成后,该身份也随之消失。
3.SUID授权方法
suid 4000 权限字符s(S) 用户位置上的x位上设置
授权方法:
chmod 4755 filename chmod u+s filename
SUID的总结
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限。
2.如果设置的二进制文件没有执行权限,那么SUID的权限显示就是大S。
3.特殊权限SUID仅对二进制可执行程序有效,其他文件或目录则无效。
注意: SUID极度危险,不信可以尝试对vim或rm进行设定SUID。
2.特殊权限 SGID
SGID的作用
1.文件的有效执行组身份为文件的拥有组,而不是执行者的组身份
2.目录里新建的文件的拥有组会自动继承目录的拥有组身份
设置SGID
sgid 2000 权限字符s(S) 用户位置上的x位上设置
授权方法:
chmod 2755 directory chmod g+s directory
SGID 总结
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了SGID后,在该目录中新建的文件不在是创建该文件的默认所属组
3.使用SGID可以使得多个用户之间共享一个目录的所有文件变得简单。
3.特殊权限 SBIT
1.SBIT作用
SBIT,即Sticky Bit,对目录有写权限的用户仅仅可以删除目录里属于自己的文件,不能删除其他用户的文件
/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
2.SBIT的授权方法
粘滞位 1000 权限字符t(T),其他用户位的x位上设置。
授权方式:
chmod 1755 directory chmod o+t directory
1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
3.一个目录即使它的权限为"777"如果是设置了粘滞位,除了目录的属主和"root"用户有权限删除,除此
之外其他用户都不允许删除该目录
4.权限属性chattr
chatrr只有root用户可以使用,用来修改文件系统的权限属性。凌驾与rwx基础权限上的授权(设置同时对管理员生效)
查看lsattr 修改chattr +-i 锁住文件,不能做任何修改 +-a 锁住文件,只能追加内容
[root@localhost ~]# touch 22.txt [root@localhost ~]# lsattr 22.txt ---------------- 22.txt [root@localhost ~]# chattr +i 22.txt [root@localhost ~]# lsattr 22.txt ----i----------- 22.txt [root@localhost ~]# echo 22 > 22.txt -bash: 22.txt: 权限不够 [root@localhost ~]# cat 22.txt [root@localhost ~]# echo 22 > 22.txt -bash: 22.txt: 权限不够 [root@localhost ~]# rm -f 22.txt rm: 无法删除"22.txt": 不允许的操作 [root@localhost ~]# chattr -i 22.txt [root@localhost ~]# lsattr 22.txt ---------------- 22.txt
[root@localhost ~]# chattr +a 22.txt [root@localhost ~]# lsattr 22.txt -----a---------- 22.txt [root@localhost ~]# echo 222> 22.txt -bash: 22.txt: 不允许的操作
[root@localhost ~]# cat 22.txt [root@localhost ~]# echo 222 >> 22.txt [root@localhost ~]# cat 22.txt 222
5.权限掩码 umask
1.umask是什么
当我们登录系统之后创建一个文件总是有一个默认权限的,比如: 目录755、文件644、那么这个权限是
怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限。
2.umask是如何改变创建新文件的权限
系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但umask表
示要减去的值,所以新目录文件的权限应该是777 - 022 =755。至于文件的权限也依次类推666 - 022
=644。
3.umask涉及哪些配置文件
umask涉及到的相关文件 /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
shell (vim,touch) --umask--> 会影响创建的新文件或目录权限
useradd如果修改umask--> 会影响用户HOME家目录权限
vsftpd服务如果修改--umask--> 会影响ftp服务中新创建文件或创建目录权限
4.umask 演示案例
1)目录:777-umask
文件分奇数和偶数
奇数:用7减
偶数:用6减
问题:umask=023,请问默认创建目录和文件的权限是多少 目录: 777-023=754 文件: 667-023=644
问题:umask=034,请问默认创建目录和文件的权限是多少 目录:777-034=743 文件:676-034=642
常用的umask:077 007 027
077
目录 777-077=700
文件 677-077=600
007
目录 777-007=770
文件 667-007=660
027
目录 777-027=750
文件667-027=640
6.FACL概述
前面我们学习了一般权限、特殊权限,但所有的权限是针对某一类用户设置的, 如果希望对某个指定的用户进行单独的权限控制, 就需要用到文件的访问控制列表(FACL)
设定 Facl 只能是 root 管理员用户. 相关命令: getfacl, setfacl
设置FACL setfacl setfacl [选项] [ugm]:[用户名]:[rwx] [目标文件名] 选项: -m 设置acl参数 -x 删除acl参数 -b 清除全部acl参数 -R 递归 -d 设置默认acl,需要与m结合使用 -k 删除默认的acl参数
[root@localhost /]# ll -d /11.txt -rwxrwx---. 1 tom admin 0 9月 26 17:06 /11.txt [root@localhost /]# setfacl -m u:mary:rw 11.txt [root@localhost /]# setfacl -m u:jack:r 11.txt [root@localhost /]# ll -d /11.txt -rwxrwx---+ 1 tom admin 0 9月 26 17:06 /11.txt [root@localhost /]# getfacl /11.txt getfacl: Removing leading '/' from absolute path names # file: 11.txt # owner: tom # group: admin user::rwx user:mary:rw- user:jack:r-- group::rwx mask::rwx other::---
7.FACL高级特性 MASK
mask 权限,指的是用户或群组能拥有的最大 ACL 权限,也就是说,给用户或群组设定的 ACL 权限不能超过 mask 规定的权限范围,超出部分做无效处理。mask用于临时降低用户或组的权限,但不包括文件的所有者和其他人。
mask最主要的作用是用来决定用户的最高权限。
# setfacl -m mask:r /test/test.txt # getfacl /test/test.txt # file: test/test.txt # owner: root # group: root user::rw- user:test:--- user:tanfei:rw- #effective:r-- //mask权限是只读,所以生效的只有读权限 group::r-- group:devops:r-- mask::r-- other::rw-
8.FACL高级特性 Default
Default默认ACL权限的作用是如果给们目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限
//赋予用户 zmj 对以后在/opt 下新建的文件有读写执行权限 # setfacl -m d:u:zmj:rwx /opt
补充:
文件的权限对文件的内容生效 文件r 可以对文件使用cat等查看类的命令 文件w 可以对文件使用vi、echo >等编辑文件内容的命令 文件x 可以使用文件的绝对路径或相对路径来运行 文件r大于文件wx权限
目录的权限对目录的内容生效 目录r 可以对目录使用ls命令 目录w 可以对目录里的子目录和文件使用touch、rm、mv、cp、mkdir命令 目录x 可以对目录使用cd命令 目录x大于目录rw权限