Linux 文件系统权限管理

一.RWX-UGO的权限控制

Linux的RWX权限控制又称为DAC(Discretionary Access Control,自主访问控制)。DAC 机制就是指对象的拥有者可以任意修改或授予此对象相应的权限。从主体和客体的角度来说,就是主体对其拥有的客体,有权决定自己和其他主体对该客体应具有怎样的访问权限比如在Linux中的某个用户A可以随意设定UGO(即:本用户、本用户组、其他用户)对该文件的RWX(即:读、写、执行)权限。

1).权限对象

  • owner :文件拥有者
  • group :用户组
  • others:非文件拥有者,或者是用户组以外的人,其他人

2).权限类型

rwx    rwx    rwx   
属主   属组    其他人 
例:
drwxr-xr-x.  2 root root   4096 Mar  1 05:09 ssl
  • r (Read ,读取): 对文件而言,具有读取文件内容的权限; 对目录而言,具有浏览目录的权限。

  • w (Write,写入) 对文件而言,具有新增修改删除文件内容的权限;对目录而言,具有新建,删除,修改,移动目录内文件的权限。

  • x (eXecute,执行) :对文件而言,具有执行文件的权限;对目录而言,该用户拥有了进入目录的权限。(可以cd到此目录下,并且可以使用ls -l来获取文件的详细属性信息)

  • 一个文件只有读的权限,文件所有者是否可以写这个文件?

[root@localhost tmp]# ls -l
total 0
-r--r--r--. 1 root root 0 Mar 13 19:16 file
[root@localhost tmp]# vim file
[root@localhost tmp]# cat file
hello world!(这是我写入的内容)
  • 结论:文件所有者一定可以写文件。
    比如就像root可以对shadow强制写。 因shadow的拥有者是root

    在这里插入图片描述

二.文件权限判断逻辑

  • 删除文件:对文件所在目录W权限
    判断用户的身份,用户以什么身份去删除文件,owner—>group—>others
    如果是目录的属主:目录权限位的左三位需要有w权限,若有则成功,无则失败
    如果不是目录的属主,是属组,目录权限位中三位需要有w权限,若有则成功,无则失败
    如果是其他人,目录权限位中的右三位需要有w权限,若有则成功,无则失败

  • 目录的只读访问不允许使用cd进入目录,必须要有执行权限才能进入

  • 只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需要读取权限

  • 目录的w位不设置,即使你拥有目录中某个文件的w权限也不能写该文件

三.权限管理类命令

  • 1).chmod命令

chmod命令用于改变linux系统文件或目录的访问权限,用它控制文件或目录的访问权限。

u 属主
g 属组
o 其他
a 全部
-R 递归修改

1.赋权表示法

实例:
[root@localhost tmp]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 13 05:21 file
[root@localhost tmp]# chmod u=rwx file
[root@localhost tmp]# ls -l
total 0
-rwxr--r--. 1 root root 0 Mar 13 05:21 file
[root@localhost tmp]# chmod g=rwx file
[root@localhost tmp]# chmod o=rwx file
[root@localhost tmp]# ls -l
total 0
-rwxrwxrwx. 1 root root 0 Mar 13 05:21 file
[root@localhost tmp]# chmod a=x file
[root@localhost tmp]# ls -l
total 0
---x--x--x. 1 root root 0 Mar 13 05:21 file
  • 你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组
    2.授权表示法
实例:
[root@localhost tmp]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 13 05:24 file
[root@localhost tmp]# chmod a+x file
[root@localhost tmp]# ls -l
total 0
-rwxr-xr-x. 1 root root 0 Mar 13 05:24 file
[root@localhost tmp]# chmod a-r file(可以加也可以减)
[root@localhost tmp]# ls -l
total 0
--wx--x--x. 1 root root 0 Mar 13 05:24 file
u,g,o同上方法
  • 2). chown命令

(chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID;组可以是组名或者组ID。系统管理员经常使用chown命令,在将文件拷贝到另一个用户的名录下之后,让用户拥有使用该文件的权限。
命令功能: 通过chown改变文件的拥有者和群组。 在更改文件的所有者或所属群组时,可以使用用户名称和用户识别码设置。普通用户不能将自己的文件改变成其他的拥有者。其操作权限一般为管理员。

用法:chown [选项]… [所有者][:[组]] 文件…

-R 处理指定目录以及其子目录下的所有文件(递归修改)
实例:
[root@localhost ~]# groupadd kobi
[root@localhost tmp]# ls -l
total 0
-rw-r--r--. 1 root root 0 Mar 13 05:21 file
[root@localhost tmp]# chown root:kobi file
[root@localhost tmp]# ll
total 0
--wx--x--x. 1 root kobi 0 Mar 13 05:24 file
[root@localhost tmp]# chown root:jerry file
[root@localhost tmp]# ll
total 0
--wx--x--x. 1 root jerry 0 Mar 13 05:24 file
[root@localhost tmp]# chown jerry file
[root@localhost tmp]# ll
total 0
--wx--x--x. 1 jerry jerry 0 Mar 13 05:24 file(jerry是用户不是组)
  • 3).chgrp命令

(该命令改变指定指定文件所属的用户组,仅管理员可以修改文件的属主和属组)
用法:chgrp [选项] [组] [文件]

实例:
[root@localhost tmp]# ll
total 0
--wx--x--x. 1 jerry jerry 0 Mar 13 05:24 file
[root@localhost tmp]# chgrp root file
[root@localhost tmp]# ll
total 0
--wx--x--x. 1 jerry root 0 Mar 13 05:24 file

四.进程的安全上下文

(进程对文件访问权限的应用模型。 发起进程的用户对文件的访问权限是什么,那么进程对文件的访问权限就是什么

进程的属主,与文件的属主是否相同,如果相同,则应用属主权限。
否则,检查进程的属主是否和文件的属组相同,如果相同,则应用属组的权限。
否则,使用other权限。

将一个文件运行成为一个进程,取决于用户是否对这个文件有x权限,可执行权限

五.ACL(Access Control List)

访问控制列表

ACL允许你给任何的用户或用户组设置任何文件/目录的访问权限。

  • 针对用户设置权限

  • 针对用户组设置权限

  • 子文件或者子目录继承父目录的权限

  • 1).setfacl命令

使用 setfacl 命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制

-m 配置ACL
-x 删除ACL参数
-b 移除所有的ACL权限
-R 递归配置
  • 2).getfacl命令

-R 递归配置

例1:设置用户curry对文件file拥有的rwx权限 ,curry不属于file的所属主和组,curry是other,怎么做?
在这里插入图片描述
当给boboyu用户添加了扩展权限ACL后,在它的用户下就可以看到其他用户权限后面多了一个+号,并且可以写该文件,并且该文件依然只属于root用户和root组
在这里插入图片描述
当切换到kd用户下,不能写该文件
在这里插入图片描述
在curry用户下就可以写此文件
在这里插入图片描述

例2.给目录加权限
有d参数:
在这里插入图片描述

六.权限掩码

umask(默认为022)
文件的默认权限是666,目录的默认权限是777

  • 文件默认权限:凡是减的结果中有执行权限,需要加1
    666-umask 644
  • 目录的默认权限777-umask 755
    权限科学的计算方法:

1、将默认权限(目录777,文件666)和umask值都转换为2进制
2、对umask取反
3、将默认权限和umask取反后的值做与运算
4、将得到的二进制值再转换8进制,即为权限

实例umask为 033

6   6   6           umask   0   3    3

110 110 110               000 011  011 # 转成2进制

                          111 100  100 # umask取反的值

110 110 110   
与             #默认权限和umask取反后的值做与运算
111 100 100    # umask取反的值

110  100  100
6    4    4     #转成8进制

七.文件的特殊权限

SUID SGID SBIT
(原本权限位有执行权限时,用小写字母,否则用大写字母)

  • 1).SUID

权限是在属主的x位上 出现s S

1、仅仅对二进制程序有效
2、执行者对于程序需要具有可执行权限
3、仅仅在执行程序的过程中有效, 程序----->进程
4、执行者将具有该程序的拥有者的权限

SUID 例:
在这里插入图片描述

  • 2.)SGID

权限是在属组的x位上,出现s S
1、对二进制程序有效
2、执行者对于程序需要具有可执行权限
3、执行者将具有该程序的属组的权限
4、SGID主要作用于目录:在此目录下创建新的文件时,新的文件的属组和目录的属组相同

SGID 例:

在这里插入图片描述

  • 3).SBIT

针对other,/tmp,在执行权限权限位出现t T
1、只针对目录有效
2、用户在此目录下创建的文件或者目录,只有用户自己和root有权限删除

SBIT 例:
在这里插入图片描述

八.附

  • 给目录下所有文件都加扩展权限:setfacl -R -m u:boboyu:rw- testdirectory/ (-R一定要在-m前面,表示目录下所有文件

  • 去掉单个权限:setfacl -x u:curry /tmp/file

  • 去掉所有acl权限:setfacl -b /tmp/file

九.隐藏属性

1).lsattr

在Linux下我们可以用stat命令查看文件的相关属性信息,除了这些属性之外,Linux下的文件还有一些隐藏的属
性,我们可以用lsattr命令来查看

注: 文件的隐藏属性只对ext2/ext3/ext4文件系统完整有效,其他文件系统可能仅支持部分隐藏属性或者根本不
支持隐藏属性。

a 显示所有文件的属性信息,包括以 . 开头的文件
R 递归显示目录下所有子目录和文件的属性
d 显示目录的属性,而不是目录下的文件的属性

2).chattr

格式:chattr ±= 【ai】

a 只能向文件中添加数据,而不能删除,多用于服务器日志文件安全,只有root才能设置
i 文件不能被删除,改名,设定硬链接关系,同时不能写入或新增(root用户也不行)。只有root才能设置

猜你喜欢

转载自blog.csdn.net/qq_44944641/article/details/104827406
今日推荐