1 特殊权限位基本说明
Linux系统基本权限位为9位权限,但还有额外3位权限位,共12位权限
suid s(有x) S 4 用户对应的权限位(用户对应的3位上)
sgid s(有x) S 2 用户组对应的权限位(用户组对应的3位上)
sticky t(有x) T 1 其他用户对应的权限位
2 SUID(setuid)
[root@oldboy ~]# ls -l `which passwd`
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
- 1
- 2
- 3
- 4
# 测试rm命令,设置suid权限使普通用户能删除没有权限的文件
# root用户下
[root@oldboy ~]# ls -l /bin/rm
-rwxr-xr-x. 1 root root 57440 Mar 23 2017 /bin/rm
- 1
- 2
- 3
- 4
# oldboy用户下
[oldboy@oldboy ~]$ cd /oldboy/
[oldboy@oldboy oldboy]$ ls -ld
drwxr-xr-x 5 root root 4096 Dec 15 22:23 .
[oldboy@oldboy oldboy]$ ls
1 2 3
[oldboy@oldboy oldboy]$ rm -rf ./*
rm: cannot remove `./1': Permission denied
rm: cannot remove `./2': Permission denied
rm: cannot remove `./3': Permission denied
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
# root用户下设置suid权限
[root@oldboy ~]# chmod u+s /bin/rm
[root@oldboy ~]# ls -l /bin/rm
-rwsr-xr-x. 1 root root 57440 Mar 23 2017 /bin/rm
- 1
- 2
- 3
- 4
- 5
- 6
# 或者用数字的方式来设置suid
[root@oldboy ~]# chmod u-s /bin/rm
[root@oldboy ~]# ls -l /bin/rm
-rwxr-xr-x. 1 root root 57440 Mar 23 2017 /bin/rm
[root@oldboy ~]# chmod 4755 /bin/rm
[root@oldboy ~]# ls -l /bin/rm
-rwsr-xr-x. 1 root root 57440 Mar 23 2017 /bin/rm
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
# oldboy用户下再次测试是否能删除原来不能删除的文件
[oldboy@oldboy oldboy]$ rm -rf ./*
[oldboy@oldboy oldboy]$ ls -l
total 0
- 1
- 2
- 3
- 4
- 5
- 6
2.1 SUID知识小结
suid 知识小结: 针对命令和二进制程序的
1)用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S。
2)suid作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)帐号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。(注意和su及sudo的区别),suid为某一个命令设置特殊权限(使用者为所有人)通过给rm命令设置suid可以更深入理解suid权限。
3)希望oldboy用户能够删除本来无权删除的文件
a.sudo给oldboy授权rm。
b.给rm命令设置suid。
c.设置上级目录w权限
4)suid修改的是执行的命令passwd,而不是处理的目标文件/etc/shadow
5)仅对二进制命令程序有效,不能用在shell等类似脚本文件上(因为shell脚本仅仅是调用二进制命令程序而己,因此,具体权限还需要看二进制命令本身)
6)二进制命令程序需要有可执行权限x配合。
7)suid权限仅在程序命令执行过程中有效。
8)执行suid命令的任意系统用户都可以获得该命令程序在执行期间对应的拥有者的所有权限。
9)suid双刃剑,是一个比较危险的功能,对系统安全有一定的威胁。系统suid的无用的功能取消suid权利(安全优化)
如何查找系统中有SUID的命令(可用find):
[root@oldboy ~]# find /usr/bin -type f -perm 4755 -exec ls -l {} \;
-rwsr-xr-x. 1 root root 40240 May 11 2016 /usr/bin/newgrp
-rwsr-xr-x. 1 root root 75640 May 11 2016 /usr/bin/gpasswd
-rwsr-xr-x. 1 root root 54464 Mar 22 2017 /usr/bin/at
-rwsr-xr-x. 1 root root 70480 May 11 2016 /usr/bin/chage
-rwsr-xr-x. 1 root root 22544 Mar 17 2015 /usr/bin/pkexec
-rwsr-xr-x. 1 root root 30768 Nov 24 2015 /usr/bin/passwd
-rwsr-xr-x. 1 root root 51784 Aug 24 2016 /usr/bin/crontab
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
3 SGID(setgid)
# setgid和setuid类似,可通过下面这个例子来看一下效果
# locate查找
[root@oldboy ~]$ locate cat ===> /var/lib/mlocate/mlocate.db
[root@oldboy ~]$ updatedb 更新 /var/lib/mlocate/mlcote.db
[root@oldboy ~]# ls -l /var/lib/mlocate/mlocate.db
-rw-**r--**--- 1 root slocate 1961262 Dec 15 03:06 /var/lib/mlocate/mlocate.db
[root@oldboy ~]# ls -l `which locate`
-rwx**--s**--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/locate
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
# test
[root@oldboy ~]# ls -l `which locate`
-rwx--x--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/locate
[root@oldboy ~]# chmod g+s `which locate`
[root@oldboy ~]# ls -l `which locate`
-rwx--s--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/locate
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ locate cat
/bin/cat
/bin/zcat
/etc/cron.daily/mlocate.cron
......
[root@oldboy ~]# chmod g-s `which locate`
[root@oldboy ~]# ls -l `which locate`
-rwx--x--x. 1 root slocate 38464 Mar 12 2015 /usr/bin/locate
[root@oldboy ~]# su - oldboy
[oldboy@oldboy ~]$ locate cat
locate: can not stat () `/var/lib/mlocate/mlocate.db': Permission denied
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
3.1 SGID知识小结
# sgid是针对用户组权限位的
# 对于文件来说,sgid的功能如下:
1)sgid仅对二进制命令程序有效
2)二进制命令或程序需要有可行权限x
3)执行命令的任意用户可以获得该命令程序执行期间所属组的权限
# sgid基于目录的功能如下
1) linux里默认情况所有用户创建文件,默认用户和组都是自身。
2) sgid可以让用户再此目录下创建的文件和目录,具有和此目录相同的用户组设置。
setgid位主要用在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所属组权限,而不是创建该文件的用户的默认所有者。这样,使得在多个用户之间共享一个目录中的文件变得简单。提示:用八进制数2000表示setgid 权限位。
# suid和sgid会面临风险,所以尽可能的少用(尤其是使用不当),了解即可
4 特殊权限位数字权限(八进制)方法
setuid位设置用八进制的4000,setgid 占用的是八进制的2000; 比如我们前面所说的chmod 4755 /bin/rm 就是设置的setuid 位;
setuid 设置方法:
其实就是在我们]通过chmod设置文件或目录权限位的数字权限方法的前面多加一个数字4。比如:
[root@oldboy oldboy] # chmod 4755 /bin/rm
#设置rm 的权限为4755,就把setuid位设置好了。
setgid设置方法:
setgid位占用的是八进制的2000 位,其实就是在我们通过chmod设置文件或目录权限位的数字权限方法的前面多加一个数字2。也可以直接设置6755,等于把suid和sgid一并设置
5 特殊权限位数字权限字符表示
# SUID
[root@oldboy ~]# chmod u+s /oldboy/
[root@oldboy ~]# chmod u-s /oldboy/
- 1
- 2
- 3
- 4
# SGID
[root@oldboy ~]# chmod g+s /oldboy/
[root@oldboy ~]# chmod g-s /oldboy/
- 1
- 2
- 3
- 4
6 特殊权限位之粘滞位
粘滞位的功能现在也很少用了,不过对于像/tmp目录这样的,是整个系统临时文件存放地,还是有点意义。一个目录既使它的所有权限都开放rwxrwxrwx,如果是设置了粘贴位,除非目录的属主和root用户才有权限删除它,除此之外其它用户不能删除这个目录。用途一般是把一个文件夹的的权限都打开,然后来共享文件,像/tmp目录一样。方便带来的安全隐患,生产环境我们一般不这样使用!
sticky:比SGID的更安全措施,让多个用户都具有写权限的目录,每个用户只能删自己的文件。表现在other位!用t表示,如果没有执行权限,那么就是T;如果有执行权限,那么就是t表示。
粘滞位sticky对应数字为1000,权限字符t(T),其它用户的x位上设置。
授权方法:
[root@oldboy ~]# chmod 1777 /tmp 或 chmod o+t /tmp
- 1
- 2
如果对应位有x则,字符权限表现为小写,否则表现为大写。
tmp是经典的粘滞位目录案例,特点,谁都有写权限,因此安全成问题,常常是木马第一手跳板地点。
7 文件及目录的归属关系
chown(change owner)
当我们要改变一个文件的属主,我们所使用的用户必须是该文件的属主而且同时是目标属组成员,或超级用户。只有超级用户的才能改变文件的属主。
语法:
# chown [选项]… [所有者][:[组]]文件…
举例:将example.txt文件的属主改为oldboy用户
chown oldboy.root example.txt
- 1
- 2
chown 用户 文件或目录
chown :组 文件或目录 等同于chgrp 组 文件或目录
chown 用户:组 文件或目录
强调:
1)其中的冒号“:”可以用用点号“.”替代
2)要授权的用户和组名,必须是linux系统里实际存在的。
7.1 chown测试
# 以root用户创建一个普通文件,属主和属组都是root
[root@oldboy oldboy]# touch test
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 root root 0 Dec 16 04:55 test
- 1
- 2
- 3
- 4
- 5
- 6
# 只修改改文件的所属主为oldboy
[root@oldboy oldboy]# chown oldboy test
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 oldboy root 0 Dec 16 04:55 test
- 1
- 2
- 3
- 4
- 5
- 6
# 只修改改文件的所属组为incahome(有三种方法)
(1)[root@oldboy oldboy]# chown .incahome test
(2)[root@oldboy oldboy]# chown :incahome test
(3)[root@oldboy oldboy]# chgrp incahome test
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 oldboy incahome 0 Dec 16 04:55 test
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
# 同时修改文件的所属主和所属组为root,root
[root@oldboy oldboy]# chown root:root test #这里的“.”点号可以和“:”冒号互换
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 root root 0 Dec 16 04:55 test
- 1
- 2
- 3
- 4
- 5
- 6
7.2 故障处理
# 有时候我们ls -l可能会看到文件的属性用户和组的那一栏变成了数字,怎么回事并解决
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 503 503 0 Dec 16 05:15 test
- 1
- 2
- 3
- 4
# 原因是所属用户不存在了,重新创建即可
[root@oldboy oldboy]# useradd -u 503 test
[root@oldboy oldboy]# ls -l test
-rw-r--r-- 1 test test 0 Dec 16 05:15 test
- 1
- 2
- 3
- 4
- 5
- 6
8 chattr命令讲解
chattr:改变ext2和ext3文件系统属性(attribute)。可以给文件加锁
[+|-]i:系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的进程只能修改目录之下的文件,不允许建立和删除文件
[+|-]a:可以往文件中追加文件
8.1 chattr测试
# 把/etc/passwd文件加锁,然后看能否创建用户
[root@oldboy ~]# chattr +i /etc/passwd
[root@oldboy ~]# lsattr /etc/passwd
----i--------e- /etc/passwd
[root@oldboy ~]# useradd test2 # 不能创建用户
useradd: cannot open /etc/passwd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
# 解锁文件
[root@oldboy ~]# chattr -i /etc/passwd
[root@oldboy ~]# lsattr /etc/passwd
-------------e- /etc/passwd
[root@oldboy ~]# useradd test2
[root@oldboy ~]# tail -1 /etc/passwd
test2:x:504:504::/home/test2:/bin/bash
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
# a 参数也类似,这里就不再演示了
8.2 使用chattr为Linux系统优化
# 把/etc/passwd,/etc/shadow,/etc/group,/etc/gshaow,/etc/inittab文件加锁
chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshaow /etc/inittab
# 并把可执行文件移动并改名
mv /usr/bin/chattr /etc/oldboy1
mv /usr/bin/lsattr /etc/oldboy2
# 若是忘掉可执行文件改名为什么,那就去其它系统拷贝一份chattr或lsattr的二进制执行文件吧
9 知识总结
主要内容小结:
1、linux的9 位权限及rwx 字符的作用、对应数字及对应的用户和用户组图解
2、linux 文件的权限说明
rwx 对于文件来说表什么意思。
3、linux目录的权限说明。
rwx 对于目录来说代表什么意思。
4、企业生产场景网站录设置权限的原则。
单台服务器网站权限控制方案(upload 服务器)
集群服务器网站权限控制方案(上传、WEB、静态服务)
5、umask 的作月以及和文件、目录的对应的默认权限关系。
特殊权限
6、suid 是什么、作用,passwd 命令案例,rm。做了小结了。
7、sgid 是什么、作用,文件locate案例。共享目录用户组案例。
8、粘滞位是什么、作用,/tmp目录案例。
9、以数字及’ 字符方式更改权限,chmod命令。
10、更改文件用户和组,chown命令。
11、更改用户组的,chgrp,大家多学习。不然被开发取代了。
12、chattr,Isattr 更改文件属性。
13、setfacl 知识不需要了解。
转载至https://blog.csdn.net/mr_rsq/article/details/78884212