Day15-Linux系统特殊权限知识精讲
为什么创建文件默认权限为644,目录为755???
umask 权限掩码。控制系统的文件和目录的默认权限。
[root@oldboy oldboy]# umask
0022
针对文件来说:默认权限计算方法
6 6 6
0 2 2 -
6 4 4 ###系统的文件默认权限
umask掩码的3位每一位数字是否有【奇数】,如果有奇数(奇数位加1)
测试:
[root@oldboy oldboy]# umask 021
[root@oldboy oldboy]# umask
0021
[root@oldboy oldboy]# touch f021
[root@oldboy oldboy]# ls -l f021
-rw-r--rw-. 1 root root 0 5月 21 10:40 f021
计算:
6 6 6
0 2 1 -
6 4 5 ###系统的文件默认权限
0 0 1
6 4 6
测试:
[root@oldboy oldboy]# umask 033
[root@oldboy oldboy]# umask
0033
[root@oldboy oldboy]# touch f033
[root@oldboy oldboy]# ls -l f033
-rw-r--r--. 1 root root 0 5月 21 10:42 f033
结论:
文件默认权限结论
- 权限从666开始计算。
- 如果偶数,正常做减法。
- 如果是奇数,奇数位加一。
针对目录默认权限。
- 权限从777开始计算。
- 和掩码正常做减法。
测试:
[root@oldboy oldboy]# mkdir d033
[root@oldboy oldboy]# ls -ld d033
drwxr--r--. 2 root root 6 5月 21 10:44 d033
[root@oldboy oldboy]# umask 045
[root@oldboy oldboy]# mkdir d045
[root@oldboy oldboy]# ls -ld d045
drwx-wx-w-. 2 root root 6 5月 21 10:45 d045
UID大于199,并且用户和组同名,umask为002
cat /etc/bashrc
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ];
thenumask 002
elseumask 022
fi
/home/oldboy 默认700, #控制/etc/login.defs
想一想???为什么系统把默认权限定为:
默认644,目录755呢? #安全临界值
【有关权限生产环境应用案例及思路:】
运营电商 jd,站点目录给什么权限安全呢?
目录755
[root@oldboy oldboy]# mkdir /data/html -p
[root@oldboy oldboy]# ls -ld /data/html/
drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/
web服务运行时候有一个【虚拟用户www】,
1)虚拟用户www 可进入可查看程序文件,不可以写、删文件。
[root@oldboy oldboy]# useradd www
[root@oldboy oldboy]# chown -R www.www /data/html
[root@oldboy oldboy]# ls -ld /data/html
drwxr-xr-x. 2 www www 6 5月 21 11:07 /data/html #可以写、删文件
普通站点目录:【用户和组都是root,权限755】
[root@oldboy oldboy]# ls -ld /data/html
drwxr-xr-x. 2 root root 6 5月 21 11:07 /data/html/[root@oldboy oldboy]# mkdir /data/html/upload -p ###存放图片,文件
[root@oldboy oldboy]# ls -ld /data/html/upload/
drwxr-xr-x. 2 root root 6 5月 21 11:15 /data/html/upload/
图片、文件目录授权:【用户和组www,权限755】
[root@oldboy oldboy]# chown -R www.www /data/html/upload/
[root@oldboy oldboy]# ls -ld /data/html/upload/
drwxr-xr-x. 2 www www 6 5月 21 11:15 /data/html/upload/
解决upload上传目录安全:
-
不让上传:程序:控制这个目录上传的内容只能是.jpg,.zip。
-
不让执行:nginx:针对upload访问的时候,除了.jpg,.zip之外,不提供访问。
-
不让执行:动态服务器和静态服务器分离,访问的时候只有静态服务器(不安装PHP,java,python)
-
不让执行:磁盘上挂载的时候,设置禁止程序运行(二进制程序)。
不管什么业务都没有改程序文件的需求。
程序文件 [644 root root]
程序文件 [644 www www] #不推荐
三剑客sed 企业木马案例:
[root@oldboy oldboy]# touch suid.txt
[root@oldboy oldboy]# ls -l suid.txt
-rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt
linux特殊权限位:
[suid]
1)suid(setuid)位通过S字符标识。
2)存在于基本权限的用户权限位的x权限对应的位置。
3)如果用户权限位对应的x权限位上有x权限,则suid就用小写的s标识。
4)suid的s对应的数字权限为4。
5)完整权限用八进制数4000表示。
创建文件备用测试
[root@oldboy oldboy]# touch suid.txt
[root@oldboy oldboy]# ls -l suid.txt
-rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt
数字权限设置suid测试:
chmod 4644 suid.txt[root@oldboy oldboy]# chmod 4644 suid.txt
[root@oldboy oldboy]# ls -l suid.txt
-rwSr--r--. 1 root root 0 5月 21 11:55 suid.txt
[root@oldboy oldboy]# chmod u+x suid.txt
[root@oldboy oldboy]# ls -l suid.txt
-rwsr--r--. 1 root root 0 5月 21 11:55 suid.txt
取消设置suid测试:
[root@oldboy oldboy]# chmod 644 suid.txt
[root@oldboy oldboy]# ls -l suid.txt
-rw-r--r--. 1 root root 0 5月 21 11:55 suid.txt
字符设置suid
chmod u+s suid.txt
ls -l suid.txt
chmod u-s suid.txt
ls -l suid.txt
为什么会有SUID?
例子:普通用户修改密码。
[oldboy@oldboy ~]$ passwd
更改用户 oldboy 的密码 。
为 oldboy 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
1)修改密码passwd =======>>修改/etc/shadow文件
oldboy用户使用passwd命令,修改/etc/shadow文件,来实现修改密码的。
ls -l /etc/shadow
[oldboy@oldboy ~]$ ls -l /etc/shadow
----------. 1 root root 2484 5月 21 12:10 /etc/shadow
传统权限分析,oldboy是其他用户,修改/etc/shadow权限—,没有权限修改。。
事实呢?改了
suid的特殊作用:可以绕过基础权限体系,可以修改没有权限修改的文件。
基于二进制命令的。
[oldboy@oldboy ~]$ ls -l `which passwd`
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd
1)给一个命令设置suid以后,所有使用这个命令的用户,都拥有和这个命令对应的用户的权限。
问题:
cd 不好用
1)bash内置命令,C6系统中没有对应文件。
2)有对应文件。授权系统文件的cd,执行cd很可能执行的是bash内置的cd。
3)
[root@oldboy ~]# which cd
/usr/bin/cd
[root@oldboy ~]# cd /usr/bin/
[root@oldboy bin]# mv cd cdd
[root@oldboy bin]# cd /root
[root@oldboy ~]# ls cdd
ls: 无法访问cdd: 没有那个文件或目录
[root@oldboy ~]# cd /usr/bin
[root@oldboy bin]# ls cdd
cdd
小结:
1)suid功能是是针对二进制命令或程序的,不能用在shell等类似脚本文件上。
2)用户或属主对应的前三位权限的x位上,如果有s(S)就表示具备 suid 权限。
3)suid的作用就是让普通用户可以在执行某个设置了suid位的命令或程序时,拥有和命令对应属主(一般为 root 管理员)一样的身份和权限(默认)。
4)二进制命令程序需要有可执行权限x配合才行。
5)suid对应的身份和权限仅在程序命令执行过程中有效。
6)suid 是一把双刃剑,是一个比较危险的功能,对系统安全有一定的威胁,企业里用户授权可以使用 sudo 等替代 suid 功能。授权 suid 破坏性
7)在进行安全优化时,系统中默认设置了suid权限的命令要取消掉。
6)最后+授权suid破坏性
[root@oldboy bin]# find /bin/ -type f -perm 4755|xargs ls -l
-rwsr-xr-x. 1 root root 73888 8月 9 2019 /bin/chage
-rwsr-xr-x. 1 root root 57656 8月 9 2019 /bin/crontab
-rwsr-xr-x. 1 root root 32096 10月 31 2018 /bin/fusermount
-rwsr-xr-x. 1 root root 78408 8月 9 2019 /bin/gpasswd
-rwsr-xr-x. 1 root root 44264 4月 1 2020 /bin/mount
-rwsr-xr-x. 1 root root 41936 8月 9 2019 /bin/newgrp
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /bin/passwd
-rwsr-xr-x. 1 root root 23576 4月 1 2020 /bin/pkexec
-rwsr-xr-x. 1 root root 32128 4月 1 2020 /bin/su
-rwsr-xr-x. 1 root root 31984 4月 1 2020 /bin/umount
suid生产场景实际用途。
- 所有普通用户都能用到
- 普通用户想修改没有权限文件时候使用。
- 命令是没有破坏作用的。比如:ping,passwd
sgid权限知识
对于二进制命令或者程序来说,sgid的功能和suid基本相同,唯一的区别是suid是获得命令所属用户的身份和权限,而sgid是获得命令的所属用户组的身份和权限,因此,有关sgid对于二进制命令或者程序方面的知识就不详细叙述了。
1.suid核心知识小结
1)与suid不同的是,sgid既可以针对文件,也可以针对目录设置!
2)sgid的权限是针对用户组权限位的。
对于文件来说,sgid的功能如下:
1)sgid仅对二进制命令及程序有效。
2)二进制命令或程序,也需要有可执行权限x配合。
3)执行命令的任意用户可以获得该命令程序执行期间所属组的身份和权限。
理解sgid:
locate====>读/var/lib/mlocate/mlocate.db <====updatedb
[root@oldboy bin]# ls -l /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1423565 5月 21 03:23 /var/lib/mlocate/mlocate.db
结论没有权限可以查询/var/lib/mlocate/mlocate.db
事实上是可以查的。
[oldboy@oldboy ~]$ locate cp
原因:就是locate命令被设置了sgid
[oldboy@oldboy ~]$ ls -l `which locate`
-rwx--s--x. 1 root slocate 40520 4月 11 2018 /bin/locate
测试:取消sgid
[root@oldboy bin]# chmod g-s /bin/locate
[root@oldboy bin]# ls /bin/locate -l
-rwx--x--x. 1 root slocate 40520 4月 11 2018 /bin/locate
查看:
[oldboy@oldboy ~]$ locate cp
locate: 无法执行 stat () `/var/lib/mlocate/mlocate.db': 权限不够
参考解答:
[root@oldboy ~]# mkdir /home/admins #<==创建共享目录admins。
[root@oldboy ~]# groupadd adminuser #<==添加用户组adminuser。
[root@oldboy ~]# ls -ld /home/admins
drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins
[root@oldboy ~]# chgrp adminuser /home/admins/ #<==给adminis目录授权adminuser用户组。
[root@oldboy ~]# ls -ld /home/admins
drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授权结果。
[root@oldboy ~]# touch /home/admins/oldboy.txt #<==创建测试文件。
[root@oldboy ~]# ls -l /home/admins/
对于目录(继承目录所属的组)来说,sgid 的功能如下:
1)Linux里默认情况所有用户创建文件,默认用户和组都是自身。
2)sgid可以让用户在此目录下创建的文件和目录具有和此目录相同的用户组设置。
setgid位主要用在目录中,在为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所属组权限,而不是创建该文件的用户的默认所有者。这样使得在多个用户之间共享一个目录中的文件变得简单。
来看一道RHCE认证考试题(了解即可)。
创建共享目录/home/admins,要求属组为adminuser,adminuser组成员对admins目录有写入、读取和执行的权限,其他所有用户没有任何权限(root除外),在/home/admins目录中创建的文件会自动继成adminuser组。
参考解答:
[root@oldboy ~]# mkdir /home/admins #<==创建共享目录admins。
[root@oldboy ~]# groupadd adminuser #<==添加用户组adminuser。
[root@oldboy ~]# ls -ld /home/admins
drwxr-xr-x. 2 root root 4096 Apr 30 16:54 /home/admins
[root@oldboy ~]# chgrp adminuser /home/admins/ #<==给adminis目录授权adminuser用户组。
[root@oldboy ~]# ls -ld /home/admins
drwxr-xr-x. 2 root adminuser 4096 Apr 30 16:54 /home/admins #<==查看授权结果。
[root@oldboy ~]# touch /home/admins/oldboy.txt #<==创建测试文件。
[root@oldboy ~]# ls -l /home/admins/
total 0
-rw-r--r--. 1 root root 0 Apr 30 19:59 oldboy.txt #<==文件默认用户和组都是root。
[root@oldboy ~]# chmod 2770 /home/admins #<==授权sgid权限给admins目录。
[root@oldboy ~]# ls -ld /home/admins/
drwxrws---. 2 root adminuser 4096 Apr 30 20:10 /home/admins/ #<==查看授权结果。
[root@oldboy ~]# touch /home/admins/newfile.txt #<==在创建新文件。
[root@oldboy ~]# ls -l /home/admins/
total 0
-rw-r--r--. 1 root adminuser 0 Apr 30 20:04 newfile.txt
#<==新创建的文件用户组为adminuser了,而非默认的root了。
-rw-r--r--. 1 root root 0 Apr 30 19:59 oldboy.txt
整个配置过程,已满足题意需求。
粘滞位 sticky Bit(sbit)知识
粘贴位的功能现在很少用了,不过对于像/tmp 目录这样的,是整个系统用户临时文件存放地,还是有点意义。
一个目录既使它的所有权限都开放了,即为rwxrwxrwx,而同时设置了粘贴位,那么除非目录的属主和 root用户有权限删除它,除此之外其他用户是不能删除这个目录的。
粘贴位的用途一般是把一个文件夹的权限都特开,然后来共享文件,像/tmp 目录一样。虽然方便,但是带来了一定的安全隐患,生产环境应禁止设置粘滞位权限。
特殊权限位对比说明表格
类别 | SUID | SGID | sticky |
---|---|---|---|
字符表示 | S | S | T |
占据位置 | 基本权限x位 | 基本权限x位 | 基本权限x位 |
基本权限位有x | s | s | t |
数字表示 | 4 | 2 | 1 |
八进制表示 | 4000 | 2000 | 1000 |
特护权限作用 | 针对用户位 | 针对用户组 | 其它用户 |
特殊权限位对比说明表格 占据位置,前三位中 中三位中 后三位中
方便,但是带来了一定的安全隐患,生产环境应禁止设置粘滞位权限。
特殊权限位对比说明表格
类别 | SUID | SGID | sticky |
---|---|---|---|
字符表示 | S | S | T |
占据位置 | 基本权限x位 | 基本权限x位 | 基本权限x位 |
基本权限位有x | s | s | t |
数字表示 | 4 | 2 | 1 |
八进制表示 | 4000 | 2000 | 1000 |
特护权限作用 | 针对用户位 | 针对用户组 | 其它用户 |
特殊权限位对比说明表格 占据位置,前三位中 中三位中 后三位中