在多用户计算机系统的管理中,权限( p r i v i l e g e privilege privilege)是指某个特定的用户具有特定的系统资源使用权力,像是文件夹,特定系统指令的使用或存储量的限制。通常,系统管理员( r o o t root root),或者在网络中的网络管理员,对某个特定资源的使用分配给用户不同的权限,系统软件则自动地强制执行这些权限。
文章目录
一、Linux 用户权限
1. 用户权限
L i n u x Linux Linux 下有两种用户:超级用户( r o o t root root)、普通用户。
超级用户:可以在 l i n u x linux linux 系统下做任何事情,不受限制。(超级用户的命令提示符是
#
)普通用户:在 l i n u x linux linux 下做有限的事情。(普通用户的命令提示符是
$
)
2. su 命令
命令:
su [用户名]
。
功能:切换用户。
- 要从 r o o t root root 用户切换到普通用户 u s e r user user,则使用
su [user name]
(不需要输密码)。
[root@VM-8-4-centos ~]# su yy
[yy@VM-8-4-centos root]$ whoami
yy
- 要从普通用户 u s e r user user 切换到 r o o t root root 用户,则使用
su root
( r o o t root root 可以省略) / / /su -
(会改变目录到家目录,即重新登录账号),此时系统会提示输入 r o o t root root 用户的密码来登录(密码不回显)。
[yy@VM-8-4-centos root]$ su
Password:
[root@VM-8-4-centos ~]# whoami
root
3. sudo 命令
命令:
sudo [指令]
。
功能:用来进行指令的短暂提权。
我们用普通用户身份(yy
)来创建一个文件夹,显示这个文件夹信息的时候会看到是 yy
用户创建的:
[yy@VM-8-4-centos ~]$ mkdir dir_yy
[yy@VM-8-4-centos ~]$ ll
total 4
drwxrwxr-x 2 yy yy 4096 Apr 13 14:44 dir_yy
此时,如果想要使用 root
身份来创建文件夹,除了直接登陆 root
账号,还可以直接使用 sudo
来将要使用 root
权限操作的指令暂时提权(但是刚开始会直接报错,因为 yy
不在能提权的白名单里(sudoers file
)):
[yy@VM-8-4-centos ~]$ sudo mkdir dir_root
yy is not in the sudoers file. This incident will be reported.
此时,我们就要使用 root
用户,来将允许提权操作的用户加到白名单中,以后就可以直接使用 sudo
指令来提权了,将相当于给这个用户直接开了一条绿色通道:
[yy@VM-8-4-centos ~]$ su
Password:
[root@VM-8-4-centos yy]# vim /etc/sudoers
添加完后,就可以返回 yy
用户,此时就可以正常进行提权操作了(提权后创建的文件夹就是以 root
用户身份来创建的了):
[root@VM-8-4-centos yy]# su yy
[yy@VM-8-4-centos ~]$ ls
dir_yy
[yy@VM-8-4-centos ~]$ sudo mkdir dir_root
[sudo] password for yy:
[yy@VM-8-4-centos ~]$ ll
total 8
drwxr-xr-x 2 root root 4096 Apr 13 14:47 dir_root
drwxrwxr-x 2 yy yy 4096 Apr 13 14:44 dir_yy
注意:授权 s u d o sudo sudo 操作的时候是需要输入当前用户的密码,而不是超级用户的密码,因为当前用户已经被超级用户信任过了。
二、Linux 权限管理
1. Linux 权限概念
权限的本质:能或不能做某件事,控制用户的行为,防止错误的发生
权限首先控制的是角色
权限要求目标必须具备对应的属性
因此, 权限 = 角色 + 目标权限属性 权限=角色+目标权限属性 权限=角色+目标权限属性
由于在 L i n u x Linux Linux 下, 一切皆文件,因此,目标权限的属性即文件的属性。
1.1 访问者(人)
访问者分类 | 访问者功能 |
---|---|
u u u —— —— —— U s e r User User | 文件和文件目录的所有者(拥有者) |
g g g —— —— —— G r o u p Group Group | 文件和文件目录的所有者所在的组的用户(所属组) |
o o o —— —— —— O t h e r s Others Others | 其他用户( o t h e r other other) |
所属组的意义:更精细化的权限管理,首选要有更精细化的身份角色。即开放一个白名单,只开放给所属组的用户,与其他用户分隔开。
1.2 访问权限(事物属性)
访问权限分类 | 权限功能 |
---|---|
r / 4 r/4 r/4 —— —— —— 可读( r e a d read read) | 具有读取文件内容的权限;具有浏览该目录信息的权限 |
w / 2 w/2 w/2 —— —— —— 可写( w r i t e write write) | 具有修改文件内容的权限;具有删除移动目录内文件的权限 |
x / 1 x/1 x/1 —— —— —— 可执行( e x e c u t e execute execute) | 具有执行文件的权限;具有进入目录的权限 |
− - − | 表示不具有该项权限 |
2. 权限的表示方法
字符表示方法 | 2 2 2 进制表示方法 | 8 8 8 进制表示方法 |
---|---|---|
− − − --- −−− | 000 000 000 | 0 0 0 |
− − x --x −−x | 001 001 001 | 1 1 1 |
− w − -w- −w− | 010 010 010 | 2 2 2 |
− w x -wx −wx | 011 011 011 | 3 3 3 |
r − − r-- r−− | 100 100 100 | 4 4 4 |
r − x r-x r−x | 101 101 101 | 5 5 5 |
r w − rw- rw− | 110 110 110 | 6 6 6 |
r w x rwx rwx | 111 111 111 | 7 7 7 |
[yy@VM-8-4-centos ~]$ ll
total 4
-rw-rw-r-- 1 yy yy 17 Apr 13 17:08 file.txt
[yy@VM-8-4-centos ~]$ chmod 0 file.txt
[yy@VM-8-4-centos ~]$ ll
total 4
---------- 1 yy yy 17 Apr 13 17:08 file.txt
[yy@VM-8-4-centos ~]$ chmod 421 file.txt
[yy@VM-8-4-centos ~]$ ll
total 4
-r---w---x 1 yy yy 17 Apr 13 17:08 file.txt
3. 权限的设置
在确定权限信息的时候,系统会先确定用户是谁:拥有者,所属组,还是 o t h e r other other?在 C e n t o s Centos Centos 下,用户角色确定且只确定一次,顺序是:拥有者,所属组, o t h e r other other。
3.1 chmod 命令
格式:
chmod [选项] [命令权限值] [文件名]
。
功能:设置文件的访问权限。
常用选项:
选项 | 功能 |
---|---|
− R -R −R | 递归修改目录文件的权限 |
注意:只有文件的拥有者和 r o o t root root 才可以改变文件的权限。
c h m o d chmod chmod 命令权限值的格式:[用户表示符] [操作符] [权限字符]
。
- 用户表示符:
用户符号 | 含义 |
---|---|
u u u | 拥有者 |
g g g | 拥有者同组用户 |
o o o | 其他用户 |
a a a | 所有用户 |
- 操作符:
操作符 | 含义 |
---|---|
+ + + | 向权限范围增加权限字符所表示的权限 |
− - − | 向权限范围取消权限字符所表示的权限 |
= = = | 向权限范围赋予权限字符所表示的权限 |
字符表示法:
[yy@VM-8-4-centos ~]$ ll
total 0
-r--rw-r-- 1 yy yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ chmod u+w file.txt # 增加权限
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 yy yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ chmod o-x file.txt # 取消权限
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 yy yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ chmod a=x file.txt # 赋予权限(覆盖)
[yy@VM-8-4-centos ~]$ ll
total 0
---x--x--x 1 yy yy 0 Apr 13 23:54 file.txt
8 8 8 进制表示法:
[yy@VM-8-4-centos ~]$ chmod 664 file.txt
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 yy yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ chmod 640 file.txt
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-r----- 1 yy yy 0 Apr 13 23:54 file.txt
3.2 chown 命令
格式:
chown [选项] [用户名] [文件名]
。
功能:修改文件的拥有者。
常用选项:
选项 | 功能 |
---|---|
− R -R −R | 递归修改文件或目录的拥有者 |
修改文件拥有者:
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 yy yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ sudo chown root file.txt # 将文件拥有者改为root用户
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 root yy 0 Apr 13 23:54 file.txt
修改目录拥有者(递归修改):
[yy@VM-8-4-centos ~]$ ll dir
total 0
-rw-rw-r-- 1 yy yy 0 Apr 14 00:14 test1
-rw-rw-r-- 1 yy yy 0 Apr 14 00:14 test2
[yy@VM-8-4-centos ~]$ sudo chown -R root dir # 递归修改目录下所有文件拥有者
[yy@VM-8-4-centos ~]$ ll dir
total 0
-rw-rw-r-- 1 root yy 0 Apr 14 00:14 test1
-rw-rw-r-- 1 root yy 0 Apr 14 00:14 test2
3.3 chgrp 命令
格式:
chgrp [选项] [用户组名] [文件名]
。
功能:修改文件或目录的所属组。
常用选项:
选项 | 功能 |
---|---|
− R -R −R | 递归修改文件或目录的所属组 |
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 root yy 0 Apr 13 23:54 file.txt
[yy@VM-8-4-centos ~]$ sudo chgrp root file.txt # 将文件所属组修改为root用户
[yy@VM-8-4-centos ~]$ ll
total 0
-rw-rw-r-- 1 root root 0 Apr 13 23:54 file.txt
3.4 umask 命令(缺省权限)
格式:
umask [权限值]
。
功能:查看或修改文件掩码。将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
文件类型 | 默认权限 |
---|---|
新建文件 | 0666 0666 0666 |
新建目录 | 0777 0777 0777 |
但实际上创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 u m a s k umask umask 的影响。
假设默认权限是 m a s k mask mask,则实际创建的出来的文件权限是: m a s k & ∼ u m a s k mask\ \&\ \sim umask mask & ∼umask。
用户类型 | 默认掩码 | 实际创建的文件权限 | 实际创建的目录权限 |
---|---|---|---|
超级用户 | 0022 0022 0022 | 0644 0644 0644 | 0755 0755 0755 |
普通用户 | 0002 0002 0002 | 0664 0664 0664 | 0775 0775 0775 |
- 查看掩码(
umask
):
[root@VM-8-4-centos ~]# umask # 超级用户
0022
[yy@VM-8-4-centos ~]$ umask # 普通用户
0002
- 修改掩码(
umask [权限值]
):
[yy@VM-8-4-centos ~]$ mkdir a
[yy@VM-8-4-centos ~]$ touch b
[yy@VM-8-4-centos ~]$ ll
total 4
drwxrwxr-x 2 yy yy 4096 Apr 14 13:18 a
-rw-rw-r-- 1 yy yy 0 Apr 14 13:18 b
[yy@VM-8-4-centos ~]$ umask 0777 # 修改掩码(即修改缺省权限)
[yy@VM-8-4-centos ~]$ mkdir c
[yy@VM-8-4-centos ~]$ touch d
[yy@VM-8-4-centos ~]$ ll
total 8
drwxrwxr-x 2 yy yy 4096 Apr 14 13:18 a
-rw-rw-r-- 1 yy yy 0 Apr 14 13:18 b
d--------- 2 yy yy 4096 Apr 14 13:18 c
---------- 1 yy yy 0 Apr 14 13:18 d
注意:不用担心修改 u m a s k umask umask 掩码是否会存在问题,因为当你重新连接服务器的时候,系统会自动将 u m a s k umask umask 掩码恢复到默认值。
三、目录的权限
目录的权限 | 功能 |
---|---|
可读权限 r r r | 如果目录没有可读权限,则无法使用 l s ls ls 等命令查看目录中的文件内容 |
可写权限 w w w | 如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件 |
可执行权限 x x x | 如果目录没有可执行权限,则无法 c d cd cd 到目录中 |
[yy@VM-8-4-centos ~]$ ll
total 8
drwxrwxr-x 2 yy yy 4096 Apr 14 12:11 dir
-rw-rw-r-- 1 yy yy 24 Apr 14 12:00 file.txt
[yy@VM-8-4-centos ~]$ chmod u-x dir # 减去可执行权限
[yy@VM-8-4-centos ~]$ cd dir
bash: cd: dir: Permission denied
[yy@VM-8-4-centos ~]$ chmod u-r dir # 减去可读权限
[yy@VM-8-4-centos ~]$ ls dir
ls: cannot open directory dir: Permission denied
[yy@VM-8-4-centos ~]$ chmod u-w+rx dir # 减去可写权限,加上可读和可执行权限
[yy@VM-8-4-centos ~]$ ll
total 8
dr-xr-xr-x 2 yy yy 4096 Apr 14 12:11 dir
-rw-rw-r-- 1 yy yy 24 Apr 14 12:00 file.txt
[yy@VM-8-4-centos ~]$ cd dir # 可以打开目录(可执行)
[yy@VM-8-4-centos dir]$ ls # 可以浏览目录(可读)
text.txt
[yy@VM-8-4-centos dir]$ mkdir a
mkdir: cannot create directory ‘a’: Permission denied # 不能创建目录(不可写)
[yy@VM-8-4-centos dir]$ touch test.cpp
touch: cannot touch ‘test.cpp’: Permission denied # 不能创建文件(不可写)
[yy@VM-8-4-centos dir]$ rm -rf text.txt
rm: cannot remove ‘text.txt’: Permission denied # 不能删除文件(不可写)
四、粘滞位
权限标志位: t t t(粘滞位)。
特征:只能给需要共享的目录添加粘滞位。
作用:任何一个人都可以在共享目录里创建文件,但又不能让非拥有者删除这个文件。
当一个目录被设置为粘滞位(chmod+t
),则该目录下的文件只能由:
超级管理员删除
该目录的拥有者删除
该文件的拥有者删除
drwxrwxrwx 2 root root 4096 Apr 14 16:41 tmp_ybc
[yy@VM-8-4-centos /]$ sudo chmod +t tmp_ybc # 给共享目录添加粘滞位
drwxrwxrwt 2 root root 4096 Apr 14 16:41 tmp_ybc
[bb@VM-8-4-centos tmp_ybc]$ ll
total 0
-rw-rw-r-- 1 yy yy 0 Apr 14 16:48 a
-rw-rw-r-- 1 bb bb 0 Apr 14 16:48 b
[bb@VM-8-4-centos tmp_ybc]$ rm -rf a
rm: cannot remove ‘a’: Operation not permitted # 非文件拥有者不能删除该文件
总结
通过上述介绍,我们发现,在 L i n u x Linux Linux 系统中,文件和目录的权限控制非常严格。权限分为三种类型:读( r r r)、写( w w w)和执行( x x x)。每个文件和目录都有三个权限级别:拥有者( u u u)、所属组(g)和其他用户( o o o)。通过设置不同的权限,就可以控制谁能对文件或目录执行哪些操作,方便进行管理。