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的问题

时间: 2025-01-06 20:55:10

Linux分类笔记(一)-权限管理的相关文章

linux学习笔记之权限管理

umask 目录:777-umask 文件:666-umask    touch后的权限 umask=023 文件默认不具有执行权限 touch a.txt mod=643--->可执行,自动加1.变为644. 对目录:mkdir bb mod=754不改变 suid sgid sticky  只能删除自己创建的文件 chmod u+s a suid  当前用户具有文件宿主的权限 sgid  当前用户组具有目录宿主的权限,目录宿主. sticky    多个用户在此目录创建的文件,只能由宿主删除

Linux的用户和权限管理

欢迎大家来到我的博客,首先声明此文是我的***作:若文中有不当之处,还请各位前辈大神多多指点,小生在这里先谢过了.生活总有各种不如意,对我来说眼前的一切就是最好的安排:说实话我并不是很喜欢软件这个专业,我是一个文科男,软件世界里的沟沟坎坎对我来说走起来真的有些吃力,来到大学莫名其妙的进了这个专业,成了IT大海里一个小石头.没办法,既来之则安之:唯有迎头向前才能彰显我辈精神啊:大学毕业我这个小石头便阴差阳错的接触到了软件运维这个行业,带着满满的信心怀揣着美好的前景我加入的Linux培训的大军.这不

Oracle笔记之权限管理

权限管理 1,默认的三个用户 2,创建用户 3,授权,撤销权限 4,系统权限与对象权限 5,角色 6,通过角色对权限进行管理 7,权限的传递,丢失管理员密码怎么办 3个默认的用户 用户名        密码 sys            change_on_install system      manager scott          tiger cmd 进入命令行 sqlplus / as sysdba; 或者 sqlplus sys/change_on_install as sysdb

Linux学习笔记一 磁盘管理常用命令

Linux学习笔记一 磁盘管理常用命令 Linux系统下,一切均是文件,磁盘是一种特殊的块设备文件. 常用的硬盘接口类型 并口:IDE ,SCSI 串口:SATA,SAS 磁盘设备文件设备文件的命令规则: IDE: 设备名为/dev/hda, /dev/hdb-.  (末尾的a ,b-代表不同的IDE硬盘) SCSI:设备名为/dev/sda, /dev/sdb-.(末尾的a,b-代表不用的SCSI硬盘 机械式硬盘: track: 磁道(盘面上由外向里划分成不同的磁道) cylinder: 柱面

Linux/Centos7账号与权限管理(超详细实例操作)

Linux/Centos7账号与权限管理 管理用户账号.组账号 查询账号信息 设置文件和目录的权限 设置文件和目录的归属 一.前言概述 ? 作为多用户.多任务(Multi-Users,Multi-tasks)的服务器操作系统,Linux提供了严格的权限管理机制,主要从用户身份.文件权限两个方面对资源进行限制.Linux基于用户身份对资源访问进行控制. 用户账号类别: 超级用户--root,权限最高 普通用户--自定义用户 匿名用户(nobody)类似于Windows中的Guest 程序用户--控

Linux用户和组权限管理

一.文件的权限 文件的权限主要针对三类对象进行定义 owner:属主u:   group:属组g:    other :其他o 每个文件针对每类访问者都定义了三种权限: r:Readable   w: Writable    x: eXcutable 对文件来说 r: 可使用文件查看类工具获取其内容 w: 可修改其内容 x: 可以把此文件提请内核启动为一个进程 对目录来说 r : 可以使用ls查看此目录中文件列表 w: 可在此目录中创建文件,也可删除此目录中的文件 x: 可以使用ls -l查看此

Linux的用户与权限管理

1.linux操作系统用户及用户组 Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限:每当我们使用用户名登录操作系统时,linux都会对该用户进行认证.授权审计等操作.操作系统为了识别每个用户,会给每个用户定义一个ID,就是UID.用户组就相当于多个用户的容器:在linux系统中,用户组也有一个ID,GID. 1.1 linux操作系统用户 在linux中,用户分为两大类:管理员用户和普通用

Linux用户及文件权限管理

用户及文件权限管理 一.实验介绍 1.1 实验内容 Linux 中创建.删除用户,及用户组等操作. Linux 中的文件权限设置. 1.2 实验知识点 Linux 用户管理 Linux 权限管理 二.Linux 用户管理 通过第一节课程的学习,你应该已经知道,Linux 是一个可以实现多用户登陆的操作系统,比如"李雷"和"韩梅梅"都可以同时登陆同一台主机,他们共享一些主机的资源,但他们也分别有自己的用户空间,用于存放各自的文件.但实际上他们的文件都是放在同一个物理磁

Linux下用户组和权限管理

前言:此次验证操作环境为CentOS7.3,及CentOS6.9. 人员账号的管理是身为运维人员必要掌握的技能之一.其工作中的用途甚至比文件安全.软件配置更为广泛.对用户组及其相关权限有个清晰的认识,有利于我们工作学习的开展.下面就我个人理解,在此斗胆做个总结. 我们知道,当用ll或ls –l去查看目录下文件时,往往会得到如下的结果. drwxrwxr-x. 2 magedu magedu 6 Jul 21 21:03 magedu -rw-r--r--. 1 root   root   0 J