1.Linux权限的概念
Linux下有两种用户:root、普通用户。
- root:可以在Linux系统下做任何事情,不受权限的限制
- 普通用户:在Linux下做有限的事情
- root用户的命令提示符是" # ",普通用户的命令提示符是" $ "。
2.Linux权限管理
2.1 文件访问者的分类
- 文件/目录的所有者:own
- 文件/目录的所有者所在组的用户:group
- 其他用户:other
2.2 文件类型和访问权限
下面以ll(ls -l)指令来解读:
[zwx@VM-20-3-centos ~]$ ll
drwxrwxr-x 6 zwx zwx 4096 Nov 3 09:07 linux-code
-rw-rw-r-- 1 zwx zwx 70 Oct 25 17:30 Makefile
第一个字符表示文件的类型:d开头是一个目录;- 开头表示是一个普通文件。
紧接着九个字符表示的分别是own、group、other在该文件中的权限:r(读权限)、w(写权限)、x(执行权限)。
![]()
2.3 文件权限的表示方法
字符表示方法:
8进制表示:
2.4 文件权限的修改
2.4.1 chmod
使用对象:文件拥有者和root。
使用其他用户无法改变文件权限。
chmod u/g/o/a +/-r/w/x 文件名
u表示文件拥有者,g表示文件所属组的用户,o表示其他用户,a表示所有用户。
举例:
[zwx@VM-20-3-centos limit]$ ll
total 4
dr-xrwxr-x 2 zwx zwx 4096 Nov 5 16:14 limit1
[zwx@VM-20-3-centos limit]$ chmod u-r limit1
[zwx@VM-20-3-centos limit]$ ll
d--xrwxr-x 2 zwx zwx 4096 Nov 5 16:14 limit1
除了使用加减权限,还能使用八进制数字设置权限:
[zwx@VM-20-3-centos limit]$ ll
total 4
d--xrwxr-x 2 zwx zwx 4096 Nov 5 16:14 limit1
[zwx@VM-20-3-centos limit]$ chmod 000 limit1
[zwx@VM-20-3-centos limit]$ ll
total 4
d--------- 2 zwx zwx 4096 Nov 5 16:14 limit1
2.4.2 chown
改变文件的拥有者;使用对象:root。
[root@VM-20-3-centos limit]# ll
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:28 zwx.txt
[root@VM-20-3-centos limit]# chown user1 zwx.txt
[root@VM-20-3-centos limit]# ll
-rw-rw-r-- 1 user1 zwx 0 Nov 5 16:28 zwx.txt
2.4.3 chgrp
修改文件的所属组;使用对象:root。
[root@VM-20-3-centos limit]# ll
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:54 test.c
[root@VM-20-3-centos limit]# chgrp user1 test.c
[root@VM-20-3-centos limit]# ll
-rw-rw-r-- 1 zwx user1 0 Nov 5 16:54 test.c
3.umask
目录的起始权限是777(rwxrwxrwx), 普通文件的起始权限是666(rw-rw-rw-)。
看下面创建的目录和普通文件的权限:
[zwx@VM-20-3-centos limit]$ touch umask
[zwx@VM-20-3-centos limit]$ mkdir umaskd
[zwx@VM-20-3-centos limit]$ ll
-rw-rw-r-- 1 zwx zwx 0 Nov 5 17:01 umask
drwxrwxr-x 2 zwx zwx 4096 Nov 5 17:01 umaskd
实际创建出来的权限并不是起始权限,因为有umask掩码的存在。
umask有四个值,第一个和我们所研究的权限无关,我们只需要关注后三个,分别对应的也就是拥有者、所属组用户、其他用户的掩码。
创建出来的文件权限为最终权限。
最终权限 = 起始权限 & (~umask)。
umask码修改和查看:
[zwx@VM-20-3-centos limit]$ umask 0000
[zwx@VM-20-3-centos limit]$ umask
0000
4.目录的权限
1.r(读权限)
用户没有目录的读权限,不能查看目录中的内容,ls指令无法执行。
在limit目录下创建一个limit1目录,设置所有者权限为-wx,也就是没有r权限。
[zwx@VM-20-3-centos limit]$ ll
total 4
d-wxrwxr-x 2 zwx zwx 4096 Nov 5 09:41 limit1
[zwx@VM-20-3-centos limit]$ cd limit1
[zwx@VM-20-3-centos limit1]$ ll
ls: cannot open directory .: Permission denied
2.w(写权限)
用户没有目录的写权限,就不能创建/删除/移动文件。
在limit1下创建两个文件:test.c、mytest.txt。
[zwx@VM-20-3-centos limit1]$ touch mytest.txt
[zwx@VM-20-3-centos limit1]$ touch test.c
[zwx@VM-20-3-centos limit1]$ ll
total 0
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:14 mytest.txt
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:14 test.c
改变limit1权限,设置所有者权限为r-x,也就是没有w权限。
[zwx@VM-20-3-centos limit]$ chmod u-w limit1
[zwx@VM-20-3-centos limit]$ ll
total 4
dr-xrwxr-x 2 zwx zwx 4096 Nov 5 16:14 limit1
[zwx@VM-20-3-centos limit1]$ ll
total 0
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:14 mytest.txt
-rw-rw-r-- 1 zwx zwx 0 Nov 5 16:14 test.c
[zwx@VM-20-3-centos limit1]$ rm test.c
rm: cannot remove ‘test.c’: Permission denied
[zwx@VM-20-3-centos limit1]$ mv test.c ../
mv: cannot move ‘test.c’ to ‘../test.c’: Permission denied
[zwx@VM-20-3-centos limit1]$ touch myproc.c
touch: cannot touch ‘myproc.c’: Permission denied
没有w权限,删除/移动/创建在目录中都是不允许的。
3.x(执行权限)
用户没有目录的执行权限,用户不能进入目录,cd指令无法使用。
改变limit1的权限,设置所有者权限为rw-,也就是没有x权限。
[zwx@VM-20-3-centos limit]$ chmod u-x limit1
[zwx@VM-20-3-centos limit]$ ll
total 4
drw-rwxr-x 2 zwx zwx 4096 Nov 5 09:41 limit1
使用cd指令的时候就会受到权限的约束。
5.粘滞位
试想这样一种场景:所有用户进行协作,在一个目录下进行工作。
前面我们也提到,只要我们在目录中具有w权限,就能创建/删除目录中的文件,这也就可能造成我们把别人的文件删除了的情况。
mytemp是根目录下的一个目录,这个目录时所有的用户都能使用的,而且都具有rwx权限。
下面我在mytemp目录下创建三个文件:zwx1、zwx2、zwx3,并且修改权限。
[zwx@VM-20-3-centos mytemp]$ ll
total 0
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx1
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx2
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx3
我们创建的文件other没有任何权限,也就是无法查看,无法修改,也无法执行。
那other能不能直接把我们的文件删除呢?
下面切换到其他用户,进行实验:
[root@VM-20-3-centos mytemp]# su user1
[user1@VM-20-3-centos mytemp]$ ll
total 0
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx1
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx2
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx3
[user1@VM-20-3-centos mytemp]$ whoami
user1
user1在我们创建的三个文件中属于other ,没有rwx任何权限。
[user1@VM-20-3-centos mytemp]$ ./zwx1
bash: ./zwx1: Permission denied
[user1@VM-20-3-centos mytemp]$ cat zwx1
cat: zwx1: Permission denied
下面进行删除操作:
[user1@VM-20-3-centos mytemp]$ rm zwx1
rm: remove write-protected regular empty file ‘zwx1’? y
[user1@VM-20-3-centos mytemp]$ ll
total 0
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx2
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx3
别人的文件,我们不能查看、不能修改、不能执行,但是可以删除,这就很矛盾,有没有办法能解决这个问题呢?
答案是可以的,就是使用粘滞位。
粘滞位的使用
chmod +t 文件名
只有目录才能设置粘滞位;粘滞位一经设置,只能设置粘滞位的用户取消(一般使用root用户设置)。
[root@VM-20-3-centos /]# chmod +t mytemp
[root@VM-20-3-centos /]# ll
drwxr-xrwt 2 root root 4096 Nov 5 15:41 mytemp
设置粘滞位之后,其他用户的x权限变为t,下面再使用其他用户来删除我们创建的文件:
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx2
-rwxrwx--- 1 zwx zwx 0 Nov 5 10:30 zwx3
[user1@VM-20-3-centos mytemp]$ rm zwx2
rm: remove write-protected regular empty file ‘zwx2’? y
rm: cannot remove ‘zwx2’: Operation not permitted
设置粘滞位之后,再用其他用户删除我们的文件,就会受到权限的约束;当然root用户是不受约束的。