权限
# 用户切换
Linux下有两种用户:超级用户(root)和普通用户。
- 超级用户:可以再linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是
#
,普通用户的命令提示符是`$
命令: su [用户名] 功能: 切换用户
# 提升当前权限
但可能某些情况下,你只想提升当前指令的权限,那么不必切换到超级用户。
sudo命令
语法:sudo
功能: sudo后面的命令相当于用root身份来执行,可以提升执行指令的权限,而不用切换超级管理员。
注意:
如果root未将普通用户添加道/etc/sudoers
中,系统不相信该普通用户,就会出错:
xxx is not in the sudoers file. This incident will be reported.
解决方案
ls /etc/sudoers
- vim进行编辑文件
/etc/sudoers
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
2
添加信任用户cen
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
cen ALL=(ALL) ALL
2
3
- 保存退出
# 文件的权限
# 文件访问者的分类
- 文件和文件目录的所有者:u---User
- 文件和文件目录的所有者所在的组的用户:g---Group
- 其它用户:o---Others
例如:
total 4
drwxrwxr-x 2 cen cen 4096 Feb 9 16:47 dir
-rw-rw-r-- 1 cen cen 0 Feb 9 16:47 file1
-rw-rw-r-- 1 cen cen 0 Feb 9 16:47 file2
# 拥有者 所属组
# 除了文件拥有者和文件所属组之外的都叫other
2
3
4
5
6
可见User和Group都是cen所有的。
# 文件类型和访问权限
drwxrwxr-x 2 cen cen 4096 Feb 9 16:47 dir
- 文件类型
- d:文件夹(目录)
- -:普通文件(源代码、库文件、可执行程序、文件压缩包...)
- l:软链接(类似Windows的快捷方式)
- b:块设备文件(例如硬盘、光驱等)
- p:管道文件
- c:字符设备文件(例如屏幕等串口设备)
- s:套接口文件
- 访问权限
字母表示法:
Linux表示 | 说明 | Linux表示 | 说明 |
---|---|---|---|
r-- | 只读 | -w- | 仅可写 |
--x | 仅可执行 | rw- | 可读可写 |
-wx | 可写可执行 | r-x | 可读可执行 |
rwx | 可读可写可执行 | --- | 无权限 |
八进制数值表示法
字符表示法 | 二进制 | 八进制数值表示法 | 说明 |
---|---|---|---|
r-- | 100 | 4 | 仅可读 |
-w- | 010 | 2 | 仅可写 |
--x | 001 | 1 | 仅可执行 |
rw- | 110 | 6 | 可读可写 |
r-x | 101 | 5 | 可读可执行 |
-wx | 011 | 3 | 可写可执行 |
rwx | 111 | 7 | 可读可写可执行 |
--- | 000 | 0 | 无权限 |
# 设置访问权限:
功能: 设置文件的访问权限
格式:chmod [选项] 用户符号 +/-/= 权限字符 文件名
1)+:向权限范围增加权限代号所表示的权限。
2)-:向权限范围取消权限代号所表示的权限。
3)=:向权限范围赋予权限代号所表示的权限。
用户符号:
- u:拥有者
- g:所属组
- o:other
- a:所有用户
常用选项:
-R
递归修改目录文件的权限
说明:只有文件的拥有者和root才可以改变文件的权限
# 改变文件拥有者
语法:chown 选项 用户名 文件名或目录名
功能: 修改文件的拥有者。
常用选项: -R
递归修改目录文件的拥有者
注意:
修改文件的拥有者需要root用户进行操作,若是普通用户则需要进行权限提升。
可以使用chown指令同时修改文件的拥有者和所属组,将拥有者和所属组的用户名用冒号隔开即可。
# 改变文件所属组
语法:chgrp 选项 用户名 文件名或目录名
功能: 修改文件的所属组
常用选项: -R
递归修改目录文件的所属组。
# umask
功能:
- 查看或修改文件掩码
- 新建文件夹默认权限 = 0666
- 新建目录默认权限 = 0777
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到
umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是:
mask & ~umask
格式: umask 权限值 说明:
将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。(umask:超级用户默认掩码值为0022,普通用户默认为0002)
# 掩码
新建文件的默认权限为0666,新建目录的默认权限为0777。其中第一位的0与特殊权限有关,我们这里不必深究,而后面三位就是权限的八进制数值表示方法。
文件:0666 -> 6 6 6 -> 110 110 110 ->
rw-rw-rw-
目录:0777 -> 7 7 7 -> 111 111 111 ->
rwxrwxrwx
所创建出来的文件和目录的权限值往往不是我们所翻译出来的值,原因就是创建文件和目录的时候还要受到umask的影响,假设默认权限是mask,则实际创建出来的文件权限 = mask & (~umask)
如下:
文件:110 110 110 & (~000 010 010) = 110 100 100 ->
rw-r--r--
目录:111 111 111 & (~000 010 010) = 111 101 101 ->
rwxr-xr-x
drwxr-xr-x 2 root root 4096 Feb 10 10:54 newdir
-rw-r--r-- 1 root root 0 Feb 10 10:54 newfile
2
# 目录的权限
对于文件来说,其可读可写可执行的属性我们都知道分别代表着什么对应的操作,那对于目录来说可读可写可执行又分别代表着什么呢? 1)可读权限: 如果用户没有该目录的可读权限,则无法通过ls指令查看目录中的文件内容。 2)可写权限: 如果用户没有该目录的可写权限,则无法通过一系列指令在目录中创建文件或删除文件。 3)可执行权限: 如果用户没有该目录的可执行权限,则无法通过cd指令进入到目录当中。
# 粘滞位
[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root 4096 Feb 10 10:54 newdir
-rw-r--r-- 1 root root 0 Feb 10 10:54 newfile
[root@VM-8-2-opencloudos ~]# chmod u-w newfile
[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root 4096 Feb 10 10:54 newdir
-r--r--r-- 1 root root 0 Feb 10 10:54 newfile
[root@VM-8-2-opencloudos ~]# rm -rf newfile
[root@VM-8-2-opencloudos ~]# ll
drwxr-xr-x 2 root root 4096 Feb 10 10:54 newdir
2
3
4
5
6
7
8
9
10
为了解决这个不合理的问题,Linux引入了粘滞位的概念。
语法:chmod +t 目录名
功能: 给目录加上粘滞位。
当一个用户将某一个目录加上粘滞位后,该目录的权限值的最后一位变为字符't',此时另一个用户就算有该目录的可写权限,也无法删除该目录下的文件。
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由超级管理员删除、该目录的所有者删除和该文件的所有者删除。