L016-linux系统文件权限体系实战深入讲解小节
L016-linux系统文件权限体系实战深入讲解小节
不知道今天能不能写完哈,能写完发出来就是这周发两次小结了,有进步哦,不过L015和L016两节课内容也确实不多,进入正题
上一课学到了chmod、chown、umask,相对于比较基础的命令,那么这节就要接触这两个命令了,虽然老师也说了,不常用!
setuid和setgid
一、setuid
我们先来看看怎么查看一个文件是否有setuid的属性,然后再来总结他的功能把。
[root@moban ~]# ls -l `which passwd`
-rwsr-xr-x. root root Feb /usr/bin/passwd
仔细看,看到黄色背景的s没?对头,这就是setuid的标志,那么可能会问,原来的x怎么办?有x为s,没有x为S,就是大小写。
直接小结:
1)用户对应的前三位的x位上如果有s就表示suid。当x位上没有x的时候,suid就是S。
2)setuid位是让普通用户可以root(或其他)用户的角色运行只有root(或其他)帐号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。(注意和su及sudo的区别)
直接看结论文字可能很难理解,那么下面用一个实例来理解一下:
通过给rm命令设置suid加深理解
首先使用传统的方法来解决(sudo)
1)使用sudo
sudo是学过的一种方法(尚方宝剑)
系统管理员:root
普通账户:oldboy
我在oldboy帐号上想删除test.txt
[oldboy@moban oldboy]$ rm -f test.sh
rm: cannot remove `test.sh': Permission denied //妈呀,权限不够
这是因为我们普通用户并没有使用“rm”的权限,所以我们可以在sudo中填加“rm”命令:
[root@moban oldboy]# visudo
进入visudo配置文件后,转到第89行(89gg)
oldboy ALL=(ALL) NOPASSWD:ALL,/bin/rm
加入的为/bin/rm(rm的绝对路径)
然后保存退出,再尝试下
[oldboy@moban oldboy]$ sudo rm -f test.sh //成功删除,木有问题
2)现在开始使用setuid(新方法,应用程度更广)
系统管理员:root
普通账户:oldboy
此刻:
我在oldboy帐号上想删除test.txt
[oldboy@moban oldboy]$ rm -f test.sh
rm: cannot remove `test.sh': Permission denied //妈呀,权限不够
为啥?
权限不够,什么权限不够?这里一定要注意,跟文件毛关系都没有,跟你的命令有关系
删除用的是“rm”命令,那么查看一下这个rm的权限
[root@moban oldboy]# ll `which rm|tail -` //用到tail是因为which rm有两行结果,ll只能显示一个,所以用tail -1显示最后一行。
-rwxr-xr-x. root root Nov /bin/rm
由上面可以看出因为oldboy是普通用户,没有删除权限。那么用什么命令呢?对,就是setuid。
用root赋予rm的setuid权限:
[root@moban oldboy]# chmod u-s `which rm | tail -`
[root@moban oldboy]# ll `which rm | tail -`
-rwsr-xr-x. root root Nov /bin/rm //由此可以看到了属主的x位变为s了
设置好后,我们用oldboy帐号删除test.sh
[oldboy@moban oldboy]$ rm -f test.sh
OK成功删除
那么再来个小节吧:
suid知识小节:suid修改的是执行的命令,而不是处理的目标文件
[root@moban oldboy]# chmod u+s test.sh //不使用数字加权限
[root@moban oldboy]# ll test.sh
-rwSr--r-- root root May : test.sh
下面这段话很重要:
从rm的信息可以看出来rm命令文件是属主是root,也就是说rm有setuid权限的话,其他普通用户使用rm时都是对应的root对rm命令的权限,如果rm的属主是oldboy,那么其他用户使用rm的权限是对应oldbo对rm命令的权限。这点一定要清楚。
那么,如果想知道系统中都有哪些命令有suid权限呢?
[root@moban ~]# find /usr/bin/ -type f -perm //perm就是find命令里加权限的参数
/usr/bin/crontab
/usr/bin/chage
/usr/bin/pkexec
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/newgrp
/usr/bin/at
也可以这样,更清晰,更直观
[root@moban ~]# find /usr/bin/ -type f -perm -exec ls -l {} \;
-rwsr-xr-x. root root Nov /usr/bin/crontab
-rwsr-xr-x. root root Dec /usr/bin/chage
-rwsr-xr-x. root root Sep /usr/bin/pkexec
-rwsr-xr-x. root root Feb /usr/bin/passwd
-rwsr-xr-x. root root Dec /usr/bin/gpasswd
-rwsr-xr-x. root root Dec /usr/bin/newgrp
-rwsr-xr-x. root root Jan /usr/bin/at
总体结论:
1)suid修改的执行的命令,而不是处理的目标文件。
2)仅对二进制命令程序或程序有效,不能用在shell等类似脚本文件上(因为shell脚本仅仅是调用二进制程序而已,因此,具体权限还需要看二进制命令本身)。
3)二进制命令或程序需要有可执行权限x。
4)suid权限仅在程序执行过程中有效。
5)执行命令的任意系统用户都可以获得该程序命令程序执行期间拥有者的权限
6)suid是一把双刃剑,对系统安全有一定的威胁。系统suid的无用的功能取消suid权利(安全优化)
二、setgid
与sgid不同的是,sgid既可以针对文件也可以针对目录设置!sgid是针对用户组权限修改的。
sgid知识小节
对于文件,sgid的功能如下:
1)sgid仅对二进制命令程序有效。
2)二进制命令或程序需要可执行权限x。
3)执行程序的人以用户可以获得该命令程序执行期间所属组的权限。
对于目录:sgid的功能如下:
用户在此目录下创建文件和目录,具有次目录相同的用户组。
setgid位主要用在目录中,当为某个目录设置了setgid位以后,在该目录中新创建的文件具有该目录的所有者权限,而不是创建该文件的用户的默认所有者,这样,使得在多个用户之间共享目录中的文件变得简单。提示:用八进制数2000表示setgid权限位。
上面,我们把setuid和setgid分别做了总结和说明,下面我们把setuid和setgid一起总结一下,看看他们的区别:
命令形式上的区别:suid是针对用户 sgid针对用户组
setuid和setgid设置说明:
特殊权限位数字权限(八进制)方法
setuid位是设置用八进制的4000,setgid占用的是八进制的2000;比如我们前面所说的chmod 4755 /bin/rm 就是设置的setuid位;
setuid设置方法:
[root@moban admins]# chmod /bin/rm //设置rm的权限为4755,就把setuid位设置好了。就是一个4
另一种方法:
[root@moban admins]# chmod u+s /bin/rm
setgid设置方法:
[root@moban admins]# chmod /home/admins/ //设置admins目录的权限为2755,就把setgid设置好了,就是一个2
另一种方法:
[root@moban admins]# chmod g+s /home/admins/
另一种情况
如果需要同时设置setuid和setgid,可以设为6:
[root@moban admins]# chmod /home/admins/
优先级关系:suid的优先级比sgid高
三、sbit粘滞位
粘滞位在权限中显示为t,有执行权限的显示为T,是在显示在其他用户权限中
那么什么是粘滞位?
系统中自带的粘滞位为根目录下的tmp(经典的粘滞位目录),有了粘滞位以后各用户用户组的小朋友均可以在目录里面创建文件,而且每个人只能管理自己所创建的东西,其他的人是无法操作的。
tmp 是经典的粘滞位目录,特别,谁都有写权限,因此安全成问题,常常的木马第一手跳板地点。
特殊权限为对应的数字:
suid 4000 s
sgid 2000 s
粘滞位:1000 t
chmod7755 test //同时设置suid,sgid和sbit
其实如果想同时设置的话,就是把他们相加。
四、文件属性和文件系统属性的关系
chattr 和 lasttr
这两个命令在之前linux系统优化的时候讲到过,当时是讲到的用’+i‘和’-i‘参数来给命令上锁解锁,起到一个系统防护的作用,那这堂课呢,主要讲的是’+a‘和‘-a’参数,下面我们来一起详细的看吧。
chattr +i
使用chattr +i来锁定命令文件,这样文件不能被删除、改名、设定链接关系,同时不能写入或新增内容。i参数对于文件 系统的安全设置有很大帮助。
chattr +a
a:即append,设定该参数后,只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设定这个属性。
那我们来做一个试例吧:
[root@moban home]# cat ceshi.txt
ajfksd
ajfksd
ajfksd
[root@moban home]# chattr +a ceshi.txt
[root@moban home]# echo ajfksd >> ceshi.txt
[root@moban home]# echo ajfksd > ceshi.txt //全部替换,提示没有权限
-bash: ceshi.txt: Operation not permitted
通过上面试例就可以明白,大家都可以在一个文件里面填加,但是修改什么的就还是算了,没有权利!
lsattr
至于lsattr自然是查询设置权限的文件目录了
[root@moban home]# lsattr //一目了然
-------------e- ./lll
-----a-------e- ./ceshi.txt
-------------e- ./www
-------------e- ./oldgirl
-------------e- ./kkk
-------------e- ./o.txt
-------------e- ./test
-------------e- ./oldboy
-------------e- ./mysql
-------------e- ./apache
-------------e- ./oldsister
-------------e- ./admins
最后可以看一看这个文章,写的非常全面:http://www.ha97.com/5172.html
setfacl与getfacl
单独使某一文件对应某一用户权限,排他性
老师说这个用的很少,所以略过,知道其是做什么用的即可。主做了解就可以了。
感悟:
针对suid以及sgid,工作中尽量不使用,多使用sudo来管理,如果有可能的话我们要查找系统无用suid位的命令等,进行撤除。sS都是suid,sgid(用户位),sgid(用户组位)的标识,和x重合的时候,就是显示小写的字母s。
L016-linux系统文件权限体系实战深入讲解小节的更多相关文章
- Linux系统文件权限体系详解
准备工作:先简单了解Linux文件权限 在Linux系统中,ls -l 命令可以查看文件的权限,如 [zhaohuizhen@localhost Test]$ ls -l a -rw-rw-r--. ...
- L015-linux系统文件权限体系手把手详解小结
L015-linux系统文件权限体系手把手详解小结 2016-5-24 今天星期二,昨天和今天利用一些闲散时间把第15节课学完了,最近有点懒散哈,还得努力才是.. 这节课内容不多,扩展的也少,主要就是 ...
- Linux系统文件权限管理(6)
Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限,每当我们使用用户名登录操作系统时,linux ...
- linux系统文件权限
Linux文件权限详解 文件和目录权限概述 在linux中的每一个文件或目录都包含有访问权限,这些访问权限决定了谁能访问和如何访问这些文件和目录.通过设定权限可以从以下三种访问方式限制访问权限:只允许 ...
- Linux系统文件权限&目录权限
linux系统一切都是文件,文件和目录的所属与权限--来分别规定所有者.所有组.其余人的读.写.执行权限. 读(read),写(write),执行(excute)简写为(r.w.x),也可以以用(4. ...
- Linux系统文件与目录权限管理
Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读 read w 写 write x ...
- linux用户管理,linux用户口令管理,linux用户组管理,linux用户权限管理详解
linux用户管理 http://www.qq210.com/shoutu/android 用户账号的添加(新加用户需添加用户口令) :增加用户账号就是在/etc/passwd文件中为新用户增加一条记 ...
- Linux运维项目实战系列
Linux运维项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-项目实战2-实现基于LVS负载均衡集群的电商网站架构 2.1项目实战2.1-nginx 反向 ...
- Linux文件权限与属性详解 之 SUID、SGID & SBIT
Linux文件权限与属性详解 之 一般权限 Linux文件权限与属性详解 之 ACL Linux文件权限与属性详解 之 SUID.SGID & SBIT Linux文件权限与属性详解 之 ch ...
随机推荐
- 死磕salt系列-salt配置文件
这篇文件主要用来解释一下salt配置中常用的参数,其他的参数可以参考官网文档. 基础参数 interface: 服务器监听地址. ipv6: 是否启用ipv6. max_open_files: 最大文 ...
- BZOJ4446:[SCOI2015]小凸玩密室(树形DP)
Description 小凸和小方相约玩密室逃脱,这个密室是一棵有n个节点的完全二叉树,每个节点有一个灯泡.点亮所有灯泡即可逃出密室. 每个灯泡有个权值Ai,每条边也有个权值bi.点亮第1个灯泡不需要 ...
- Python常用库之二:Pandas
Pandas是用于数据操纵和分析,建立在Numpy之上的.Pandas为Python带来了两种新的数据结构:Pandas Series和Pandas DataFrame,借助这两种数据结构,我们能够轻 ...
- 【jQuery】学习jQuery插件的使用与写法(表单验证插件-validation)
最新最全的插件可以从jQuery官方网站的插件板块下载,网站地址为:http://plugins.jquery.com/ Validation优点:内置验证规则:自定义验证规则:简单强大的验证信息提示 ...
- vue项目在ie浏览器和360浏览器的兼容模式下不显示,出现promise未定义问题
出现“promise未定义”问题,因为对es6不兼容 在项目中安装 babel-polyfill 依赖包 ① npm install babel-polyfill --save-dev ② 在main ...
- Java中的IO流(六)
上一篇<Java中的IO流(五)>把流中的打印流PrintStream,PrintWriter,序列流SequenceInputStream以及结合之前所记录的知识点完成了文件的切割与文件 ...
- 【腾讯敏捷转型No.5】需求没做完可以发布嘛
很多人对于敏捷的第一直觉就是“快”,开发快,测试快,发布快,并不知道如何把这个“快”应用到敏捷实践中,下面我们来分析一下导致工作效率低的核心原因.没有使用敏捷之前,在大多数情况下,项目管理都需要开各种 ...
- c#使用emit方法DB,实体相互转换
网上有很多ORM框架和数据库转换方法. c#由EF控制,但是大家知道的是影响效率和底层控制. 因此最近几个月一直在研究.最后产出了Hikari数据库连接池. 但是该库只是定位在连接池,无法有效进行后续 ...
- #leetcode刷题之路21-合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例:输入:1->2->4, 1->3->4输出:1->1->2-&g ...
- VmWare入门指南
记得以前有大佬曾教过我们用win10的自带双系统运行Ubuntu,但这玩意儿好像玩起来并不简单(反正本人试了一上午也没成功),而且这个系统是和windows交互的,我们也很难调整性能参数.今天,我来教 ...