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分类笔记(一)-权限管理的更多相关文章

  1. Linux学习笔记(五) 账号管理

    1.用户与组账号 用户账号:包括实际人员和逻辑性对象(例如应用程序执行特定工作的账号) 每一个用户账号包含一个唯一的用户 ID 和组 ID 标准用户是系统安装过程中自动创建的用户账号,其中除 root ...

  2. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

  3. Linux用户及文件权限管理

    Linux用户及文件权限管理

  4. Linux课程---10、权限管理(权限有哪几种)

    Linux课程---10.权限管理(权限有哪几种) 一.总结 一句话总结: r 读 w 写 x 执行 1.drwxr-x---  2 root root  4096 Jan 20 19:39 mnt ...

  5. Linux 用户和文件权限管理

    Linux —— 用户权限管理 权限: 为什么需要权限管理?    1.计算机资源有限,我们需要合理的分配计算机资源.    2.Linux是一个多用户系统,对于每一个用户来说,个人隐私的保护是十分重 ...

  6. Linux UGO和ACL权限管理

    自主访问控制(Discretionary Access Control, DAC)是指对象(比如程序.文件.进程)的拥有者可以任意修改或者授予此对象相应的权限.Linux的UGO(User, Grou ...

  7. Linux(3)用户和权限管理

    用户, 权限管理 Linux中root账号通常用于系统的维护和管理, 它对操作系统的所有部分具有不受限制的访问权限 在Unix/Linux安装过程中, 系统会自动创建许多用户账号, 而这些默认的用户就 ...

  8. Linux系统文件与目录权限管理

    Linux文件目录权限管理 一.Linux文件属性及权限 1.Linux文件及目录权限及属性说明 (1)权限及属性说明 (2)文件权限说明 三种权限说明:r 读  read w 写  write  x ...

  9. Linux系列教程(五)——Linux链接命令和权限管理命令

    前一篇博客我们讲解了Linux文件和目录处理命令,还是老生常淡,对于新手而言,我们不需要完全记住命令的详细语法,记住该命令能完成什么功能,然后需要的时候去查就好了,用的多了我们就自然记住了.这篇博客我 ...

随机推荐

  1. C#面向对象(一) 封装

    一.什么叫做面向对象封装? 封装的概念:隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读取和修改的访问级别. 二.面向对象封装有什么好处(为什么要封装)? 封装的目的:是增强安全性和简化 ...

  2. Steps to disable DRLs with GM Tech2 scanner

    It is possible to get daytime running time disabled manually. But the problem can be easily settled ...

  3. JavaScript 正则表达式相关理解

    1.使用正则的test.exec方法而且带有g属性进行连续匹配的时候, 如果每次匹配之前 lastIndex属性没有清零. <script> var str='123qweQWE125|2 ...

  4. ArcMap运行时出现Runtime Error错误的解决方案

    运行ArcMap时弹出错误提示:“Microsoft Visual C++ Runtime Library. Runtime 1.开始->运行->regsvr32 "C:\Pro ...

  5. div 并排

    <style type="text/css">#d1 {float:left;background:#f00;}#d2 {float:left;background:# ...

  6. python(3)-内置函数

    >>> abs(-1) #绝对值,小数也可以,不能是其它字符 1 >>> all([1,2,3,4,5,6,7]) #如果传入的列表所有元素都为真,则True Tr ...

  7. sql语句判断方法之一

    sql语句判断方法之一CASE语句用法总结 背景: Case具有两种格式.简单Case函数和Case搜索函数. --简单Case函数 CASE sex WHEN '1' THEN '男' WHEN ' ...

  8. SSH整合_struts.xml 模板

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "- ...

  9. 直接查数据导出xls

    直接查数据导出xls/usr/bin/mysql --default-character-set=utf8 -uroot -p"123456" -e"select * f ...

  10. ASP多行多列显示代码

    <table width="98%" border="0" align="center"> <tr> <% S ...