目录
前言
Linux作为一款开源操作系统,其权限管理机制是非常重要的一部分。熟练掌握Linux权限,可以帮助我们更好地管理文件和目录,保障系统的安全性和稳定性。
1. Linux权限的概念
Linux中分为两种用户:
- 超级用户(root)
- 普通用户
超级用户可以再Linux系统下做任何事情,不受限制
普通用户在Linux下是受限制的,Linux权限的管理也就是对普通用户权限的管理
比如:
用户test(普通用户)访问www(普通用户)的文件夹被拒绝访问
root账户不受任何限制直接进入:
所以root用户的密码非常重要,不要泄露!!
命令:su +【用户名】
功能:切换用户
从root用户切换到普通用户,则使用 su+user
从普通用户切换到root用户则使用 su+root(root可以省略)
普通用户执行sudo -ls,在正常的情况下:
没有设置权限的情况下无法执行
sudo + 指令 :以root身份运行
执行显示test(用户)不再sudoers文件里
解释:
sudoers文件相当于一个白名单,在名单里的用户才可以使用sudo
注意:
sudoers文件拥有者是root(超级管理员)
普通用户无法访问修改
2. Linux权限管理
文件访问者分类:
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在组的用户:g---Group
- 其它用户:o---Others
使用 “ ls -l ”指令可以查看文件的详细信息
这些信息都代表着什么意思?
权限字符表示:
进制数表示:
2.1 修改权限
语法:chmod +【参数】 + 文件
功能: 设置文件访问权限
常用选项:
- 字符修改
比如:
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
用户符号:
- u:拥有者
- g:拥有者同组用
- o:其它用户
- a:所有用户
去除拥有者的r权限
增加拥有者可读可执行权限:
去除拥有者可执行权限,去除所属组可写权限,去除其他人可读权限:
给所有人写权限:
- 进制数修改权限
3位进制数:
- 第1位代表拥有者权限
- 第2位是所属组权限
- 第3位是其他用户权限
拓展
上述的指令是对文件的权限进行修改,私下大家可以进行权限验证
Linux执行文件:
- 有可执行权限
- 是可执行文件
注意:
当拥有者和和所属组一样,而拥有者没有可执行权限,拥有者将无法执行文件:
当拥有者和和所属组一样时,权限判断时有优先次序,系统在判断时,拥有者没有可执行权限就直接禁止,不会再进行后续判断
如果是root账户,即使没有读写执行权限依然可以操作:
root之下没有权限
2.2 修改拥有者
语法:chown +【用户】 + 文件
功能: 修改文件拥有者
正常情况下,普通用户无法私自将自己所属文件修改为其他用户所属:
需要以root身份执行:
其他用户使用sudo指令也可以修改
2.3 修改所属组
语法:chgrp +【用户组】 + 文件
功能: 修改文件所属组
常用选项:
- -R 递归修改文件或目录的所属组
同时修改拥有者和所属组:
3. 文件类型
Linux的文件类型不通过后缀区分(不代表Linux不用后缀)
常见文件类型:
- -开头: 普通文件,文本、源代码、图片、视频、库、可执行等
- d开头: 目录文件
- b开头: 块设备文件 ->磁盘
- c开头: char,字符设备文件 ->键盘显示器
- l开头: 链接文件
- p开头: 管道文件
- s开头: socket文件
3.1 file指令
功能:辨识文件类型。
语法:file 【选项】 文件或目录...
常用选项:
- -c 详细显示指令执行过程,便于排错或分析程序执行的情形。
- -z 尝试去解读压缩文件的内容
比如:
4. 权限掩码
权限顶格写权限就是777(所有人都有rwx权限)
那为什么每次创建目录默认权限不是777?每次创建的文件默认权限不是666?
这里就要引入权限掩码的概念了
umask指令
功能:查看或修改文件掩码
- 查看权限掩码:
umask
我的设备上的权限掩码是002
我创建的文件默认权限是664
创建文件时:从起始权限中,去掉umask中出现的权限
666二进制:110 110 110
002二进制:000 000 010
去除002:110 110 100 ->664
- 修改权限掩码
语法:umask 【权限掩码】
权限掩码是怎么去除的?
去除:不是二进制相减
计算规则:
起始权限& (~按位取反umask)=最终权限(默认)
比如:
666:
110 110 110
000 000 011->按位取反:111 111 100
110 110 110
111 111 100 &
——————————
110 110 100 ->664
777:
111 111 111
111 111 100 &
——————————
111 111 100 ->774
5.目录权限
前边我们提到的例子都是对文件的限制,那权限对目录有什么影响呢?
- 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中
- 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容
- 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
注意:
没有w(写)权限,仍然可以修改文件权限(可能有些版本操作系统里不允许),但不允许移动和修改文件名
6. 粘滞位
那么现在问题来了,只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不管这个用户是否有这个文件的写权限
这样似乎很不复合常理,我的文件,凭什么你可以删?
也就是说:
一个文件能否被删除,并不取决于文件本身,取决于文件所在的目录,目录拥有者是否有w权限
一般情况下普通用户无法进入到其他用户目录下,更无法创建文件
如果不能将文件创建到其他用户的文件下,那用户之间如何进行数据交换呢?
为了解决这个问题,Linux中有一个特殊的目录:
特殊目录(tmp,拥有者root)
来实现文件共享,other权限:rwx
tmp目录允许所有用户将临时文件创建在该目录。
那么问题来了:
用户都有W权限,那都可以删除文件,那如何防止自己的文件被其他用户删除?
把所有的用户都去除w权限不行,因为去除other的w权限,其他用户无法删除的同时,也无法创建文件。
为了解决这个问题,Linux给其他用户新增一个权限:t(粘滞位)
粘滞位:给目录中的other设置一个权限位,具有x的意义,同时也进一步对目录权限进行特殊限定:该目录里的文件,只有root和文件(或目录)的拥有者有权利进行删除。
总结
掌握Linux权限管理,可以更好地管理文件和目录,提高系统的安全性和稳定性,上述的内容,大家可以私下实验一下,亲身体验才能更有感触。好了,以上便是本期全部内容。最后,感谢阅读!