一、权限概述
1、什么是权限
权限针对文件 | 权限针对目录 | |
读(r) |
表示可以查看文件内容:cat 查看文件权限:ls -l | 查看目录权限:ls -ld |
写(w) | 表示可以更改文件的内容;vim 修改,保存退出(wq:保存退出,q:不保存退出,wq!:强制保存退出) | 表示是否可以删除目录中的子文件或者新建子目录(rm/touch/mkdir) |
执行(x) | 表示是否可以开启文件当中记录的程序,一般指二进制文件(.sh) | 表示进入目录中(cd) |
一般给予目录读权限时,也将会给其执行权限,属于“套餐”组合。
2、Linux中文件所有者
2.1所有者分类
user(文件拥有者)
group(文件拥有组)
other(其他用户)
2.2所有者的表现方式
文件拥有者权限
u(the user who owns it)(文件拥有者权限)
用 u 表示,文件所有者,默认为文档的创建者
文件拥有组权限
g(other users in the file's group)(文件拥有组权限)
用 g 表示,在文件所属组(默认是创建文件的用户的主组)里的用户
其他权限
o(other user not in the file's group)(其他用户权限)
用 o 表示,既不是文件的创建者,也不在文件拥有组里的用户,称为其他用户!
linux ugo权限,所谓ugo,就是User, Group,Other三个单词的首字母
就指拥有者,主组,其他三种权限。
ugo 等于 u + g + o
a (all) 等于u + g + o
root用户(超级管理员)
在Linux 中,root 用户,在所有用户中 root 用户 拥有最大的权限 ,可以管理着普通用户,设置文档的权限时不必考虑 root 用户。
二、文件权限的种类
1、文件权限的种类
(1)文件权限信息
- rw-r--r--. 1 root root 0 Mar 30 10:04 yxx15
文件类型 文件权限 链接数 拥有者 拥有组 大小 最后修改时间 文件名
(2)目录权限信息
d rwxr-xr-x. 2 root root 45 Mar 30 10:05 yyy
类型 权限 链接数 拥有者 拥有组 大小 最后修改时间 目录名称
2、文件权限详解
Linux 中存在三类身份:
user(文件拥有者)
group(文件拥有组)
others(其他用户)
各自有不同的权限,对于一个文档来说,其权限具体分配如下:
linux一共有7种文件类型,分别如下:
- | 普通文件 |
d | 目录文件 |
l | 软链接(类似Windows的快捷方式) |
下面四种是特殊文件:
b | 块设备文件(例如硬盘、光驱等) |
p | 管道文件 |
c | 字符设备文件(例如猫等串口设备) |
s | 套接口文件/数据接口文件 |
3、设置文件/目录权限
命令:chmod
语法:
#chmod 复制权限#
chmod --reference=/tmp /mnt/yyy #复制/tmp目录的权限到/mnt/yyy上
chmod -R --reference=/tmp /mnt/westosdir #复制/tmp目录的权限到/mnt/westosdir及
#目录中的子文件上 -R 代表第归操作
#chmod 字符方式设定权限
chmod <a|u|g|o><+|-|=><r|w|x> file ##用字副方式设定文件权限
作用:增加或者减少当前文件所有者的权限(不能改变所有者,只能改变现有所有者的权限)。
常用选项:-R:递归设置权限 (当文档类型为目录的时候)
权限模式:就是该文档需要设置的权限信息
文档:可以是文件,也可以是目录,可以是相对路径也可以是绝对路径。
**如果想要给文档设置权限,操作者要么是root 用户,要么就是文档的所有者。
字母形式实例
相关权限总结
字母 | 选项 | 作用 |
u | user | 文件拥有者 |
g | group | 文件拥有组 |
o | other | 其他用户 |
a | all | 所有人 |
+ | 加 | 增加 |
- | 减 | 移除 |
= | 等于 | 赋值 |
r | read | 可读权限 |
w | write | 可写权限 |
x | execute | 可执行权限 |
4、注意
在Linux 中,如果要删除一个文件,不是看文件有没有对应的权限,而是看文件所在的目录是否有写权限,如果有才可以删除(同时必须具备执行权限)。
比如说监控中显示
-rW-r--r--.1 lee shengchan 0 Mar 30 14:44 leefile
就证明yee是在shengchan目录下的
那么
[adminaTiminglee ~l$ rm -fr /pub/leefile就无法删除lee文件
三、文件拥有者和拥有组的设置
1、chown修改文件的拥有者
基本语法:chown [-R] 新文档拥有者名称 文档路径
作用:更改文档的所属用户(change owner)
选项:-R 代表递归修改文件的拥有者
示例代码1
建立文件example
[root@localhost mnt]# touch example
把example的所属用户更改为yqq
[root@localhost mnt]# chown yqq example
我们从监控中可以看到
更改前:所属用户是root
更改后:所属用户是yqq
示例代码2
创建目录ddl
[root@localhost mnt]# mkdir ddl
把目录ddl的所属用户更改为yqq
[root@localhost mnt]# chown yqq ddl
从监控中可以看出:
更改前:目录ddl的所属用户是root
更改后:ddl的所属用户是yqq
2、chgrp修改文件的拥有组
基本语法: chgrp [-R] 新文档组名称 文档的路径
作用:更改文档的所属用户组(change group)
示例代码1
[root@localhost mnt]# chgrp yqq example
更改前:文件example所属组为root
更改后:文件example所属组为yqq
示例代码2
[root@localhost mnt]# chgrp yqq ddl
更改前:目录ddl所属组为root
更改后:目录ddl所属组为yqq
3、chown同时修改所属用户与所属组
基本语法:语法:# chown [-R] username:groupname 文档路径
示例代码:将example.txt文件的拥有者与所属组都更改为root
[root@localhost mnt]# chown root:root example
更改前:所属用户和所属组为yqq
更改后:所属用户和所属组为root
注意:
一般来说,chown 指令是由系统管理者(root)所使用,普通用户没有权限可以改变别人的拥有者,也没有权限可以将自己的拥有者改设为别人,只有系统管理者(root)才有这样的权限。
四、ACL访问控制
1、简述
ACL,是 Access Control List(访问控制列表)的缩写,在 Linux 系统中, ACL 可实现对单一用户设定访问文件的权限。
2、ACL权限开启标识
-rw-rw---- 1 root root 0 Mar 31 10:23 yxx
^
没有"+"代表acl列表未开启
-rw-rw----+ 1 root root 0 Mar 31 10:23 yxx
^
acl列表开启
3、基本命令
getfacl命令:查看文件的ACL策略及权限
setfacl命令: 给文件针对某个用户或者某个组来增加(设置)ACL策略
3.1getfacl命令
显示内容分析
[root@localhost mnt]# getfacl example
# file: example 文件名称
# owner: root 文件拥有者
# group: root 文件所属组
user::rw- 文件拥有者权限
group::--- 文件所属组权限
other::--- 其他用户权限
3.2setfacl命令
#删除/mnt/ddl/目录上所有扩展的 ACL 条目。执行后,该目录的权限将完全由传统的chmod权限设置来控制,而不再受到任何自定义的 ACL 规则的影响。
[root@localhost Desktop]# setfacl -b /mnt/ddl/
#为用户admin赋予对/mnt/ddl/目录的读、写和执行权限。
[root@localhost Desktop]# setfacl -m u:admin:rwx /mnt/ddl/
#为用户组root设置对/mnt/ddl/目录的权限为“无权限”。也就是说,用户组root中的所有用户都将被禁止访问 /mnt/ddl/目录,包括读取、写入或进入该目录。
[root@localhost Desktop]# setfacl -m g:root:0 /mnt/ddl/
#将/mnt/ddl/目录的 掩码权限设置为rwx这意味着,除所有者和组所有者之外的用户或用户组的权限将被限制为最多rwx 。
[root@localhost Desktop]# setfacl -m m::rwx /mnt/ddl/
#将/mnt/ddl/目录的所有者权限设置为读(r)和执行(x)权限,但不包括写(w)权限。这意味着目录的所有者将能够读取目录内容并进入目录,但无法修改目录中的文件或子目录。
[root@localhost Desktop]# setfacl -m u::rx /mnt/ddl/
#将/mnt/ddl/目录的默认用户组的权限设置为读(r)权限,但不包括写(w)和执行(x)权限。这意味着目录的默认用户组成员将能够读取目录内容,但无法修改目录中的文件或进入目录。
[root@localhost Desktop]# setfacl -m g::r /mnt/ddl/
#将/mnt/ddl/目录的所有者权限设置为读(r)、写(w)和执行(x)权限。这意味着目录的所有者将能够读取、修改和进入该目录。
[root@localhost Desktop]# setfacl -m u::rwx /mnt/ddl/
#将/mnt/ddl/目录的默认用户组的权限设置为读(r)和执行(x)权限,但不包括写(w)权限。这意味着目录的默认用户组成员将能够读取目录内容并进入目录,但无法修改目录中的文件或子目录。
[root@localhost Desktop]# setfacl -m g::rx /mnt/ddl/
#移除/mnt/ddl/目录中针对用户组root的特定ACL条目。移除后,用户组root的权限将不再由ACL控制,而是由传统的chmod权限决定。
[root@localhost Desktop]# setfacl -x g:root /mnt/ddl/
#移除/mnt/ddl/目录中针对用户admin的特定ACL条目。移除后,用户admin的权限将不再由 ACL 控制,而是由传统的chmod权限决定。
[root@localhost Desktop]# setfacl -x u:admin /mnt/ddl/
4、acl 权限优先级
拥有者 > 特殊指定用户 > 权限多的组 >权限少的组 > 其他
五、umask
1、系统默认权限设定
(4)umask表示创建文件时的默认权限(即创建文件时不需要设置而天生的权限)。
2、umask值
可以使用umask命令来查看umask的值。
基本语法:# umask
示例:
3、修改umask值
3.1 临时更改
#umask临时更改
[root@localhost Desktop]# umask 077
3.2 永久更改
打开系统配置文件
[root@localhost Desktop]# vim /etc/profile
在最后输入 umask 077命令
打开shell配置文件
[root@localhost Desktop]# vim /etc/bashrc
在文件最后输入umask 077命令
让配置文件中的设定在当前的shell中立即生效
[root@localhost profile.d]# source /etc/profile
[root@localhost profile.d]# source /etc/bashrc
六、特殊权限
1、SGID(Set GID)
示例:
每秒刷新一次,列出所有进程,并显示用户、组和命令行,然后只显示最后5行,列出/bin/cat文件的详细信息。
[root@localhost Desktop]# watch -n 1 "ps ax -o user,group,command | tail -n 5 ;ls -l /bin/cat"
为/bin/cat文件设置 SGID(Set Group ID)权限
[root@localhost Desktop]# chmod g+s /bin/cat
为/bin/cat设置SGID(Set Group ID)权限,并同时设置文件的读、写和执行权限。
[root@localhost Desktop]# chmod 2755 /bin/cat
注意:sgid这对于文件,仅对二进制可执行文件生效当开启sgid的二进制可执行文件被任何用户调用产生的进程都属于二进制可执行文件的所有组和执行者组身份没关系。
2、 SUID(Set UID)
2.1SUID权限位:
SUID由文件权限位中用户部分的"s"表示。如果一个文件被设置了SUID位,会表现在所有者(文件的属主)的权限的可执行位上(x)。
所有者的权限的可执行位(x)上定义了一个补充的s位,如果文件设置了SUID,那么它在执行的时候,会把进程的权限设置成文件所属用户的uid。
当设置了SUID时,还需要所有者的执行权限。当s这个标志出现在文件所有者的x权限上时,则就被称为SUID。
示例:
/usr/bin/passwd命令,它具有SUID权限,因此普通用户可以在不具备修改密码文件权限的情况下,通过执行该命令来更改自己的密码。
[yqq@localhost ~]$ ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 32648 Aug 10 2021 /usr/bin/passwd
3、Sticky Bit
命令:chmod
语法:# chmod [选项] 文件夹
作用:只允许文件的创建者和root用户删除文件
常用选项:
o+t 添加粘滞位
示例:
[root@localhost Desktop]# su - admin
[admin@localhost ~]$ touch /pub/adminfile
[admin@localhost ~]$ rm -fr /pub/adminfile
[admin@localhost ~]$ rm -fr /pub/leefile
[admin@localhost ~]$ touch /pub/adminfile
[admin@localhost ~]$ rm -fr /pub/adminfile
[admin@localhost ~]$ rm -fr /pub/leefile
rm: cannot remove '/pub/leefile':Operation not permitted
因为这个文件所有者是lee,设置了只能被所属用户lee删除,所以admin用户无法删除