【1060a系列】权限管理
文章目录
一、ls -l内容解释
[root@1060a ~]# ls -l
总用量 8
-rw------- 1 root root 1206 11月 2 19:40 anaconda-ks.cfg
drwxr-xr-x 2 root root 59 11月 2 19:42 Desktop
drwxr-xr-x 2 root root 6 11月 2 19:37 Documents
drwxr-xr-x 2 root root 6 11月 2 19:37 Downloads
-rw------- 1 root root 1483 11月 2 19:41 initial-setup-ks.cfg
drwxr-xr-x 2 root root 32 11月 2 19:37 Music
drwxr-xr-x 3 root root 24 11月 2 19:37 Pictures
drwxr-xr-x 2 root root 6 11月 2 19:37 Videos
第一行:总用量(total)表示当前显示的文件和目录的大小总和。
之后的每一行可以分为8个字段
-|rw------- | 1 | root | root | 1206 | 11月 2 19:40 | anaconda-ks.cfg
(1)文件类型。-表示这是一个普通文件。
d 目录
l 链接文件
b 块设备文件
(2)权限,每三位一组,分别对应拥有人,所属组和其他用户。当文件存在ACL权限时,在最后会添加一个'+'号。
(3)对目录而言:该字段表示目录下子目录的数量,该位置最小值为2。因为所有目录下都会存在'.'和'..',表示当前目录和上一级目录。
对文件而言:该字段表示文件的硬链接数量。
(4)文件拥有人。
(5)文件所属组。
(6)文件大小。
(7)文件内容最后一次修改时间。
每一个文件存在四个时间戳,可以使用stat命令进行查看
[root@1060a ~]# stat anaconda-ks.cfg
文件:anaconda-ks.cfg
大小:1206 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:201333825 硬链接:1
权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2023-11-06 10:33:19.462014094 +0800 //最后一次查看文件内容的时间
最近更改:2023-11-02 19:40:42.632018072 +0800 //最后一次修改文件内容的时间
最近改动:2023-11-06 10:34:14.722133463 +0800 //最后一次修改文件属性的时间
创建时间:2023-11-02 19:40:42.592018070 +0800 //文件被创建的时间
(8)文件名。
二、基础权限
权限规定系统中用户可以对文件进行什么操作。
Linux中基础权限一个有三个:r(read)——读,w(write)——写,x(execute)——执行。
(1)权限对目录和文件的作用
权限对文件的作用:
- r:可以读取文件的内容
- w:可以修改文件的内容
- x:文件可以被执行(文件可以作为命令被执行)
权限对目录的作用:
- r:可以读取到目录的内容
- w:可以修改目录内容
- x:可以进入这个目录
注:
- 能否对文件进行操作取决于文件所在目录的权限。
- 能否对文件的内容进行操作取决于文件本身的权限
- 一个文件如果要想具有意义,那么至少需要rx权限,也就是可以进入目录并看到目录的内容。
(2)判断是否拥有权限
当用户运行一个命令时,会产生一个对于的进程,该进程UID和GID将继承用户的UID和GID。
- a.当进程UID和文件的UID匹配时,以文件拥有人(user)身份访问文件
- b.当进程GID和文件的GID匹配时,以文件所属组(group)身份访问文件
- c.当两者均不匹配时,以其他人身份访问文件(other)
权限优先级:user>group>other
(3)权限修改
修改权限:chmod
字符式修改
chmod [-R] u/g/o/a +/-/= filename(dirname)
u:表示文件拥有人
g:文件拥有组
o:其他人
u+g+o=a(所用人)
+:在原有权限上增加权限
-:在原有权限上减掉权限
=:覆盖原来的权限
直接赋权
chmod u=rwx,g=rwx,o=rwx file/dir
chmod ugo=rwx file/dir
chmod a=rwx fiel/dir
加减赋权
chmod u+rw,g+r,o+x file/dir
chmod u-w,g-r,o-x file/dir
数字式修改
chmod [-R] 权限数 filename(dirname)
权限数有三位,从第一位开始分别表示所有人,所属组,其他人权限如755表示该文字所用人拥有rwx权限,所属组和其他用户拥有rw权限。
eg:
chmod 777 file1 赋予所有用户rwx权限
chmod 651 fiel1 赋予拥有人rw权限,所属组rx权限,其他用户x权限
注:字符式的直接赋权和数字式修改均会直接覆盖之前的权限,生产环境中建议使用加减赋权。
递归设置权限
chmod -R 777 dir 将目录权限以及目录下所有文件和目录的权限设置为777。
修改拥有人和所属组
chown [-R] [OWNER][:[GROUP]] FILE...
将file1的所属人修改为admin
#chown admin file1
将file1的所属组修改为admin
#chown :admin file1
将file1的所属人修改为user1,所属组修改为user1
#chown user1:user1 file1
除了root用户之外,文件的拥有人同样可以修改该文件的权限和所属组。
文件的拥有人:文件的拥有人可以修改文件的权限
- 普通用户可以修改自己文件的权限(仅可以改权限),而root用户可以修改所有文件的权限
- 普通用户不能修改文件的拥有人
文件的拥有人只有两种来源:
- 第一种是该文件是谁创建,那么谁就是拥有人;
- 第二种是root用户指定文件的拥有人
文件的所属组:
修改文件的所属组,该用户必须是该组的成员,组可以是附加组或者私有组;
文件拥有组的来源:
- 第一种是该文件创建用户的私有组
- 第二种是root指定
文件拥有人修改权限
[user1@rhce text]$ ll
total 0
-rw-r--r--. 1 user1 it 0 Sep 13 14:25 file1
[user1@rhce text]$ chmod 666 file1
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 it 0 Sep 13 14:25 file1
文件拥有人修改所属组
修改所属组需要注意,修改文件的所属组,该组必须是用户人的主要组或附属组
[user1@rhce text]$ id
uid=1001(user1) gid=1004(it) groups=1004(it),1002(user2) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 it 0 Sep 13 14:25 file1
[user1@rhce text]$ chown :user2 file1
[user1@rhce text]$ ll
total 0
-rw-rw-rw-. 1 user1 user2 0 Sep 13 14:25 file1
[user1@rhce text]$ chown :user1 file1
chown: changing group of 'file1': Operation not permitted
三、特殊权限
(1)三种特殊权限
SUID
只要用户对设有 SUID 的文件有执行权限,那么当用户执行此文件时,会以文件所有者的身份去执行此文件(该权限位于拥有人的x权限上)
- 该权限只作用于可执行程序文件中
- 在默认情况下,用户发起一个进程,该进程的属主是发起者,如果给可执行程序文件添加suid权限后,用户发一个进程,该进程的属主为程序文件所属的属主,而非发起者。用户对该可执行程序文件必须要有x权限,suid仅在执行该文件时有效。
eg:当我使用tester用户去修改密码的过程
- tester 用户对于 /usr/bin/passwd 这个程序具有执行权限,因此可以执行 passwd 程序
- passwd 程序的所有者为 root
- tester 用户执行 passwd 程序的过程中会暂时获得 root 权限
- 因此 tester 用户在执行 passwd 程序的过程中可以修改 /etc/shadow 文件
SGID
作用于文件:效果于SUID权限相似,当用户对设有SGID权限的文件拥有执行权限,那么当用户执行文件时,会以文件所属组的身份去执行此文件。
作用于目录:当一个目录被赋予SGID权限后,所有用户在创建文件和目录时,该文件或目录的所属组将继承目录的所属组。也就是,只有用户对设用SGID的目录拥有rwx权限时,SGID的功能才能完全发挥。
sticky(sbit)
粘滞位,防删除位。如果一个目录有该权限,即在该目录内,只用文件或者目录的所有人和root用户可以删除目录和文件。(该权限位于其他用户的x权限上)
注:该权限只对目录有效,对文件无效。
(2)特殊权限管理
特殊权限表示方式
权限 | 字符 | 对应数字 |
---|---|---|
suid | s | 4 |
sgid | S | 2 |
sticky | T | 1 |
特殊权限设置
设置suid chmod u+s filename
设置sgid chmod g+s filename/dirname
设置sticky chmod o+t dirname
也可通过数字来设置
设置suid chmod 4xxx filename
设置sgid chmod 2xxx filename/dirname
设置sticky chmod 1xxx dirname
四、隐藏权限
隐藏权限是为了给文件加上一层防护,防止root用户的误操作。
(1)两种常见隐藏权限
i
权限:只可以查看文件内容,不能删除和修改文件内容。
a
权限:可以查看和追加文件内容,不能删除文件和文件之前的内容。
(2)隐藏权限管理
设置隐藏权限:chattr
语法:
chattr +/- 权限 文件名
eg:给文件添加/去掉i权限
chattr +/-i file
查看隐藏权限:lsattr
语法:
lsattr 文件名
eg:查看文件的隐藏权限
[root@localhost ~]# lsattr text
-----a---------------- text
五、ACL权限
访问控制列表
当文件仅由单个所有者和指定的一组人使用时,标准 Linux文件权限即可满足要求。但是,有些用例要求多个指定的用户和组以不同的文件权限集来访问文件。 访问控制列表(ACL)便提供了这一功能。
借助ACL,可以使用与常规文件权限相同的权限标志 (读取、写入和执行)向由用户名、组名、UID 或 GID 标识的多个用户和组授予权限。除了文件所有者和文件的组从属关系之外,这些额外的用户和组分别被称为指定用户和指定组,因为它们不是在长列表中指定的,而是在ACL中指定的。
查看和解释ACL权限
当一个文件设置了ACL权限后。ls -l
命令查询的是最少的ACL设置。
[root@1060a opt]# ll file
-rw-rw-r--+ 1 root root 0 11月 6 10:59 file
10个权限字符,末尾的加号表示该文件存在若干条目的ACL权限
用户:显示用户ACL设置,与标准的文件设置相同
组:显示当前ACL掩码设置,而不是所属组权限
其他:显示其他ACL设置,与标准的文件设置相同。
当文件设置ACL权限后,使用chmod修改该文件的所属组权限,修改的不是组权限而是更改ACL掩码。如果需要设置所属组权限,则需要使用设置ACL权限的命令。
查看ACL权限的命令:getfacl
查看文件ACL
要显示文件上的ACL设置,使用getfacl file
[root@1060a opt]# getfacl file
# file: file
# owner: root
# group: root
user::rw-
user:admin:rwx #effective:rw-
group::r--
mask::rw-
other::r--
注释条目:
# file: file 该文件用户名
# owner: root 该文件的拥有人
# group: root 该文件的所属组
用户条目
user::rw-
user:admin:rwx #effective:rw-
第一行文件拥有人权限。user的权限为rw-
第二行指定用户权限。用户admin权限为rwx,但是掩码将有效权限控制为rw
组条目
group::r-- 组所有者权限。
掩码条目
mask::rw-
掩码设置显示可能为所有指定用户和组,提供的最大权限。
其他条目
other::r--
其他用户权限。
查看目录ACL
要显示文件上的ACL设置,使用getfacl directory
[root@1060a tmp]# getfacl dir
# file: dir
# owner: user
# group: operators
# flags:-S-
user::rwX
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
default:user::rwx
default;user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::--
注释条目
# file: dir
# owner: user
# group: operators
# flags:-S-
前三行是注释,用于识别目录名,拥有人和所属组。如果存在特殊权限,则会出现在第四行注释来显示所设置的标志。这里表示设置了sgid。
标准ACL条目
user::rwX
user:consultant3:---
user:1005:rwx
group::rwx
group:consultant1:r-x
group:2210:rwx
mask::rwx
other::---
与上午中文件上的ACL中相同。
默认条目
default:user::rwx
default;user:consultant3:---
default:group::rwx
default:group:consultant1:r-x
default:mask::rwx
default:other::--
默认权限,在该目录下创建新文件或目录时,会自动获得这些ACL权限。
目录会完全继承所有默认权限。
文件同样会继承所有权限,但是会使用权限掩码将x权限移除。
[root@1060a tmp]# setfacl -m d:user:admin:rwx dir/
[root@1060a tmp]# getfacl dir/
# file: dir/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:admin:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
[root@1060a tmp]# touch dir/file
[root@1060a tmp]# getfacl dir/file
# file: dir/file
# owner: root
# group: root
user::rw-
user:admin:rwx #effective:rw-
group::r-x #effective:r--
mask::rw-
other::r--
注意:
getfacl命令的输出可以用作setfacl的输入,用来恢复ACL或者从源文件或目录负责ACL并将其保存到新文件中。
eg:
[root@localhost tmp]# getfacl 123 > 123-acl
[root@localhost tmp]# touch text
[root@localhost tmp]# setfacl --set-file=123-acl t
ACL权限优先级
在决定一个进程能否访问文件时,将按如下应用文件权限和ACL。
- 如果以文件拥有人身份运行进程,则应用文件的用户ACL权限。
- 如果以指定用户ACL条目中的用户身份运行进程,则应用指定用户ACL权限
- 如果以文件的拥有组运行进程,则应用文件的所属组ACL权限。
- 如果以指定组条目中的身份运行进程,则应用指定组ACL权限
- 最后,都不匹配则应用其他ACL权限。
ACL权限设置
命令:setfacl
语法:
setfacl 选项 filename/dirname
常用选项:
-m 设当ACL权限
-x 删除指定的ACL权限
-b 删除所有ACL权限
-d 设置默认ACL权限
-k 删除默认权限
-R 递归设置ACL。
eg:
给用户st赋予ACL的只读权限
# setfacl -m u:st:r class
给用户组stg赋予ACL的读执行权限
#setfacl -m g:stg:rx class
删除用户组stg的ACL权限
#setfacl -x g:stg: class
删除用户st的ACL权限
#setfacl -x g:st: class
清楚文件或目录的所有ACL权限
#setfacl -b class
设置目录的默认权限
#setfacl -dm u:user1:rwx,g:user1:rx dir
#setfacl -m d:u:user1:rwx,d:g:user1:rx dir