一、普通用户与超级用户
1.权限
超级用户(root)可以在Linux系统中做任何事情,不受限制,命令提示符是 #
普通用户在Linux系统中只能做有限的事,命令提示符是 $
2.切换
普通用户切换为超级用户:su root / su - ,需要输入 root 账户密码
用 logout 指令登出超级用户,返回到普通用户
超级用户切换为普通用户:su <用户名> ,不需要输入密码
普通用户切换为普通用户,需要输入密码
3.提权 sudo
允许白名单中的普通用户拥有超级用户的权限
sudo [指令]
二、文件权限
1.文件访问者的分类
文件和文件目录的所有者:u ——(user)
文件和文件目录所有者所在的组的用户:g ——(group)
其他用户:o ——(others)
2.文件类型和访问权限
(1)文件类型
d 目录
- 普通文件
(2)文件权限 chmod
r 可读 w 可写 x 可执行
chmod o+w hello.c 给其他用户添加 hello.c 文件的写权限
chmod u-rx hello.c 给所有者移除 hello.c 文件的读权限和执行权限
chmod g+w,o+w hello.c 给所属组和其他用户添加 hello.c 文件的写权限
chmod a+r hello.c 给所有人添加 hello.c 文件的读权限
只有文件所有者和超级用户可以更改文件的权限
表示 rwx,可以使用三个比特位 1 / 0,1 表示有相应权限,0 表示没有相应权限,那么可以用 3 个八进制数来表示三类文件访问者的权限:
chmod 000 hello.c 把所有人对 hello.c 的权限移除
chmod 777 hello.c 赋予所有人对 hello.c 的所有权限
chmod 640 hello.c 更方便些
用户身份的匹配从左往右只进行一次
所以所有者无写权限,无法写入 file.c ,尽管所有者也在所属组,所属组有写权限
root 用户不受权限限制,也就是说,即使文件属性显示没有读、写、执行权限,但是 root 用户仍然可以读、写、执行,无视文件属性的权限设置。
(3)文件所属 chown
chown <用户名> <文件> 改变文件所有者
chown <用户名:组名> <文件> 改变文件 所有者 :所属组 chown abc:abc file.c
想要执行 chown 指令,身份必须是文件所有者或 root 用户
文件所有者想把文件给别人,也需要用 sudo 提权,不能直接给别人
chgrp <组名> <文件> 更改文件所属组
(4)目录权限
对于目录 AAA:
有 x 权限,可以进入 AAA
有 r 权限,可以读取 AAA 的内容(目录内的文件或目录的权限,由其本身权限属性限制)
有 w 权限,可以新建、删除、修改文件名(能否修改文件内容,由文件本身权限属性限制)
没有 x 权限但有 r 权限,仍然可以读取到目录里的内容:
没有 x 权限但有 w 权限,无法改变目录里的内容:
新建一个目录,目录的默认权限属性是 775
新建一个普通文件,普通文件的默认权限属性是 664
其实系统中目录的起始权限为 777,普通文件的起始权限为 666
之所以新建出的目录和文件的权限与起始权限不同,是因为会受权限掩码修正
umask 查看权限掩码 umask 000 修改权限掩码为 0000
后三位对应三类访问者的 rwx 权限,修正公式:最终权限 = 起始权限 & (~权限掩码)
也就是说,最终权限 是 起始权限 和 权限掩码按位取反后 再按位与 的结果
以目录权限属性为例:
起始权限 111 111 111 -> 7 7 7
权限掩码 & 111 111 101 -> 0 0 2 (~)
最终权限 111 111 101 -> 7 7 5
位操作是因为,操作系统是按照三个比特位赋予的三类访问者权限,为便于用户操作,进行了简化,不需要用户输入总共九位的二进制数,只需要输入三位的八进制数来代表。
其实对二进制数的位操作,对用户而言就等价于对八进制数进行 起始权限 - 权限掩码 的操作。
三、粘滞位
chmod +t <目录名> 把目录设置为粘滞位
被设为粘滞位的目录,目录里的内容只能由 root 用户、目录所有者、内容所有者删除,其他人即使具有目录的 w 权限,也不能删除该内容。