centos7中的文件权限
一、UGO权限
1、概念
-
在 CentOS 7 中,文件和目录的权限由三组权限位来控制,分别代表了文件所有者、同一组用户和其他用户的权限。
-
u
:代表文件或目录的所有者(user)。 -
g
:代表与文件或目录属于同一组的用户(group)。 -
o
:代表其他用户(others),即既不是所有者也不属于同一组的用户
-
-
每组权限位由三个字符组成,分别表示读取(read)、写入(write)和执行(execute)权限。这些权限字符可以用数字表示,如下所示:
-
r
:读取权限,对应数字 4。 -
w
:写入权限,对应数字 2。 -
x
:执行权限,对应数字 1。
-
2、修改权限命令
(1)语法
-
chmod [选项] 权限模式 文件名
- -R 递归设置权限,也就是给子目录中的所有文件设定权限
-
权限模式:
- 用户身份: u(所有者) g(所属组) o(其他用户) a(代表全部身份) 赋予方式: +(添加权限) -(去除权限) =(设置权限) 权限: r(读取权限) w(写权限) x(执行权限)
-
数字权限修改
-
chmod 755 文件名
(2)示例
# 将root下的text1文件赋予其他用户可修改的权限
[root@yun01 ~]# chmod o+w text1
# 修改前
-rw-r--r--. 1 root root 46 3月 12 03:37 text1
# 修改后
-rw-r--rw-. 1 root root 46 3月 12 03:37 text1
# 将root下的text1文件赋予所有用户可读可写权限
[root@yun01 ~]# chmod 666 text1
-rw-rw-rw-. 1 root root 46 3月 12 03:37 text1
(3)注意事项
- 文件夹有执行权限x,最大权限777;普通文件没有执行权限,最大权限666。
3、修改文件所有者
(1)语法
-
chown [选项] 所有者:所属组 文件或目录
-
-R 递归设置权限
(2)示例
# 将root下的text1文件的所有者修改为hwz1
[root@yun01 ~]# chown hwz1 text1
-rw-rw-rw-. 1 hwz1 root 46 3月 12 03:37 text1
# 将root下的text1文件的所属组修改为hwz1组
[root@yun01 ~]# chown hwz1:hwz1 text1
-rw-rw-rw-. 1 hwz1 hwz1 46 3月 12 03:37 text1
4、修改所属组
(1)语法
- chgrp 所属组 文件或目录
(2)示例
将root下的text1文件的所属组修改为root组
[root@yun01 ~]# chgrp root text1
-rw-rw-rw-. 1 hwz1 root 46 3月 12 03:37 text1
二、umask
- umask 用来设置当前用户创建文件或者目录的默认权限。它与chmod的表示正好相反。
- 文件在创建的时候不允许赋予执行权限,必须使用chmod进行添加,而目录创建的时候允许赋予执行权限
1、umask说明
-
在CentOS 7中,umask 是一个用于控制文件创建时权限的设置。它是一个三位数的权限掩码,用来限制新建文件的权限。当一个文件被创建时,系统会根据当前用户的 umask 设置来确定文件的权限。
-
umask 会从新创建的文件权限中减去相应的位。例如,如果 umask 设置为 022,那么新创建的文件的权限会被减去 022。在默认情况下,新创建的文件权限为 666(普通文件)或 777(目录),然后再减去 umask 的设置。
-
在CentOS 7中,umask 设置通常在用户的 shell 配置文件(如 /.bashrc、/.bash_profile、/etc/profile 等)中进行配置。可以使用 umask 命令查看当前的 umask 设置。
2、命令
-
查看当前账号umask值: umask
-
查看当前账号umask详细值:umask -s
3、测试
[root@yun01 ~]# umask
0022
[root@yun01 ~]# umask -S
u=rwx,g=rx,o=rx
[root@yun01 ~]# umask -p
umask 0022
# 普通账号umask
[hwz1@yun01 ~]$ umask -p
umask 0002
[hwz1@yun01 ~]$
三、ACL权限
1、ACL和UGO的区别
- 在 CentOS 7 中,ACL(Access Control List)权限和 UGO(User-Group-Other)权限是两种不同的权限控制机制,它们在实现权限管理上有一些区别:
- UGO 权限:
- UGO 权限是最常见的权限控制方式,用于基于文件所有者(User)、文件所属组(Group)和其他用户(Other)来分配权限。
- UGO 权限通过三个权限位(读、写、执行)来控制文件或目录对不同用户角色的访问权限,以数字或符号表示。
- UGO 权限是 Linux 系统默认的权限控制方式,可以通过
chmod
命令设置和管理。 - UGO 权限简单直观,适用于一般的权限管理需求。
- ACL 权限:
- ACL 是一种更加灵活和细粒度的权限控制方式,允许管理员为文件或目录指定更多的用户和用户组,并分配不同的权限。
- ACL 可以允许或拒绝特定用户或用户组对文件或目录的访问、修改和执行等操作。
- ACL 权限可以在 UGO 权限之上进行扩展,并允许对特定用户或用户组设置特定权限,从而实现更精细化的权限控制。
- ACL 权限通常通过
setfacl
命令设置和管理。
主要区别总结如下:
- UGO 权限控制是基于文件所有者、文件所属组和其他用户的权限设置,相对固定和简单,适用于常规权限管理。
- ACL 权限提供了更大的灵活性,可以细化到具体用户或用户组级别,并且可以在 UGO 权限基础上扩展,适用于需要更细致权限控制的场景。
2、语法
(1)查看acl权限
- getfacl 文件名
(2)设置acl权限
- setfacl [选项] 文件名
-m:设定ACL权限,u:用户名:权限 g:组名:权限
-x:删除指定的ACL权限
-b:删除所有的ACL权限
-d:设置目录的默认ACL权限,意思是这个命令之后所有新建的文件都具有此ACL权限
-k:删除默认ACL权限
-R:递归设定ACL权限,给目录下所有的文件设定ACL权限,包括命令之前的文件
3、示例
# 查看权限
[root@yun01 ~]# getfacl my
# file: my
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
# 使tow用户有可以写的权限
[root@yun01 ~]# setfacl -m u:tom:rwx my
[root@yun01 ~]#
[root@yun01 ~]# getfacl my
# file: my
# owner: root
# group: root
user::rwx
user:tom:rwx # 添加成功
group::r-x
mask::rwx
other::r-x
-
小拓展:在设置完ACL权限之后使用ls查看文件内容会有所不一样,查看的时候文件的权限可能会叠加上 ACL的权限,但是具体的权限内容还是需要用getfacl来查看因为是在设置ACL权限使用一getfacl命令查 看的为主。
-
用ls命令查看后会发发现权限字段上多了一个+号,这个加号代表着有ACL权限,不止有显示的这些权 限,具体权限用getfacl命令查看。
drwxrwxr-x+ 2 root root 18 3月 7 14:50 my
对组hwz1进行ACL授权
[root@yun01 ~]# setfacl -m g:hwz1:rwx my
[root@yun01 ~]# getfacl
Usage: getfacl [-aceEsRLPtpndvh] file ...
Try `getfacl --help' for more information.
[root@yun01 ~]# getfacl my
# file: my
# owner: root
# group: root
user::rwx
user:tom:rwx
group::r-x
group:hwz1:rwx # 添加成功
mask::rwx
other::r-x
4、删除ACL权限
(1)语法
-
命令 setfacl -x 对象:名称 文件
-
清空所有设置的ACL权限(将文件的ACL权限恢复到默认)
-
命令 setfacl -b 文件
(2)示例
# 删除tow用户对root下的my文件夹的权限
[root@yun01 ~]# setfacl -x u:tom my
[root@yun01 ~]# getfacl my
# file: my
# owner: root
# group: root
user::rwx
user:tom:rwx
group::r-x
group:hwz1:rwx
mask::rwx
other::r-x
[root@yun01 ~]# setfacl -b my
[root@yun01 ~]# getfacl my
# file: my
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
5、最大有效权限mask
-
在使用getfacl命令查看文件的ACL权限时,有一项mask最大有效权限,所赋予的ACL权限必须在mask 之内,最终生效的权限就是你所设定的ACL权限和mask相“与”,所以一般mask权限都设置为“rwx”
-
mask的修改
[root@localhost ~]# setfacl -m m:rx project/
#设定mask权限为r-x
[root@localhost ~]# getfacl project/
# file: project/
# owner: root
# group: root
user::rwx
group::r-x
mask::r-x
other::r-x
四、文件特殊权限
1、 SetUID
(1)含义
-
在 CentOS 7 中,SetUID 是一种权限位,用于设置文件的执行权限。当一个文件被设置了 SetUID 位后,在执行该文件时,会临时获得该文件所有者的权限,而不是执行文件的用户的权限。
-
当一个可执行文件被设置了 SetUID 位后,它会以拥有者的权限来运行,而不是执行文件的用户的权限。这通常在需要特定权限来执行某些操作,但又不希望将所有者的权限暴露给其他用户时使用。
-
举个例子,假设有一个可执行文件 prog,它的所有者是 user1,且设置了 SetUID 位,当 user2 执行该文件时,prog 将以 user1 的身份来运行,获取了 user1 的权限。这样,即使 user2 没有权限执行某些操作,也可以通过执行拥有 SetUID 位的程序来以文件所有者的权限来执行这些操作。
(2)注意事项
-
需要注意的是,由于安全性考虑,操作系统会忽略一些特定的 SetUID 位设置,比如对 shell 脚本文件设置 SetUID 位是无效的,这是为了防止潜在的安全漏洞。因此,在使用 SetUID 位时,需要注意安全性并谨慎设置。
-
只有可以执行的二进制程序才能设定SUID权限,普通文件或者目录没有意义
-
命令执行者要对该程序拥有x(执行)权限
(3)语法
-
设置SetUID
-
chmod 4755 文件名 4代表SUID权限
-
chmod u+s 文件名
-
[root@yun01 ~]# chmod u+s /usr/bin/cat
[root@yun01 ~]# su - hwz1
上一次登录:三 3月 13 18:25:35 CST 2024pts/0 上
[hwz1@yun01 ~]$ cat /root/f1
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
....
....
-
取消SetUID
-
chmod 755 文件名
-
chmod u-s 文件名
-
如果用户对文件没有执行权限,就会报错,此时给他加特殊权限,就会显示大S
-
[root@yun01 ~]# chmod u-s /usr/bin/cat
[root@yun01 ~]# su - hwz1
上一次登录:三 3月 13 18:33:07 CST 2024pts/0 上
[hwz1@yun01 ~]$ cat /root/f1
cat: /root/f1: 权限不够
[hwz1@yun01 ~]$
2、 SetGID
(1)含义
-
在 CentOS 7 中,SetGID 是一种文件权限设置,用于目录。当一个目录被设置了 SetGID 位后,在该目录下创建的新文件将继承该目录的所属组,而不是创建者的所属组。
-
当一个目录被设置了 SetGID 位后,任何用户在该目录下创建新文件或目录时,这些新创建的文件或目录的所属组会继承自父目录的所属组,而不是创建者的所属组。这通常用于需要确保新创建的文件与目录与父目录所属组一致的场景,比如共享文件夹或项目工作目录。
-
例如,如果目录 “shared” 被设置了 SetGID 位,并且它的所属组是 “project_group”,那么无论是用户 A 还是用户 B 在 “shared” 目录下创建文件,新创建的文件都会自动属于 “project_group” 组,而不是创建者个人的组。
-
这种设置通常用于共享目录或团队项目目录,确保所有新创建的文件都属于共享组,这样团队成员可以共享文件而无需过多地处理文件权限。
(2)注意事项
-
SGID(Set Group ID)权限对于可执行的二进制程序来说具有特殊意义,因为当一个可执行的二进制程序被设置了 SGID 位后,它将以该程序所属组的身份来运行,而不是执行者本身的组身份。这种特性在某些情况下非常有用,比如在需要以特定组身份来执行的程序或者在共享文件夹中确保新创建的文件与父目录一致的情况下。
而对于其他类型的文件(比如普通文件),设置 SGID 权限可能会带来潜在的安全风险。因此,操作系统通常会忽略对其他类型文件设置 SGID 位,以防止潜在的安全漏洞。
总之,SGID 权限通常只对可执行的二进制程序生效,这是为了确保系统安全和权限管理的考量。
-
普通用户必须对此目录拥有r和x权限,才能进入此目录
-
**“可执行的二进制程序”**指的是经过编译成二进制代码(即机器代码)的程序,并且具有可执行权限。在类UNIX系统中,可执行程序通常没有文件扩展名,而且可以通过终端或其他方式直接执行。
-
一般来说,Linux系统和类UNIX系统中的可执行二进制程序可以分为以下几种类型:
- 系统命令和工具: 操作系统自带的命令和工具,比如 ls、cp、mv 等。这些程序通常存储在系统的标准路径中,用户可以直接通过终端调用它们。
- 自定义程序: 用户自己编写并编译的程序,或者第三方提供的可执行程序。这些程序可以被设置为可执行,并在系统中运行。
- 脚本语言程序: 用脚本语言编写的程序,比如 Shell 脚本、Python 脚本等。这类脚本文件在执行时会由相应的解释器解释,因此需要确保脚本文件的第一行指定了正确的解释器路径。
- 当你想要为一个程序设置 SGID 权限时,通常是针对上述类型的可执行二进制程序。这样设置 SGID 权限可以确保该程序在执行时以其所属组的身份来运行,而不是执行者的个人组身份。
(3)语法
-
设定SetGID的方法
-
chmod 2755 文件名 2代表SGID权限
-
chmod g+s 文件名
-
[root@yun01 ~]# cd /
[root@yun01 /]# ls
bin desktop etc home lib media my proc run shell_demo sys tmp.zip var
boot dev f1 homework lib64 mnt opt root sbin srv tmp usr
[root@yun01 /]# ls f1
tmp
[root@yun01 /]# ls -l |grep 'f1'
drwxr-xr-x. 3 root root 17 3月 11 17:09 f1
[root@yun01 /]# chmod 777 f1
[root@yun01 /]# ls -l |grep 'f1'
drwxrwxrwx. 3 root root 17 3月 11 17:09 f1
[root@yun01 /]# chmod g+s f1
[root@yun01 /]# ls -l |grep 'f1'
drwxrwsrwx. 3 root root 17 3月 11 17:09 f1
[root@yun01 /]# su - hwz1
上一次登录:三 3月 13 18:35:01 CST 2024pts/0 上
[hwz1@yun01 ~]$ cd /f1
[hwz1@yun01 f1]$ ls
tmp
[hwz1@yun01 f1]$ touch f11
[hwz1@yun01 f1]$ ls
f11 tmp
[hwz1@yun01 f1]$ ls -l
总用量 0
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:52 f11
drwxrwxrwt. 6 root root 167 3月 11 15:18 tmp
[hwz1@yun01 f1]$ touch f12 f13 | mkdir f231
[hwz1@yun01 f1]$ ls -l
总用量 0
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:52 f11
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:53 f12
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:53 f13
drwxrwsr-x. 2 hwz1 root 6 3月 13 18:53 f231
drwxrwxrwt. 6 root root 167 3月 11 15:18 tmp
[hwz1@yun01 f1]$ su - tom
密码:
上一次登录:三 3月 13 17:28:35 CST 2024pts/0 上
[tom@yun01 ~]$ cd /f1
[tom@yun01 f1]$ touch f0
[tom@yun01 f1]$ ls -l
总用量 0
-rw-rw-r--. 1 tom root 0 3月 13 18:54 f0
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:52 f11
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:53 f12
-rw-rw-r--. 1 hwz1 root 0 3月 13 18:53 f13
drwxrwsr-x. 2 hwz1 root 6 3月 13 18:53 f231
drwxrwxrwt. 6 root root 167 3月 11 15:18 tmp
[tom@yun01 f1]$
-
取消SetGID的方法
-
chmod 755 文件名
-
chmod g-s 文件名
-
[root@yun01 /]# chmod g-s f1
[root@yun01 /]# ls -l |grep 'f1'
drwxrwxrwx. 4 root root 72 3月 13 18:54 f1
[root@yun01 /]#
3、Sticky BIT
(1)含义
-
当在 CentOS 7 中设置了 Sticky Bit(粘着位)权限时,它会影响目录中文件的删除操作。具体来说,Sticky Bit 主要用于共享目录,以防止其他用户意外删除该目录中的文件。
-
以下是设置了 Sticky Bit 的目录中文件删除的规则:
- 文件所有者:文件的所有者始终可以对文件进行读取、写入和删除操作,无论是否设置了 Sticky Bit。
- 目录所有者:目录的所有者可以对目录中的任何文件进行删除、移动或重命名操作,无论是否设置了 Sticky Bit。
- 其他用户:对于普通用户而言,如果一个目录设置了 Sticky Bit,则在该目录下创建的文件只能由文件的所有者或者目录的所有者来删除。即使其他用户对该文件有写权限,也无法删除不属于自己的文件。
- 这种设置通常用于共享目录,比如
/tmp
目录,确保只有文件的所有者才能删除自己的文件,而其他用户无法删除其他人的文件,从而提高了共享目录的安全性。
(2)语法
-
设定粘着位的方法
-
chmod 1755 目录名 1代表粘着位
-
chmod o+t 目录名
-
[root@yun02 /]# ls
bin data dev home lib64 mnt proc run srv tmp usr
boot desktop etc lib media opt root sbin sys tmp.zip var
[root@yun02 /]# mkdir f1
[root@yun02 /]# ll / |grep 'f1'
drwxr-xr-x. 2 root root 6 3月 12 17:55 f1
[root@yun02 /]# chmod 777 f1
[root@yun02 /]# ll / |grep 'f1'
drwxrwxrwx. 2 root root 6 3月 12 17:55 f1
[root@yun02 /]# chmod o+t f1
[root@yun02 /]# ll / |grep 'f1'
drwxrwxrwt. 2 root root 6 3月 12 17:55 f1
[root@yun02 /]# q
[root@yun02 ~]# tail -2 /etc/passwd
user1:x:1000:1000::/home/user1:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
[root@yun02 ~]# su - user1
[user1@yun02 ~]$ cd /f1
[user1@yun02 f1]$ ls -a
. ..
[user1@yun02 f1]$ touch f1
[user1@yun02 f1]$ mkdir f2
[user2@yun02 ~]$ cd /f1
[user2@yun02 f1]$ ls
f1 f2
[user2@yun02 f1]$ ls -l
总用量 0
-rw-rw-r--. 1 user1 user1 0 3月 12 18:00 f1
drwxrwxr-x. 2 user1 user1 6 3月 12 18:00 f2
[user2@yun02 f1]$ touch f3
[user2@yun02 f1]$ mkdir f4
[user2@yun02 f1]$ ls -l
总用量 0
-rw-rw-r--. 1 user1 user1 0 3月 12 18:00 f1
drwxrwxr-x. 2 user1 user1 6 3月 12 18:00 f2
-rw-rw-r--. 1 user2 user2 0 3月 12 18:04 f3
drwxrwxr-x. 2 user2 user2 6 3月 12 18:04 f4
-
取消粘着位的方法
-
chmod 755 目录名
-
chmod o-t 目录名
-
五、文件系统属性chattr权限
1、概念
-
在 CentOS 7 中,
chattr
是一个用于修改文件或目录属性的命令。chattr
命令允许用户改变文件系统上文件或目录的属性,包括扩展属性。这些属性可以控制文件的特性,例如是否可修改、删除、压缩等。 -
最常用的属性之一是 “i” 属性,用于将文件设置为不可修改(immutable)。当文件被设置了 “i” 属性后,将无法对其进行修改、重命名、删除或链接操作,即使使用 root 用户也无法修改该文件。这种功能可以用来保护重要的系统文件,防止它们被意外或恶意修改。
-
除了 “i” 属性外,
chattr
命令还支持其他一些文件属性,比如 “a”(append only,只能追加)、“d”(no dump,不会被备份)等。这些属性可以根据需要来设置,以增强文件的安全性和可管理性。 -
需要注意的是,
chattr
命令需要在超级用户权限下才能执行,因为它涉及到文件系统的底层属性。因此,在使用chattr
命令时要格外小心,避免意外修改重要的文件属性。
2、语法
(1)修改:
-
chattr [+ - =] [选项] 文件名或者目录名
-
+:增加权限
-
-:删除权限
-
=:等于某权限
[root@yun02 ~]# chattr +i /f1/f1
[root@yun02 ~]# ls -l /f1 | grep 'f1'
[root@yun02 ~]# lsattr /f1/f1
----i----------- /f1/f1
[root@yun02 ~]# cd /f1
[root@yun02 f1]# vim f1
[root@yun02 f1]# chattr -i f1
[root@yun02 f1]# lsattr /f1/f1
---------------- /f1/f1
[root@yun02 f1]#
(2)查看:
-
lsattr [选项] 文件名
-
-a:显示所有文件和目录
-
-d:若目标是目录,仅列出目录本身的属性,而不是子文件的属性
它涉及到文件系统的底层属性。因此,在使用chattr
命令时要格外小心,避免意外修改重要的文件属性。
2、语法
(1)修改:
-
chattr [+ - =] [选项] 文件名或者目录名
-
+:增加权限
-
-:删除权限
-
=:等于某权限
[root@yun02 ~]# chattr +i /f1/f1
[root@yun02 ~]# ls -l /f1 | grep 'f1'
[root@yun02 ~]# lsattr /f1/f1
----i----------- /f1/f1
[root@yun02 ~]# cd /f1
[root@yun02 f1]# vim f1
[root@yun02 f1]# chattr -i f1
[root@yun02 f1]# lsattr /f1/f1
---------------- /f1/f1
[root@yun02 f1]#
[外链图片转存中…(img-jbKxXLRp-1710491751001)]
(2)查看:
-
lsattr [选项] 文件名
-
-a:显示所有文件和目录
-
-d:若目标是目录,仅列出目录本身的属性,而不是子文件的属性