目录
Liunx权限的概念
Liunx下有两种用户:超级用户(root)和普通用户。
超级用户:可以在Liunx下做任何事,不受限制。
普通用户:在Liunx下做有限的事。
超级用户的命令提示符是“#”,普通用户的命令提示符是“$"。
命令:su [用户名】;
功能:切换用户;
例如:在普通用户下,直接使用su命令可以切换到超级用户(root),然后需要输入root账号的密码;在超级用户下,使用su + 普通用户名,可以直接切换到普通用户上。
Liunx权限管理
文件访问者的分类(人)
文件和文件目录的所有者:u -- user;
文件和文件目录的所有者所在组的用户:g -- group;
其他用户:o -- other;
文件类型和访问权限(事物属性)
<1>文件类型:
d:文件夹
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如屏幕等串口设备)
s:套接口文件
<2>基本权限
i.读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
ii.写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
iii.执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
iv.“—”表示不具有该项权限。
例如:对于下面这个文件来说
1>首先以d开头,代表lesson4是一个文件夹;
2>其次d后面的三位rwx代表user即所有者(user)的权限,lesson4的所有者有着读(r)、写(w)、执行(x)的权限,用二进制表示就是111,八进制就是7;
3>然后三位代表group即所有者所在组的用户拥有的权限,这里的所属组也有着rwx的权限;
4>最后三位是other即其他用户拥有的权限,这里只有r和x权限,用二进制表示就是101,八进制就是5;
注意:如果文件没有某个权限,要用”-“来代替。
文件访问权限的相关设置方法
chmod命令
功能:设置文件的访问者权限;
用法:chmod [参数] 选项 文件名
常用选项:R->递归修改目录文件的权限
说明:只有root用户和文件的拥有者才能修改文件的权限。
chmod命令权限值的格式
1.用户表示符+-=权限字符
+:向权限范围增加权限代号所表示的权限
-:向权限范围取消权限代号所表示的权限
=:向权限范围赋予权限代号所表示的权限
用户符号:
u:拥有者
g:拥有者同组用
o:其它用户
a:所有用户
例子:
chmod u-r test.txt
使用前:
使用后:
也可以对同一个用户的多个权限进行修改:
chmod u-rwx test.txt;
2.chmod+八进制数字+文件名
使用数字可以直接给每个文件访问者的权限进行修改,一步到位,但需要先进行换算成八进制数字;八进制数字从前到后每一位数字分别带别拥有者、所属组、其他用户的权限;
实例:
chmod 640 test.txt
使用后:
chown命令
功能:修改文件的拥有者;
格式:chown 参数 用户名 文件名
实例:
chown gpc test.txt
修改前:
修改后:
注:
chown -r user filegroup:将指定目录以及其子目录下的所有文件的拥有者都修改成user;
charp命令:
功能:修改文件的所属组
用法:跟chown用法相同。
umask命令
功能:查看或修改文件掩码
新建文件夹默认权限为0666
新建目录默认权限为0777
但实际上你新建一个文件夹或者目录,并不是上面的0666或0777。这是因为创建文件夹或者目录的时候还要受到umask的影响。假设默认权限是mask,则实际创建出来的文件的权限是:
mask & ~mask。
格式:umask 权限值;
说明:将现有的存取权限减掉权限掩码后,即可产生文件时预设权限。超级用户默认掩码值为0022,普通用户的默认掩码值是0002。
实例:
umask 755 //将umask掩码设置为755
umask //查看当前用户的umask掩码
umask 022 //将umask掩码设置为022;
详细用处:
这里我用普通用户来举例,默认umask码值为0002,这时创建一个文件test.txt,按照文件的默认权限来看,test.txt的权限应该是666,在liunx上显示为-rw-rw-rw,但是我这时创建的test.txt
权限如图:
显示为-rw-rw-r--,换算成八进制也就是664,这是为什么呢?
原因是:当前umask掩码为0002,只看后三位是002,将这个八进制数字的每位数字都换成三位二进制数字为000 000 010,再进行取反(~)操作,就是111 111 101,然后由于文件的默认权限为666,换算成二进制就是110 110 100,接下来将这两个二进制数字进行按位与:
111 111 101 & 110 110 100,运算结果是:110 110 100,换成八进制就是664,符号就是rw-rw-r--;(注:按位与“&”是只有两个数字都是1时结果才是1)
这样原来权限掩码应该是666的文件,在普通用户的默认umask码值创建时就成了664了。
目录权限
可读权限(r):如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容。
可写权限(w):如果目录没有可写权限,则无法在目录中创建文件,也无法删除文件。
可执行权限(x):如果目录没有可执行权限,则无法通过cd进入目录;
于是就有了下面的问题:
只要用户拥有目录的可写权限,用户就可以删除目录中的文件,而不论用户是否有这个文件的可写权限。
那么这是不是意味着我在一个目录下写的文件,只要别人拥有这个目录的写权限而不是这个文件的写权限就可以把我的文件删了呢?看下面的例子:
[root@localhost ~]# chmod 0777 /home/
[root@localhost ~]# ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/
[root@localhost ~]# touch /home/root.c
[root@localhost ~]# ls -l /home/
总用量 4
-rw-r--r--. 1 root root 0 9月 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao
-rw-r--r--. 1 root root 0 9月 19 15:59 root.c
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的文件
rm:是否删除有写保护的普通空文件 "/home/root.c"?y
[litao@localhost ~]$ exit
logout
为了解决这个问题,Liunx引入了粘滞位的概念。
粘滞位
[root@localhost ~]# chmod +t /home/ # 加上粘滞位
[root@localhost ~]# ls -ld /home/
drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/
[root@localhost ~]# su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件
rm:是否删除有写保护的普通空文件 "/home/abc.c"?y
rm: 无法删除"/home/abc.c": 不允许的操作
当一个目录被设置为“粘滞位”(chmod +t)时,则该目录下的文件只能由
一、超级管理员删除
二、该目录的所有者删除
三、该文件的所有者删除
这就是关于Linux权限部分的知识啦~