Linux 之 【Linux权限】
目录
1.Linux用户
1.1 Linux用户的分类
1.2 用户的切换
2. Linux权限管理
2.1 文件访问者分类(身份)
2.2 文件类型和访问权限(事物属性)
2.3 文件权限值的表示方法
2.4 文件访问权限的相关设置方法
a)chmod
b)chown
c)chgrp
d)umask
2.5 目录的权限
粘滞位
1.Linux用户
1.1 Linux用户的分类
Linux下有两种用户:超级用户(root)、普通用户
- 超级用户:可以在linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”
- 使用root账号可以创建、删除普通用户
1.2 用户的切换
命令:su [用户名]
功能:切换到指定用户(默认切换到 root),不加载目标用户的环境变量,工作目录不变
例如,要从root用户切换到普通用户user,则使用 su 用户名。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令(密码)
命令:su - [用户名]
功能:切换到指定用户(默认切换到 root),并完全加载目标用户的环境变量和 Shell 配置文件,工作目录切换到目标用户的家目录
例如,要从root用户切换到普通用户user,则使用 su - 用户名。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令(密码)
总结
特性 | su | su - |
---|---|---|
环境变量 | 保留原用户的环境 | 加载目标用户的环境 |
工作目录 | 保持当前目录 | 切换到目标用户的家目录 |
Shell 配置 | 不重新加载配置文件 | 加载 ~/.bashrc 等 |
典型用途 | 快速提权执行命令 | 模拟完整用户登录 |
2. Linux权限管理
权限的大白话就是 一件事是否允许被你做
- 权限认证的是身份(只有校长才能随意进出校长办公室,学生不允许)
- 权限也和事物的属性有关(书本用来承载知识,而不是用来吃的)
2.1 文件访问者分类(身份)
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
人和身份组合,才是完整的
2.2 文件类型和访问权限(事物属性)
对于linux来说,文件后缀没有直接的意义,操作系统可以识别,
但是对于操作系统上的软件不一定
- 文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
- 基本权限
读 Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
写 Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
执行 execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
“—” 表示不具有该项权限
2.3 文件权限值的表示方法
权限符号 | 八进制值 | 二进制值 | 实际权限含义 |
---|---|---|---|
-rwxr-xr-- | 754 | 111 101 100 | 所有者:读写执行;组:读执行;其他:只读 |
-rw-r--r-- | 644 | 110 100 100 | 所有者:读写;组和其他:只读 |
-rwxr-xr-x | 755 | 111 101 101 | 所有者:读写执行;组和其他:读执行 |
-rw------- | 600 | 110 000 000 | 仅所有者可读写 |
--------- | 000 | 000 000 000 | 无任何权限(极少见) |
权限可以用权限符号(r\w\x\-)来表示,因为每一位要么有权限要么没权限,所以可以用二进制来表示,当然,三位二进制数正好组成一位八进制数,所以也可以用八进制来表示
2.4 文件访问权限的相关设置方法
a)chmod
功能:设置文件的访问权限
格式:chmod [参数] 权限 文件名
常用选项: chmod R -> 递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
- chmod命令权限值的格式
用户表示符+/-=权限字符
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
- 用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
三位8进制数字进行修改
b)chown
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
root才能修改文件的拥有者
c)chgrp
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
只有文件的拥有者和 root 用户可以改变文件的所属组
d)umask
新建文件夹默认权限=0666 新建目录默认权限=0777 (暂时不看最高位的0)
但实际上我们所创建的文件和目录,看到的权限往往不是上面这个值。
原因就是创建文件或目录的时候还要受到 umask的影响。
假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask
即,在权限掩码出现的权限不能在出现在起始权限中
- 超级用户默认掩码值为0022,普通用 户默认为0002。(暂时忽略最高位)
功能: 查看或修改文件掩码
格式:umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。
所谓减去 最终权限 = 默认权限 & ~umask
超级用户默认掩码值为0022,普通用 户默认为0002。
2.5 目录的权限
- 可执行权限: 是否允许cd到目录中
- 可读权限: 是否允许用ls等命令查看目录中的文件内容.
- 可写权限: 是否允许在目录中创建、删除、更改文件
当用户(拥有者、所属组、其他用户)具有某个目录的写权限时,
不管里面的文件是否是Ta创建的,Ta都可以选择删除,但是这不合理啊
所以为了避免这种情况,Linux引入了粘滞位的概念
粘滞位
- 粘滞位的核心原理
(1)权限控制机制:
当目录设置粘滞位后,系统会强制检查文件删除/重命名操作的发起者身份:
- 仅允许文件所有者、目录所有者或root用户删除/重命名文件
- 普通用户无法删除/重命名其他用户创建的文件(即使对目录有写权限)
(2)与常规权限的区别:
- 常规目录权限中,若用户对目录有写权限(w),则可删除目录内任意文件
- 粘滞位通过额外检查机制,覆盖了常规权限的默认行为
- 权限字符串特征
使用ls -ld 目录名查看时,权限字段最后一位显示为t或T
t:目录其他用户有执行权限(x)且设置粘滞位
T:目录其他用户无执行权限(-)但设置粘滞位