Linux分类笔记(一)-权限管理
Linux分类笔记(一) 权限管理
普通权限
文件的普通权限
对一个普通的文件使用ls -ll命令后,看到下面的输出内容
而对于文件权限中的每一位,又分别代表了以下的意思
文件类型又有以下几类:
- [d]:目录
- [-]:文件
- [l]:连接文件
- [b]:可供存储的接口设备
- [c]:串行端口设备,如键盘和鼠标
权限的定义:
- r:可读,普通文件的r代表可以读取该文件的实际内容;目录的r代表可以读取该目录结构列表的权限
- w:可写,普通文件的w代表可以编辑,新增或者修改文件内容,但不能删除该文件;目录的w代表可以更改该目录结构列表的权限如新建,删除,重命名,转移该目录下的文件或目录
- x:可执行,普通文件的x代表该文件可以被系统执行;目录的x代表该目录能否成为工作目录,即能否cd进该目录
普通权限变更命令
注意:各种权限的设置对root无效
- chgrp:改变文件所属用户组
- chgrp [-R] groupname filename/dirname:-R是递归更改目录下的文件
- chown:改变文件所有者(也可以实现chgrp的功能)
- chown [-R] username filename/dirname:只修改所有者
- chown [-R] username:groupname filename/dirname:同时修改所有者和用户组
- chown [-R] .groupname filename/dirname:只修改用户组
- chmod:改变文件的权限
- 数字表达 chmod [-R] num filename/dirname
- r:4
- w:2
- x:1
- 将一个文件的权限设置为-rwxr-xr-x: chmod 7555 file
符号表达
将一个文件的权限设置为-rwxr-xr-x: chmod u=rwx,g=rx,o=rx file
特殊权限
文件的特殊权限
在前面的图中,只有rwx这三个普通权限,但是通过浏览tmp目录和/usr/bin/passwd文件的权限,可以发现多了一些特殊权限
当s出现在文件的所有者标记上,代替了x权限,就称为Set UID,简称为SUID的特殊权限,该权限具有以下功能:
SUID仅对二进制程序有效
执行者对于该程序需要具有x的可执行权限
本权限仅限于在执行该程序的过程中有效
执行者将具有该程序所有者的权限
举例说明:一个普通用户要修改自己的密码,该密码是要写入到文件/etc/shadow中的,而/etc/shadow的权限为
-r-------- 1 root root 1249 Nov 9 15:53 /etc/shadow
可见,只有root用户才具有强制修改的能力,而普通用户是可以通过命令passwd来修改自己的密码,这是因为/usr/bin/passwd文件的SUID让所有的用户在执行这个命令时具有root的权限。
当s出现在用户所有组标记上,代替了x权限,就称为Set GID,简称为SGID。该权限具有以下功能:
SGID应用在文件上:
SGID对二进制程序有用
程序执行者对于该程序来说,需具备x的权限
执行者在执行过程中将会获得该程序用户组的支持
SGID应用在目录上:
用户若对于此目录具有r和x的权限时,该用户能够进入此目录
用户在此目录下的有效用户组将会变成该目录的用户组
若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同
SGID对于项目开发来说非常重要
举例说明:A和B两个开发者分别属于不同的用户组,现在需要使用一个共同的目录(/test),在这个目录里的任何文件都可以被双方任意修改内容和属性,但不允许其他人修改。如果只是简单地把A和B放到同一个用户组(developer)中,并且把该/test目录的用户组设置为developer,那么A在test目录下创建的文件的属性为:-rw-r--r-- 1 A A 0 Nov 9 18:02 file
可见,此时A新创建的文件的用户组仍只属于A,所以B是不能做任何修改的,但只要给test目录设置SGID:chmod 2770 /test,此时不管是A还是B,在这个目录下新建的文件都属于develper用户组,并且A和B都在这个目录下新建文件前都设置umask 为002,,那么双方在这个目录下创建的文件都可以被对方任意的修改,而阻止其他人修改
注意上图中的/tmp目录有一个t标记,这个称为SBIT,只针对目录有效,该权限具有以下功能:
当用户对于此目录具有w,x权限,即具有写入的权限
当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件
举例说明:任何用户都能在/tmp目录下创建文件和目录,但是每一个用户只能在/tmp目录下删除自己的文件和目录,而不能删除其他用户的文件和目录。但是root账户可以删除所有
特殊权限变更命令
同样通过chmod命令来修改特殊权限,通过使用数字表达即可:
SUID:4
SGID:2
SBIT:1
只要在普通权限的前面加上一位即可,例如,要设置一个普通权限为755,并且是SUID,就使用命令:chmod 4755 filename即可
文件默认权限
在新建一个文件或者目录时,会根据umask来生成默认权限,直接输入命令umask或者umask -S可以查看当前设置,注意,umask的分数指的是“该默认值需要减掉的权限”。
默认的情况下:
若用户创建文件,该文件是没有执行权限的,所以最大值为666,即-rw-rw-rw-
若用户创建目录,该目录具有所有的权限,所以最大值为777,即drwxrwxrwx
umask的默认值为0022,第一个0代表的是特殊权限,后面三位代表普通权限
那么:
用户新建文件时:(-rw-rw-rw-) - (-----w--w-) = -rw-r--r--(644)
用户新建目录时:(drwxrwxrwx) - (d----w--w-) = drwxr-xr-x(755)
如果要让新建的文件的默认权限变为664,使用命令umask 002即可,注意:在计算默认权限时不要用数字的减法进行运算,假如umask设置为003,此时666-003=663,会平白多出了一个根本不存在的x权限,所以最好使用符号表达式运算
ACL
ACL是Access Control List的缩写,主要提供更加细粒度的权限设置,ACL可以针对单一用户,单一文件或目录进行r、w、x的权限设置,对于需要特殊权限的使用状况非常有用。
ACL必须要有文件系统的支持才行,目前绝大部分的文件系统都支持ACL功能,尤其是CentOS在默认情况下就加入了acl的支持。
getfacl命令:取得某个文件/目录的ACL设置项目
上图中的有效权限的意思是用户或组所设置的权限必须要存在于mask的权限设置范围内才会有效,即不能超出mask规定的权限
setfacl命令:设置某个目录/文件的ACL规定
用法:setfacl [-bkRd] [{-m | -x}] acl参数 filename
参数:
-m:设置后续的acl参数给文件使用,不可与-x合用
-x:删除后续的acl参数,不可与-m合用
-b:删除所有的acl参数
-k:删除默认的acl参数
-R:递归设置acl,子目录也会被设置acl
-d:设置默认的acl参数,只对目录有效,在该目录新建的数据都会引用该值
举例说明:几个程序员对同一个目录(/home/project)具有完全的权限,但是只允许项目经理(manager)进入到该目录里查看(不允许任何的其他人进入该目录,同时项目经理也不能修改任何的东西)。此时就要使用到acl:
setfacl -m u:manager:rx /home/project
此时的/home/project的状态为:
drwxrws---+ 2 root develop 6 Nov 10 11:41 project
SELinux
SELinux是Security Enhanced Linux的缩写,字面上的意思就是安全强化的Linux,是用来防止资源误用的。
传统的文件系统是使用DAC(自主访问控制)来进行访问控制的,就是根据进程的所有者与文件资源的rwx权限来决定该进程有没有访问能力,DAC有几个要害:
1.root具有最高权限,不受任何限制;
2.如果不小心将目录全设置为777,会让任何人随意访问并更改该目录
而SELinux使用MAC(强制访问控制)来进行访问控制,可以针对特定的进程与特定的文件资源来进行权限的控制!也就是说,即使你是root,那么在使用不同的进程时,你所能取得的权限不一定是root,而要看当时该进程的设置而定。如此一来,我们针对控制的主体变成了进程而不是用户,此外,这个主体进程也不能任意使用系统文件资源,因为每个文件资源也有针对该主体进程设置可取用的权限,SELinux提供了一些默认的策略,并在策略内提供多个规则,让你选择是否启用该控制规则。
举例说明:www服务器软件的实现程序为httpd这个进程,默认情况下,httpd仅能在/var/www这个目录下访问文件,如果httpd这个进程要到其他目录去访问数据,除了规则设置要开放外,目标目录也得设置成httpd可读取的模式才行,所以,即使httpd不小心被黑客取得了控制权,他也无权访问/etc/shadows等重要的配置文件
SELinux的启动和关闭
SELinux支持三种模式:
enforcing:强制模式,代表SELinux正在运行中,且强制限制资源访问
permissive:宽容模式,代表SELinux正在运行中,不过仅会有警告信息并不会实际限制资源的访问,用来调试所用
disabled:关闭
使用命令getenforce可以获取当前的模式,一旦更改了模式,就要重启,有两种切换方式:
如果已经处于enforcing模式,但是由于一些设置导致SELinux让某些服务无法运行,就通过命令setenforce 0 来切换到permissive之间的模式,这样只会让SELinux警告无法顺利连接的信息,而不是直接抵挡主体进程的读取权限,通过setenforce 1从permissive切换到enforcing模式
如果要从disabled切换到启动模式,则要修改配置文件/etc/selinux/config,将SELINUX=disabled修改为SELINUX=enforcing,相反,要关闭SELinux就将SELINUX=enforcing修改为SELINUX=disabled,并重启。
注意,从disabled抓换为enforcing时,开机过程会变得漫长,因为要重新写入SELinux安全上下文
SELinux的决策过程
进程能否通过SELinux取得权限就依靠上图的决策过程,由上图可知,主体程序必须要通过SELinux策略内的规则放行后,就可以与目标资源进行安全上下文(值的是上图中的“安全性本文比对”)的比较,若比较失败则无法访问目标,若比较成功就可以开始访问目标,问题是,最终能否访问目标还是要与文件系统的rwx权限设置有关,如此一来,当出现了权限不符合的问题后,就要根据上图一步一步地分析问题。
那么安全上下文究竟是什么?
使用命令ls -Z就可以查看,如下图所示,主要由三个部分组成这个安全上下文
那么在上图中的/usr/sbin/httpd进程又是如何通过SELinux决策访问到/var/www/html/目录下的文件?
首先,/usr/sbin/httpd这个文件具有httpd_exec_t这个类型,在执行这个文件的时候,会让这个文件的主体进程具有httpd这个域,而SELinux的策略中已经针对这个域制定了很多的规则,其中的一条规则就是允许这个域能够读取httpd_sys_content_t这个类型的目标文件,因此,只要把网页放置在/var/www/html目录下,就能被httpd进程读取
但是最终读取文件的限制,就是因为普通权限中含有rx
关于SELinux的策略和规则管理,更详细的内容参考这里:
http://vbird.dic.ksu.edu.tw/linux_basic/0440processcontrol.php
SElinux的运行例子
成功
在/var/www/html目录下新建一个文件并写入内容:
echo “First page” > /var/www/html/index.html
然后在浏览器输入网址http://192.168.1.112,就能看到页面显示First page
这是因为在/var/www/html目录下新建的index.html文件的权限如下:
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 index.html
失败
删除刚才在/var/www/html目录下新建的index.html文件
rm -f /var/www/html/index.html
然后在/tmp目录下新建一个文件并写入内容:
echo “Second page” > /var/www/html/index.html
mv index.html /var/www/html
然后在浏览器输入网址http://192.168.1.112/index.html(记得指定index.html否则会变成欢迎页面),弹出了错误提示:“You don't have permission to access /index1.html on this server.”
因为此时的index1.html的权限如下:
-rw-r--r--. root root unconfined_u:object_r:user_tmp_t:s0 index1.html
留意与上面index.html文件不同的地方(灰色字体),因为httpd进程不能读取user_tmp_t类型的目标文件。这就是SELinux的强大之处
安装setroubleshoot
其实你可以不使用工具就分析SELinux的问题,你可以打开日志文件/var/log/audit/audit.log来直接查找,但是这个日志文件的记录形式让你几乎不能解读,所以使用setroubleshoot来处理Selinux所带来的问题,直接使用yum安装即可:
yum install setroubleshoot setools -y
在安装完成后,就可以使用一个名为sealert的命令来分析日志,这个命令会扫描整个日志文件并识别出SELinux的部分,运行命令:
sealert -a /var/log/audit/audit.log
在前面的例子中已经产生了一个SELinux的问题,所以在我这里可以扫描出内容:
运行在结果中提示的解决方法就可解决SELinux的问题
Linux分类笔记(一)-权限管理的更多相关文章
- Linux学习笔记(五) 账号管理
1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Linux用户及文件权限管理
Linux用户及文件权限管理
- Linux课程---10、权限管理(权限有哪几种)
Linux课程---10.权限管理(权限有哪几种) 一.总结 一句话总结: r 读 w 写 x 执行 1.drwxr-x--- 2 root root 4096 Jan 20 19:39 mnt ...
- Linux 用户和文件权限管理
Linux —— 用户权限管理 权限: 为什么需要权限管理? 1.计算机资源有限,我们需要合理的分配计算机资源. 2.Linux是一个多用户系统,对于每一个用户来说,个人隐私的保护是十分重 ...
- Linux UGO和ACL权限管理
自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序.文件.进程)的拥有者可以任意修改或者授予此对象相应的权限.Linux的UGO(User, Grou ...
- Linux(3)用户和权限管理
用户, 权限管理 Linux中root账号通常用于系统的维护和管理, 它对操作系统的所有部分具有不受限制的访问权限 在Unix/Linux安装过程中, 系统会自动创建许多用户账号, 而这些默认的用户就 ...
- Linux系统文件与目录权限管理
Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读 read w 写 write x ...
- Linux系列教程(五)——Linux链接命令和权限管理命令
前一篇博客我们讲解了Linux文件和目录处理命令,还是老生常淡,对于新手而言,我们不需要完全记住命令的详细语法,记住该命令能完成什么功能,然后需要的时候去查就好了,用的多了我们就自然记住了.这篇博客我 ...
随机推荐
- mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- fancybox的使用
fancybox,个人没有深入了解,只是为了工作需要,做的一些界面,主要是用的AJAX功能. 首先,需要下载fancybox的js文件以及CSS文件(可能用不到) 其次,在页面中引入 <scri ...
- 邮件工具类--EmailUtil
/* Copyright Notice ===================================================* * This file contains propri ...
- 关于相对路径和绝对路径及cd命令的使用
cd (change directory) 目录 跳转到指定目录下 路径定义分为两种:绝对路径(absolute)和相对路径(relative) 绝对路径:从根目录(/)开始写去的文件名或目录名 ...
- Python_sklearn机器学习库学习笔记(五)k-means(聚类)
# K的选择:肘部法则 如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量.肘部法则会把不同 值的成本函数值画出来.随着 值的增大,平均畸变程度会减小:每个类包含的样本数会减少,于是样本 ...
- IIS设置允许下载.exe文件解决方法(转)
最近很多客户使用IIS服务器,然后提示返现宝下载无法找到等无法下载的问题. 返现宝是.exe安装文件,部分服务器或主机可能无法下载. 第一.如果是自己服务器或VPS请按如下设置: 1.设置MIME,让 ...
- (转)工作之路---记录LZ如何在两年半的时间内升为PM
原文地址:http://www.cnblogs.com/zuoxiaolong/p/life31.html 引言 之前的伪PM纠结之路已经渐渐结束,LZ也终于正式爬上了PM的位置,对于LZ来说,这个时 ...
- SQL Server批量更新数据
项目中有一个位置需要批量插入几万条数据,批量insert等待时间简直...用SqlBulkCopy后,之前需要1分钟左右的sql现在只要一眨眼(真的只要一眨眼) 稍后这个功能要加到另外一个项目中,另外 ...
- CSS3 动画记
css3 动画 在CSS3中可以通过animation创建复杂的动画序列,像transition属性一样用来控制CSS的属性实现动画效果. animation实现动画效果主要由两个部分组成. 通过类似 ...
- css3 web字体记
css3 web字体 @font-face语法 @font-face能够加载服务器端的字体,让客户端浏览器显示客户端没有安装的字体. @font-face{ font-family:<YourW ...