Linux权限管理
一、什么是权限?
Linux下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在Linux系统下做任何事情,不受限制
- 普通用户:在linux下做有限的事情。
- 超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。
比如:在root用户下,你可以通过 su user 这个命令切换到任意子用户,并且不用输入密码。
而普通用户,则需要输入密码来切换到root用户。
如果想从root用户退出到普通用户,可以通过输入exit或者使用ctrl+d。
二、权限管理
1.文件访问者的分类
- 文件和文件目录的所有者:u—User
- 文件和文件目录的所有者所在的组的用户:g—Group
- 其它用户:o—Others
我们要怎么看一个文件对于这三位不同的访问者的权限有什么不同呢?
使用 ll或者ls-l命令即可。
红线标识的是对应权限,黄线标识的是拥有者,蓝线标识的所属组。
2.文件前缀
-rw-r--r-- 1 root root 0 Sep 24 10:31 a
drwxr-xr-x 2 root root 4096 Oct 15 16:33 dir
-rw-r--r-- 1 root root 0 Oct 15 16:33 test.txt
文件类型
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
这就是对应的第一列字母的文件前缀。
从第二列开始,三个三个分为一组,分别对应文件和文件目录的所有者(owner),文件和文件目录的所有者所在的组的用户(group),其它用户(other)。
r->read 读权限
w->write 写权限
x->execute 执行权限
(-)则代表不拥有该权限
并且,首位一定是r读权限,第二位一定是w写权限, 第三位一定是x执行权限,顺序不可改变。
3.chmod权限修改
我们可以通过使用chmod命令,来对文件权限进行修改。
例如:
chmod u-r test.txt
这个命令可以对owner去掉读权限。
chmod u+r test.txt
反之+即可。
同理,也可对其他人进行修改。g->所属组,o-其他人。
chmod g-r test.txt //去掉所属组的r权限
chmod o-r test.txt //去掉其他用户的r权限
当然也可以在同一行进行修改。
chmod u+rwx,g+rwx,o-rwx test.txt
//给拥有者,所属组加上所有权限。去掉other的所有权限
如果想要同时修改为同一权限,则可以使用a来指代all。
chmod a=rw test.txt
八进制修改
我们还可以通过八进制的方式来修改文件权限。
rwx
111
二进制对应7
- 777的含义 -> 111 111 111 rwx
我们使用指令
chmod 777 test.txt
我们发现目标文件加上了所有的读写执行权限。
- 666的含义 -> 110 110 110 rw-
我们使用指令
chmod 666 test.txt
我们发现目标文件加上了对应的rw读写权限。
所以说了解上面这个方式后,你便可以写出所有权限类型对应的编号。
权限 | 二进制 | 对应编号 |
---|---|---|
rwx | 111 | 7 |
rw- | 110 | 6 |
r-x | 101 | 5 |
r– | 100 | 4 |
-wx | 011 | 3 |
-w- | 010 | 2 |
–x | 001 | 1 |
4.chown修改拥有者
我们可以通过一个指令来修改文件的拥有者。
chown [参数] 用户名 文件名
注意,在默认情况下,系统是不允许你修改文件的拥有者的。不过我们可以通过在语句前面加sudo
的方式,短暂获取root权限,或者直接使用root用户对文件拥有者进行修改。
5.chgrp修改所属组
我们同样可以通过一个指令来修改文件的所属组。
chgrp [参数] 用户名 文件名
6.默认权限
Linux有一个默认权限:
- 目录文件权限777
- 常规文件权限666
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到umask的影响。
我们可以通过umask
命令来查看权限掩码。
抛开首位字母,我们通过刚刚学的八进制方式可以解读出这个权限为
--- -w- -w-
他的作用就是在权限掩码中出现的权限,在实际创建文件的时候不会出现!
观察下列文本就可以发现,文件的权限正好和权限掩码相反。
rwx rwx rwx //默认权限777
--- -w- -w- //权限掩码022
rwx r-x r-x //实际创建755
而常规文件正好也相反
rw- rw- rw- //默认权限666
--- -w- -w- //掩码022
rw- r-- r-- //实际权限644
那他就只是简单的减法吗?
答案是NO!
这里权限其实是通过对umask先取反(~),
再和默认权限进行按位与。
如:
常规文件:
666 -> 110 110 110
umask
022 -> 000 010 010
~umask -> 111 101 101
~umask&666-> 110 100 100
- rw- //默认权限666
--- -w- -w- //掩码022
rw- r-- r-- //实际权限644
那他就只是简单的减法吗?
答案是NO!
这里权限其实是通过对umask先取反(~),
再和默认权限进行按位与。
如:
常规文件:
666 -> 110 110 110
umask
022 -> 000 010 010
~umask -> 111 101 101
~umask&666-> 110 100 100