【Linux】权限
Linux下用户的分类
Linux下的用户分为两类:
-
root用户/超级用户
root用户基本不受权限的约束,可以在linux系统下做任何事情,不受限制。 -
普通用户
普通用户是受权限约束的,可以在linux下做有限的事情。 -
超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
root用户和普通用户如何切换?
使用su指令或su - 指令
su指令和su - 指令切换用户的区别:使用su指令切换用户,用户身份变了,但是工作目录没变。使用su - 指令切换用户,是以重新登录的方式切换用户的,不仅用户身份会变化,工作目录也会变成切换后的用户的家目录。 -
root用户切换成普通用户
root用户可以直接切换成任意一个普通用户,无需密码。切换方式:su 目标用户名/ su - 目标用户名
-
普通用户切换成root用户或者其他普通用户
普通用户切换成root用户或者其他普通用户,需要知道目标用户的密码。切换方式:su 目标用户名/ su - 目标用户名
普通用户切换成root用户:
普通用户切换成其他普通用户:
如何对一条指令进行提权?提权——提升当前用户权限
对一条指令进行提权,可以使用sudo指令。
sudo指令:表示以root用户的身份执行sudo后面跟的指令。
注意: 这里有一个前提,普通用户能使用sudo进行提权的前提是——普通用户被添加进了系统的信任白名单之中。
将普通用户添加到系统信任白名单的方法:
-
登录root账号;
-
使用vim打开/etc/sudoers配置文件;
注意: 只有管理员可以更改配置文件 -
在配置文件中找到命令 root ALL=(ALL) ALL,将其复制粘贴到下一行,并将root改为目标用户的用户名;
-
进入底行模式,保存退出vim。
sudo对指令提权的方式:sudo 指令
注意:
1、sudo command只能对指令暂时提权。
2、每次执行 sudo 后,仅对当前命令赋予提权权限,执行完成后立即恢复原用户权限。
3、默认情况下,输入一次密码后,密码会在15分钟内缓存(可通过配置调整),期间再次使用 sudo 无需重复输入密码。但每次执行 sudo 仍需显式调用,权限不会自动延续到后续命令。显式调用:在每一条需要提权的命令之前都加上sudo
权限的概念
什么是权限?
在计算机系统中,权限是控制用户或程序对资源(如文件、目录、设备等)访问能力的规则。
权限既和“人”有关,也和事物的属性有关。
权限和“人”有关:权限认证的时候其实是在认证人和身份是否相符。
权限和事物的属性有关:例如,文件不能被当做面包拿来吃,因为文件不具备“可食用”这样的属性。
文件访问者的分类(人)
在Linux中,将权限身份划分为三类:
- 拥有者
文件属于谁 - 所属组
如:Linux中有10个用户,其中6个用户为一组,这6个用户可以给特定的文件或目录设定一些组级别的约束,就可以保证同一个组的人能共享某些资源。 - 其他人
文件不属于谁
注意 : 拥有者、所属组、其他人,这三个权限身份由root用户和普通用户扮演。如:root用户可以是一个文件的拥有者、所属组、其他人这三个身份中的任意一个,普通用户同理。如果一个用户既不是文件的拥有者,也不是文件的所属组,那么这个用户就是文件的其他人。
文件类型和访问权限(事物属性)
文件类型
在Windows系统中,以文件名的后缀来区分文件类型;在Linux系统中,不以文件名后缀作为文件类型的区分。
Linux中的文件类型包括:
- d:文件夹(目录)
- -:普通文件
文本、可执行程序、库,基本都属于普通文件 - l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件(用来进行通信)
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
在Linux中,我们输入ll命令,显示的文件属性的第一列的第一个字符就表示文件类型。
上图中文件属性的解析如下:
访问权限
文件具有r(可读)、w(可写)、x(可执行)这三种访问权限。
普通文件的rwx权限:
r:读取文件内容
w:修改文件内容
x:执行文件
-:表示对应权限的位置没有权限
目录文件的rwx权限:
r:是否允许查看指定目录下的文件内容
w:是否允许在当前目录下进行创建、修改、删除
x:是否允许用户进入对应的目录
-:表示对应权限的位置没有权限
在Linux中,输入ll命令之后,显示的文件属性的第一列的第2位到第10位为权限位。在这9个权限中,以3个权限位为一组进行划分。第2到第4位表示文件拥有者的权限,第5到第7位表示文件所属组的权限,第8到第10位表示文件其他人的权限。
注意:
对于基本权限(rwx来说)
1、每一个权限位表示什么权限,是固定的;
2、每一个权限位只能表示对应权限的有无。
文件权限值的表示方法
方法一:字符表示法
Linux表示 | 说明 |
---|---|
r– | 只读 |
-w- | 仅可写 |
–x | 仅可执行 |
rw- | 可读可写 |
-wx | 可写可执行 |
r-x | 可读可执行 |
rwx | 可读可写可执行 |
— | 无权限 |
方法二:八进制数值表示法
我们已经知道权限位以三三为一组,如果以“1”表示对应权限的“有”,以“0”表示对应权限的“无”,那么权限从000到111就有八种表现方式。三个二进制位对应八进制,因此我们可以用八进制来表示权限。
符号表示 | 二进制 | 八进制 | 含义 |
---|---|---|---|
r– | 100 | 4 | 只读 |
-w- | 010 | 2 | 仅可写 |
–x | 001 | 1 | 仅可执行 |
rw- | 110 | 6 | 可读可写 |
-wx | 011 | 3 | 可写可执行 |
r-x | 101 | 5 | 可读可执行 |
rwx | 111 | 7 | 可读可写可执行 |
— | 000 | 0 | 无权限 |
文件访问权限的相关设置方法
一、修改文件访问权限
修改文件访问权限所用指令:chmod
格式:chmod [参数] 权限 文件名
常用选项:
- R 递归修改目录文件的权限
注意: 只有文件的拥有者和root才可以改变文件的权限。
chmod修改文件访问权限的方法一:chmod 用户表示符+ / - / =权限字符 文件名
- +:增加用户读写执行权限
- -:移除用户读写执行权限
- =:仅保留用户的某一权限,并移除其他权限
用户符号:
- u:拥有者
- g:所属组
- o:其它人
- a:所有用户
用法示例:
chmod修改文件访问权限的方法二:chmod 三位八进制数字 文件名
第一位八进制数字:所有者的权限
第二位八进制数字:所属组的权限
第三位八进制数字:other的权限
示例用法:
二、修改文件拥有者
修改文件拥有者所用指令:chown
格式:chown [参数] 新拥有者 文件名
修改文件拥有者的两种方法:
1、root用户更改;
2、普通用户使用sudo指令,对命令进行提权;
修改文件的所属组
修改文件所属组的方法一:chgrp指令
格式:chgrp [参数] 新所属组 文件名
常用选项:
- -R 递归修改文件或目录的所属组
注意: 普通用户必须是文件所有者且属于目标组才能使用chgrp指令修改文件所属组,其他情况下(非文件所有者或不属于目标组)则需root权限才能修改文件所属组。
用法示例:
下图中,study用户是test.c文件的拥有者,但不是目标所属组temp的成员,故切换到root用户修改所属组。
修改文件所属组的方法二:chown指令
格式:chown :新所属组 文件名
注意: 普通用户必须是文件所有者且属于目标组才能使用chown指令修改文件所属组,其他情况下(非文件所有者或不属于目标组)则需root权限才能修改文件所属组。
【补充】 chown同时修改文件的拥有者和所属组
格式:chown [选项] 新所有者:新所属组 文件名
注意: 使用chown同时修改文件的拥有者和所属组,需具有root权限。
umask
普通文件的默认起始权限是666(rw-rw-rw-),目录的默认起始权限是777(rwxrwxrwx)。
那么,为什么我们实际上创建出来的普通文件默认权限是664(rw-rw-r- -),目录默认权限是775(rwxrwxr-x)呢?
这是因为Linux中存在一个权限掩码umask。当创建一个新目录或新文件时,系统根据某种运算,去掉默认权限中在权限掩码出现的权限,最终得到的权限才是我们看到的权限。
权限计算规则:实际权限 = 默认权限 &(~umask)
- &:按位与
- ~:按位取反
查看当前用户的umask值:
前缀0表示该数值采用八进制表示法,从图中我们可以看出umask的值是002。
权限计算示例: