Linux系统的权限设定详解

文件权限存在的意义

文件的权限是系统最底层的安全设定方法之一,它可以保证文件可以被可用的用户做相应的操作。

文件用户及用户组
Linux 是个多用户多任务的系统 ,常常会有多人同时使用同一主机来进行工作,为了考虑每个人的隐私权以及每个人喜好的工作环境 , 对用户进行分类。
分为以下三大类:
文件拥有者 (user)
文件所属组 (group)
其他人 (other)

文件权限的查看
文件属性的查看

命令1:  ls -l filename
命令2:  ll filename
在这里插入图片描述
这些属性从前到后的含义分别如下表所示:

属性含义
-文件的类型
rw-r–r--.文件的权限
1文件硬连接个数(文件内容被记录的次数)
root文件所有人
root文件所有组
0文件大小
Oct 10 02:48最后一次被修改的时间
file文件名称

目录属性的查看
命令1:   ls -ld directory
命令2:   ll -d directory
在这里插入图片描述
这些属性从前到后的含义分别如下表所示:

属性含义
d文件的类型(d表示目录)
rwxr-xr-x.目录的权限
2子目录的个数
root目录所有人
root目录所有组
6子文件属性大小
Oct 10 03:03目录中内容变化的时间
dir目录名称

文件的类型
常见的文件类型有以下几种:

’ - ’   空文件或者文本
’ d ’   目录
’ l ’   软连接
’ s ’   socket 套接字
’ b ’   block 块设备
’ c ’   字符设备

文件的权限

第 2~4 个字符代表文件所有人的权限 ;
第 5~7 个字符代表文件所属组的权限 ;
第 8~11 个字符代表其他人的权限
例如: rwx|r-x|r-x
前三位的rwx代表文件所有人( u )的权限
中间三位的 r-x 代表文件所属组( g )的权限
最后三位的 r-x 代表其他人( o )的权限

权限的种类
权限种类有三种: r w x
(1). r
r权限针对文件,表示可以查看文件内容
r权限针对目录,表示可以ls 查看目录中存在的文件名称

(2). w
w权限针对文件,表示可以更改文件的内容
w权限针对目录,表示是否可以删除目录中的子文件或者子目录

(3). x
x权限对于文件,表示是否可以开启文件当中记录的程序
x权限对于目录,表示是否可以进入目录中


更改文件用户及用户组
命令格式:
  • chown 用户名称 文件   更改文件所有人
  • chgrp 组名称 文件   更改文件所有组
  • chown -R 用户 目录   更改目录本身以及目录中的子文件的所有人
  • chgrp -R 组名 目录   更改目录本身以及目录中的子文件的所有组

示例操作:
首先在/mnt目录下建立5个文件,再在/mnt目录下建立一个新目录test,然后再在test目录下建立3个文件,操作如下:
在这里插入图片描述
用下面命令实时监控文件属性的变化:

watch -n 1 ls -lR /mnt/

在这里插入图片描述
下面对这些新建的文件和目录进行修改用户和用户组的操作:
在这里插入图片描述
可以看到修改目录时如果不加 -R 参数时,目录里面的文件属性是不会发生改变的,那么加上 -R 参数后,就会对目录及目录里面的内容属性进行修改了:
在这里插入图片描述


文件权限的更改
对于文件权限的修改有两种方式:

方法一:通过字符方式修改
格式: chmod <u|g|o><+|-|=><r|w|x> 目标文件

方法二: 通过数字方式修改
格式: chmod 数字 目标

将三位权限 rwx 的有无视为二进制,有该权限时,该位为1,无该权限时即该位为 " - ",该位为0。再将这三位数字转换为八进制数字,那么得到的每一个数字就对应一个权限方式。
最终总结得到 r 为 4,w 为 2,x 为 1
下表为权限转换为二进制再转换为八进制的对应:

权限二进制八进制
- - -0000
- - x0011
- w -0102
- w x0113
r - -1004
r - x1015
r w -1106
r w x1117

操作示例:
首先在/mnt下新建6个文件,文件最初的权限属性如下:
在这里插入图片描述
通过字符的方式对它们的权限进行修改:
在这里插入图片描述
通过数字的方式对它们的权限进行修改:
在这里插入图片描述


系统的默认权限及默认权限修改
当你创建一个新的文件或目录时 ,该文件或目录有默认权限。

umask 的分数指的是 该默认值需要减掉的权限。
在默认权限的属性上,目录与文件是不一样的,文件的最大权限为 666,目录的最大权限为 777。

查看umask值的命令: umask   显示系统预留权限值
在这里插入图片描述
所以对于文件而言,系统默认权限是644;对于目录而言,系统默认权限是755

修改系统默认权限
临时修改系统预留权限umask值的方法:
直接在 umask 命令后面加上要预留的权限数,如下:
在这里插入图片描述
这种方法只是临时修改当前shell中的umask值,当退出shell,重新打开后,umask值还会变会回到原来的022。

永久修改系统预留权限umask值的方法:
在shell配置文件/etc/bashrc 中和系统配置文件/etc/profile 中记录有系统的默认umask值,只要把这两个文件中的 umask值修改之后就可以永久修改umask值了。

/etc/bashrc 文件中的71行是普通用户的umask值,73行是超级用户的umask值:
在这里插入图片描述
/etc/profile 文件中的60行是普通用户的umask值,62行是超级用户的umask值:
在这里插入图片描述
下面我们修改这两个文件中超级用户的umask值:
在这里插入图片描述
在这里插入图片描述
然后wq退出保存。
注意:想要永久性的修改 umask 值,一定要重新读取两个配置文件后 ,才能生效,需要执行下面这两条命令

source /etc/bashrc 	##刷新bash配置
source /etc/profile 	##刷新系统配置

完成上面操作之后,再查看umask值,umask值就被永久修改了:
在这里插入图片描述


特殊权限
(1). stickyid   粘制位

效果:只针对于目录,当目录上有 o+t 的权限时 ,所有用户在该目录下均可创建文件 , 但只有文件所有人和 root 用户可以删除该目录下的文件。
设定方式 :
chmod o+t directory
chmod 1777 directory

(2). sgid   强制位
效果:
针对目录时:在目录中创建的文件都自动归属到目录所在组;
针对二进制文件时:文件内记录的程序在执行时和执行者的组身份没有关系,而是以二进制文件的所有组的身份执行的。
设定方式:
chmod g+s file | directory
chmod 2777 file | directory

(3). suid   冒险位
效果:只针对于二进制可执行文件,该命令发起的程序是以该命令所有人的身份去执行。
设定方式:
chmod u+s 二进制可执行文件
chmod 4755 二进制可执行文件

示例操作
在操作特殊权限前,先根据下面的要求创建用户、用户组和目录,要求如下:

  1. 新建用户组:shengchan,caiwu,jishu
  2. 新建用户要求如下:
    1)tom是shengchan组的附加用户
    2)harry是caiwu组的附加用户
    3)leo是jishu组的附加用户
    3)新建admin用户,此用户不属于以上提到的三个部门
  3. 新建目录要求如下:
    1)/pub目录为公共存储目录对所有用户可以读、写、执行
    2)/sc目录为生产部存储目录只能对生产部人员可以写入
    3)/cw目录为财务部存储目录只能对财务部人员可以写入

在这里插入图片描述
通过以上命令就完成了上面的所有要求。
(1). 粘制位示例
下面修改/pub目录权限为粘制位o+t,所有用户都可以在该目录下新建文件,但是只能删除自己创建的文件却不能删除其他用户创建的文件:
在这里插入图片描述
tom用户和harry用户分别在/pub下新建文件:
在这里插入图片描述
在这里插入图片描述
然后tom用户尝试删除harry用户建立的文件:
在这里插入图片描述
harry用户尝试删除tom用户建立的文件:
在这里插入图片描述
可以发现都没有权限删除,只有自己可以删除自己建立的文件:
在这里插入图片描述
在这里插入图片描述
(2). 强制位示例
针对目录操作:
由于tom是属于生产组的,在tom用户下在/sc目录中创建文件:
在这里插入图片描述
可以看到新建的文件所属组是tom的,然后修改/sc目录权限为强制位:
在这里插入图片描述
这时tom再次在/sc目录中新建文件:
在这里插入图片描述
可以发现再次新建的文件所属组自动变成和目录相同的组了。

针对文件操作:
首先在tom用户下执行命令watch:

watch -n 1 date

然后另外打开一个shell用下面的命令查看watch进程的所有人和所属组:

ps ax -o user,group,comm | grep watch

在这里插入图片描述
改变 /bin/watch 文件的权限为强制位:
在这里插入图片描述
然后再次在tom用户下执行watch命令,并查看watch进程:
在这里插入图片描述
可以看到watch进程的所属组成了root组。

(3). 冒险位示例
还是对/bin/watch 文件进行权限修改,修改为冒险位:
在这里插入图片描述
再在tom用户下执行watch命令,然后查看watch进程:
在这里插入图片描述
可以看到watch进程的所有人从tom变成了root。


文件访问控制列表 ACL
传统的权限仅有三种身份 (owner,group,others) 搭配三种权限 (r,w,x), 并没有办法单纯的针对某一个使用者或某一个群组来设置特定的权限需求 , 此时就得要使用 ACL( 文件访问控制列表,Access Control List) 这个机制。

作用:让特定的用户对特定的文件拥有特定权限。

设置文件或目录的 acl 权限
命令: setfacl
常用参数及格式:

  • setfacl -m u:username:rwx file
    设定username对file拥有rwx权限
  • setfacl -m g:group:rwx file
    设定group组成员对file拥有rwx权限
  • setfacl -x u:username file
    从acl列表中删除username
  • setfacl -b file
    关闭file上的acl列表

如何查看文件是否有 acl 权限
方法一:
在这里插入图片描述
文件属性的第 11 位为 . 时代表没有 acl 权限 ;为 + 时代表有 acl 权限。所以上面的文件是没有acl权限的。

方法二:
getfacl file   查看acl开启的文件的权限

操作示例:
在/mnt目录下新建文件,然后设置文件的acl权限,并查看权限,如下:
在这里插入图片描述
可以看到file文件属性的第11位是 + ,说明file文件有acl权限。通过getfacl查看acl权限时,有多条信息,它们的含义分别如下:
#file   文件名称
#owner   文件拥有者
#group   文件拥有组
user: :   文件拥有人的权限
user: tom :   指定用户的权限
group: :   文件拥有组的权限
mask: :   能赋予用户的最大权限阈值
other: :   其他人的权限

在这里插入图片描述
使用-x参数把指定用户去掉之后,可以发现文件还是有acl权限,用-b 参数关闭之后,文件就没有了acl权限。

mask值
在权限列表中mask表示能生效的权限值,当用chmod减小开启acl的文件权限时mask会发生改变。

如果要恢复mask值,则用命令 setfacl -m m:rwx file

操作示例:
先新建文件,对其设置acl权限,然后用chmod减小acl文件权限:
在这里插入图片描述
然后恢复mask值,如下:
在这里插入图片描述

acl的默认权限设定
acl的默认权限设定只针对目录设定
注:acl权限值针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限的
设定方式:
setfacl -m d:u:用户:rwx 目录   acl默认权限的设定
setfacl -k 目录   acl权限的关闭

操作示例:
新建目录并设定acl权限,如下:
在这里插入图片描述
在此acl权限目录下新建文件并查看其acl权限:
在这里插入图片描述
关闭acl默认权限,如下:
在这里插入图片描述

权限匹配优先级

文件用户 > 指定特定用户(acl) > 指定特定的组(acl) > 文件所属组 > 其他用户(other)


权限开放权力变小的特殊情况
一般来说,权限的开放意味着权力的变大,但是有一种特殊情况:权限开放反而权力会变小。

命令: chattr   针对目录设定特殊权限的命令

一般可设定的权限有:
i   目录只能读,不能新建和删除
a   目录可以读和新建,但不能删除

chattr +i|a dir   给目录增加 i或a 权限
chattr -i|a dir   给目录去掉 i或a 权限
chattr =i|a dir   给目录设定 i或a 权限

命令: lsattr
lsattr 后面加目录,作用是查看目录的特殊权限

操作示例:
新建目录并给目录增加 i 权限:
在这里插入图片描述
可以查看该目录,但是不可以在该目录下新建:
在这里插入图片描述
给目录设定 a 权限:
在这里插入图片描述
可以查看该目录并且可以新建文件,但是不可以删除文件:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux 权限管理是 Linux 操作系统中非常重要的一部分,它控制着用户对文件和目录的访问权限。在 Linux 中,每个文件和目录都有三种基本权限:读取(r)、写入(w)和执行(x)。这些权限可以分别应用于文件所有者、文件所属组和其他用户,以控制不同用户对文件和目录的访问和使用。 文件权限的表示方法 Linux 中,文件权限是用一串数字来表示的,每个数字代表一种权限。其中,第一位表示文件所有者的权限,第二位表示文件所属组的权限,第三位表示其他用户的权限。每个数字的含义如下: - 0:没有权限 - 1:执行权限 - 2:写入权限 - 3:写入和执行权限 - 4:读取权限 - 5:读取和执行权限 - 6:读取和写入权限 - 7:读取、写入和执行权限 例如,文件权限为“rw-r--r--”,表示文件所有者具有读取和写入权限,文件所属组和其他用户只有读取权限。 文件权限的修改方法 在 Linux 中,可以使用 chmod 命令来修改文件权限。chmod 命令的基本语法如下: ``` chmod [选项] 模式 文件名 ``` 其中,选项包括: - -c:只在文件权限确实发生了改变的情况下,输出修改信息。 - -f:不显示错误信息。 - -v:显示每个文件的修改信息。 模式是一种用数字表示的文件权限,可以使用以下方法进行计算: - r=4,w=2,x=1 - 所有者权限的值 = rwx 的数字值 - 组权限的值 = rwx 的数字值 - 其他用户权限的值 = rwx 的数字值 例如,要将文件的所有者设置为可读写,组用户设置为只读,其他用户设置为只执行,可以使用以下命令: ``` chmod 754 filename ``` 其中,7 表示所有者具有读、写和执行权限;5 表示组用户具有读和执行权限;4 表示其他用户具有只读权限。 除了 chmod 命令,Linux 还提供了一些其他工具来管理权限,如 chown 和 chgrp 命令用于更改文件的所有者和所属组,setuid 和 setgid 位可以设置进程的权限等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值