02.【Linux系统编程】Linux权限(root超级用户和普通用户、创建普通用户、sudo短暂提权、权限概念、权限修改、粘滞位)
目录
1. root超级用户和普通用户
2. 创建普通用户、密码设置、切换用户
3. sudo短暂提权(给普通用户添加sudo权限)
4. 权限
4.1 是什么
4.2 为什么有权限?(权限 = 角色 + 目标属性)
4.2.1 角色
4.2.2 目标属性
4.3 修改目标属性chmod
4.3.1 相关指令
4.3.2 文件权限相关问题(重点)
4.3.3 目录权限相关问题(重点)
4.3.4 缺省权限(权限掩码)(重点)
4.3.5 文件的删除权限 & 粘滞位(重点)
4.4 修改角色chown\chgrp
4.4.1 相关指令
1. root超级用户和普通用户
Linux下有两种用户:超级用户(root)、普通用户。
• 超级用户:可以再linux系统下做任何事情,不受限制
• 普通用户:在linux下做有限的事情。
• 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
2. 创建普通用户、密码设置、切换用户
语法: | adduser [用户名] |
功能: | 新创建一个普通用户 |
语法: | passwd [用户名] |
功能: | 给用户重设密码,root下可以直接给普通用户重置密码。普通用户使用需要加sudo |
语法: | su |
功能: | 切换用户 |
例如,要从root用户切换到普通用户user,则使用 su user。
要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的密码。
# 普通用户切换超级用户
su # 不重新登陆,不做路径变化
su - # 重新登陆,路径变回/root# 超级->普通
su # 用户名,不需要输入密码,
注意:Linux多用户之间相互隔离:任何用户,无法进入其他用户的家目录。
3. sudo短暂提权(给普通用户添加sudo权限)
sudo:是用来进行指定的短暂提权的。
比如:安装软件到系统中,需要管理员root权限。(软件其实只安装了一份,允许大家同时使用)
举例:whoami ->普通用户 -> sudo ls ->报错
给普通用户添加sudo权限
1. 切换root用户,打开/etc/sudoers文件
vim /etc/sudoers
2. 在100行有以下代码
root ALL=(ALL) ALL
3. 拷贝上述代码并修改用户名为需要添加sudo权限的用户。
root ALL=(ALL) ALL
gyy ALL=(ALL) ALL
# 我的普通用户名为gyy
4. 进入vim的命令模式,使用wq!强制保存退出。
4. 权限
4.1 是什么
权限的本质是:能或者不能做什么事情。
4.2 为什么有权限?(权限 = 角色 + 目标属性)
1. 控制用户的行为,防止错误的发生
2. 理解:权限 = 角色 + 目标属性
权限首先限制的是角色(人)
权限要求目标必须具备对应的属性
(Linux下一切皆文件,面对的都是文件的:读、写、执行)
4.2.1 角色
1. 角色是什么?
角色有:拥有者(user)、所属组(group)、other。
other不需要记录,除了拥有者、所属组之外的就是other。
2. 什么是所属组?
更精细化的权限管理,首先要有更精细化的身份角色。所属组就是用来给角色分组的。
4.2.2 目标属性
1. 权限位
拥有者、所属组、other每个有三个权限位,分别为rwx(可读、可写、可执行,权限位是“-”代表没有此权限)
◦ 读(r/-):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
◦ 写(w/-):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
◦ 执行(x/-):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
◦ “-”表示不具有该项权限
例:像下列test.txt文件拥有者的权限是:可读可写不可执行,所属组权限是:可读可写不可执行,other权限是:可读、不可写、不可执行。
4.3 修改目标属性chmod
4.3.1 相关指令
语法: | chmod [参数] 权限 文件名 |
功能: | 修改文件属性,参数可以使用“,”表达式 |
常用选项: | R 递归修改目录文件的权限 说明:只有文件的拥有者和root才可以改变文件的权限。 |
修改权限的符号: | |
+ | 向权限范围增加权限 |
- | 向权限范围取消权限 |
= | 向权限范围赋予权限 |
用户符号: | |
u | 拥有者 |
g | 所属组 |
o | 其他用户 |
a | 所有用户 |
实例:
# 给拥有者添加rw权限
chmod u+rw abc.txt# 给other取消x权限
chmod o-x abc.txt# 给所有角色权限设置为rwx
chmod a=rwx abc.txt
以上是文件权限值得字符表示法,还有三位8进制表示法,将拥有者、所属组、other的三个权限位分别用"1"代表有权限,"0"代表没有权限。使用三位八进制表示权限值。
实例:
# 将test1.txt的权限设置为 110110110 即 rw-rw-rw-
chmod 666 test1.txt# 将test2.txt的权限设置为 111111111 即 rwxrwxrwx
chmod 777 test2.txt
4.3.2 文件权限相关问题(重点)
1. 能修改任何人的文件权限吗?用户只能更改自己的文件权限。
2. 没有权限会怎么办?系统会拒绝让我们访问(Permission denied)
3. 确定权限信息的时候,系统会先确定用户是谁?拥有者、所属组,还是other?
在Centos下,用户角色只确定一次,顺序是:拥有者,所属组,other
4. root用户的权限?不受权限约束
任何普通用户的文件,root都可以读写
user和group都是root的用户,即使user和group的权限设置位"---",root用户也可以读写。
5. 如何理解可执行?可执行只是允许文件执行
可执行权限 != 文件可以执行。
4.3.3 目录权限相关问题(重点)
默认情况下,新建的目录rwx权限都要有。
6. 如果目录没有r权限,就无法查看目录里面的文件,ls报(Permission denied)
7. 如果目录没有w权限,就无法再智能目录内部新建文件
8. 如果目录没有x权限,就不能进入目录。
4.3.4 缺省权限(权限掩码)(重点)
对于新建普通文件:起始权限666,默认不带可执行
对于新建目录文件:起始文件777,默认携带x
1. 权限掩码umask:系统默认存在,用来让用户设置实际初始权限。
1. umask目的:希望凡是在umask中出现的权限都不应该在最终权限中出现。
2. 为什么要有umask?
a. 默认权限,由OS自主决定,无法在船舰前进行修改 --- 系统可配置,可以灵活满足需要的一种表现。
b. 特殊情况下,配置umask,可以控制文件的默认权限,让我们的代码都是可控的。
最终权限 = 起始权限 & (~umask)
umask
# 0002 第一位不看,后三位分别对应9个位的权限值
2. 修改权限掩码
语法: | umask [权限掩码] |
功能: | 查看/修改权限掩码 |
实例:
# 设置权限掩码
umask 755# 查看权限掩码
umask
4.3.5 文件的删除权限 & 粘滞位(重点)
1. 一个文件是否能被删除,与文件本身无关,与文件所处的目录的w权限有关!
2. 协作问题,粘滞位
如果两个用户之间要进行文件级别的协作,不能将共享目录放在私人账号里,则只能放在根目录下。共享文件,不想让非文件的拥有者删除对应的文件!使用粘滞位解决。
粘滞位目的:在一个公共目录(如 /tmp
)中,用户只能删除或重命名自己创建的文件或目录,而不能删除其他用户的文件,即使该目录对所有用户都有写权限(如 777)。
粘滞位添加:(粘滞位是在other的x权限位置)
# 添加粘滞位
chmod +t [目录/文件名]# 删除粘滞位
chmod -t [目录/文件名]
当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
1. 超级管理员删除
2. 该目录的所有者删除
3. 该文件的所有者删除
4.4 修改角色chown\chgrp
系统默认不允许我们把文件给别人,所以想要修改角色必须提高权限,使用sudo或者切换root用户。
4.4.1 相关指令
语法: | chown [角色] 文件名 |
功能: | 修改文件拥有者角色,可以同时修改拥有者和所属组 |
常用选项: | -R 递归修改文件或目录的拥有者 |
语法: | chgrp [角色] 文件名 |
功能: | 修改文件所属组角色 |
常用选项: | -R 递归修改文件或目录的所属组 |
# 修改test1.txt的拥有者为root
chown root test1.txt# 修改test2.txt的拥有者和所属组为user1
chown user1:user1 test2.txt# 修改test3.txt的所属组为user3
chgrp user3 test3.txt