linux操作系统中的权限和我们日常中用到的一些网页版的管理系统的方式差不多。平时工作中使用的系统也有信息的操作人,操作人所对应的角色,以及其他人。同样在linux操作系统中也有这3个概念,不过在linux系统中它们的名称分别叫所有者,所在组,其它人三个角色。
改变文件所在组的命令。
chgrp testgroup test1
命令名称为chgrp
是change group的缩写。后面一个参数testgroup
表示目标用户组名称,最后一个参数是目标文件或者目标目录。这个命令如果要改变目录以下所有目录和文件的用户组需要加-R
参数,表示递归执行。
改变文件所有都的命令
chown user1 test1
命令名称为chown
是change owner的缩写。跟上一个命令一样后一个参数表示所有者名称,最后一个参数是目标文件或者目录。chown
命令比chgrp
强大的地方是它同时可以用来修改用户组,格式如下:
chown user1:testgroup test1
用一个:分隔所有者和用户组。就可以同时修改这两个参数的效果,这个命令也有一个-R
选项。
之前说过每一个文件或者目录都有可读、可写、可执行3种权限,分别表示rwx
,3个为一组,每1位都有2种状态,这就是可以用8进制的数字完美表达。因此linux中设置根限最常用的方式就是用8进制的数字设置,既直观又方便。
chmod 777 test
就是将test文件的对所有者,所属组,其它人均设置为可读,可写、可执行。
这样的设置方式也不是没有问题,如果我只想设置所有者的权限,那么我就要把所属组和其它人的权限重新写一次,既麻烦也容易误操作。linux还有第二种操作方式,如下:
chmod g+r test
表示将test文件的所属组的增加可读权限。
下面解释一下这个命令的使作方式以及合法的参数。chmod
命令不变,最后一个参数是文件或者目录。中间的参数用+
,-
分隔开来,符号之前可以有4个字母,至少有一个。这4个字母分别是u
,g
,o
,a
。分别表示user, group, other, all。+
,-
后面可以使用rwx三个字母中的一个或都多个。表示读、写、执行。
在linux中创建一个目录或者文件都有一个默认权限,一般如果是一个文件的话是755,目录的话是644。这个是由linux中的umask规定的,可以使用 umask
命令查看系统初始定义的umask值,一般为0022。也可以在这条命令之后以数字为参数修改这个值。可以看到这个值是4位数字,但是权限只有3个数字啊,这最高位的0代表什么意思呢?实际上这个0表示这个数字是8进制数的意思,C语言中也习惯上这个写,只是历史遗留的习惯。
现在的学习书籍是在centeros7的版本上进行的,但是我自己的电脑用的是ubuntu,书中说umask的值是在/etc/.bashrc
中定义的,但是我的ubuntu根本就没有这个文件,~/.bashrc
文件中也没有定义这个值,虽然我知道在这个文件中添加这个字段肯定可以修改这个值,但是很想知道ubuntu中是在哪里设置的,在网上也粗粗搜过了,但是也不想在这个小问题上花费太多时间。下面讲讲通过umask怎么计算出755和644这两个数值。
如果没有umask值,也就是说umask的值如果是0的话那么文件和目录的权限就分别为644和777。也就是说文件默认情况下所有都可读写,所属组和其它人只能读,而且都不能执行。而对于目录,所有人都可读、可写、可执行。那么在这个基础上使用umask再进行计算。
第1步:将umask取反,022,取反就是755
第2步:将现有权限与第1步设算的值进行与运算。644 & 755 = 644
, 777 & 755 = 755
。
因此就是上面讲的一般情况下linux目录和文件的初始权限是755和644
这样的运算方式其实跟ip地址的子网掩码一样,只是子网掩码已经完成第1步了,直行进行第2步的与运算就行了。
可以将umask值设置为0033再计算下,看看是否与预期的一样。
第1步: 将umask取反,033,取反就是 744
第2步: 进行与运算。644 & 744 = 644
, 777 & 744 = 744
因此umask设置成0033后文件的权限为rw-r--r--
,目录的权限为rwxr--r--
经验证,与预期相同。
parabola@parabola:~/learn$ umask 0033
parabola@parabola:~/learn$ mkdir test3
parabola@parabola:~/learn$ touch b
parabola@parabola:~/learn$ ll
总用量 20
drwxr-xr-x 5 parabola parabola 4096 9月 17 21:40 ./
drwxr-xr-x 30 parabola parabola 4096 9月 17 21:25 ../
-rw-r--r-- 1 parabola parabola 0 9月 17 21:40 b
drwxr--r-- 2 parabola parabola 4096 9月 17 21:39 test3/
linux文件除了rwx权限之外还有另外的权限。分别叫做set uid, set gid, sticky bit。
set uid 针对二进制可执行文件,使文件在执行阶段具有文件所有者权限。
set gid既针对二进制可执行文件,也可以设置在目录上。当作用在文件上时,与set uid差不多,使执行阶段具有所属组权限。当作用在目录上,任何用户在此目录下创建的文件都具有该目录所属组的权限。
sticky bit可以理解为防删除位。当对目录设置该权限后,就算用户对该目录有写权限也不能删除目录中的文件。当然只针对其它人这个解色。
默认的文件系统中 /usr/bin/passwd
命令设置了set uid。/tmp/
目录设置了 sticky bit。
如果设置了set uid,set gid,sticky bit查看权限分别如下(假设文件的权限为rwxrwxrwx)
rwsrwxrwx
rwxrwsrwx
rwxrwxrwt
当然这3个权限可以同时设置,设置的时候也是用chmod命令,之前用3位8进制的数表示权限,加上这个权限,可以用4个8进制的数表示,最高位就是sst权限
- 0
- 1 (--t)
- 2(-s-)
- 3(-st)
- 4(s--)
- 5(s-t)
- 6(ss-)
- 7(sst)
如果sst是大写的,说明本身就没有可执行权限,比如权限为rwSrwxrwT
则说明所有者没有可执行权限,其它人也没有可执行权限。
网友评论