文件系统权限
有三种权限类别可应用:读取、写入和执行
查看文件和目录的权限及所有权
ls -l 显示有关权限和所有权的详细信息
长列表的第一个字符表示文件类型
- 表示常规文件、d 目录、l 软链接、其它字符代表硬件设备(b和c)或其他具有特殊用途的文件(p和s)
接下来的九个字符式文件权限。它们分为三组、每组三个字符分别对应:拥有该文件的用户权限、拥有该文件的组的权限、其他所有用户的权限。如果组中显示rwx,说明该类别具有读取、写入和执行三种权限。如果其中一个字母被替换为-,则表示该类别没有这个权限。
权限之后式链接数,链接数之后,第一个名称表示拥有该文件的用户,第二个名称表示拥有该文件的组。
如上我们要注意:
a、用户database可以删除lfile1和lfile2两个文件,因为database1对包含这两个文件的目录具有写入权限( 如图. 的所有用户为database1)
b、用户database1是组consultant1的成员,该组对lfile2的权限为r--(可读),而lfile2的其他用户的权限为(rw-),database1是其他用户,但却只有读取权限,因为组权限具有优先权,即便其他用户具有写入权限
从命令行管理文件系统权限、
更改文件和目录权限
a、通过符号法更改权限
如下:
其他用户权限+x ,变成
可以发现文件颜色变成绿色,(只要该文件具有x(u、g、o都可),这个可执行文件的权限,就会变成绿色,代表可执行文件
虽然目录的操作也是类似的,的那要注意的是目录下面还有文件的话,如果像上面一样操作则只会修改目录本身的权限,里面的文件则不受影响,如下:
而修改目录权限后,该目录下的文件权限没有任何变化(和上上图比较):
所以再修改目录权限时,加上-R属性递归,将该目录下的文件的权限都可以修改(后面修改用户、用户组也是同样)
如上用户组的权限加上了可写。
也可多个一起操作
其中- + 也可用=替代
但是一次只能操作一组权限,如果用a则时三组一样的权限
发现不用写满(a=-w-)都可以
通过数值法更改权限
#代表一个数字,权限有三组所以优三个数字分别对应三组权限,没组权限的值由三种权限代表的数值相加得到
三种权限代表数值: r 为4,w为2,x为1(其中-为0)
如:rwx代表4+2+1=6
what目录的权限中,该三组权限分别计算(u :4+2+1=7、g:0+2+1=3、o:0+0+1=1)
所以该目录的权限表示为731
用数值设置权限:
发现how变成绿色底,(只要其他用户权限中有w则会)
更改文件和目录用户或组所有权(用chown命令)
我们知道新创建的文件由创建该文件的用户所有。默认情况下,新文件的组的所有权为创建该文件的主要用户组。
修改文件所有权 chown 修改后的用户名 文件名
如果是文件直接可以这样修改,但是如果是目录这样修改后其子文件则不会有变化:
要加上-R选项,才可以将子文件与目录的修改同步
用冒号分隔达到同时修改用户组和用户
(补充,也可用. 分隔,但是不建议,因为如果存在同名的带.的用户名,则无法达到同时修改的效果)而且如果不想修改所属用户,可以只是:或. 再加修改后的组名
当然也可单独修改用户组(用chgrp命令)
管理默认权限和文件访问
特殊权限(构成了除了基本用户、组和其他类型之外的第四种权限类型)
(注意:s和t建立在已有x执行权限的基础上,如果有这两种权限却没有x则会在相应位置变成S和T
关于u+s
例如先查看passwd命令的绝对路径,再查看其所属文件的权限,不难发现原本再所属用户权限中x的位置变成了s,如果没有这个s,变成S或x会怎样呢?
我们可以发现当没有s权限时,我们在普通用户去修改密码,即使输入正确,也无法操作成功,因为我们不是当前用户自己去修改,而是拥有该文件所有的root用户去执行修改。所以当我们没有s,则无法调用让root用户修改。
另一方面,当我们用passwd命令时,需要将密码写入/etc/passwd文件,上图我们可以看到,我们是没有权限去读取修改的,所以也可以知道只有root用户可以去执行。
如果时S也是可以的
关于g+s
当我们对目录的所有组添加s权限时,如果对目录的拥有组进行了修改,则后面新建的内容也会同步。
修改:
我们可以发现新建的文件的拥有组同步成student,且新创建的目录会继承当前目录的属性(权限、拥有人、拥有组都相同)
该权限对新建的文件的影响:如果要用命令去操作该文件,则不是以运行命令的用户身份运行,而是以拥有该文件的组运行
o+t
表示只有文件所有者及root才能删除该目录文件
当what目录下的情况如下时,
发现只有student和root用户可以删除what目录下的所有文件
而除二者以外的用户去删除里面非所有用户的文件时,则无法删除。
当我们去设置特殊权限时,除了字符表示(u+s、g+s、o+t)等,也可以曹勇数值表示,分别对应4、2、1。而且时位于最前面的数字
如图s表示4,放在三组权限数值的最前面即可表示
默认文件权限
创建新文件或目录时,会为其分配初始权限。有两个因素会影响这些初始权限(创建长规文件还是目录,当前的umask)
创建新目录,一般分配0777。常规文件一般时0666.
shell会话会设置一个umask,进一步限制初始设置的权限。例如:umask为0002可清除其他用户的写入位。0077清除创建文件的所有组和其他权限。
不带参数运行umask命令将显示shellumask的当前值
umask 数字 表示修改umask的值,以student用户为例:
新创建的目录bag权限为0775( 初始0777-umask0002=0775)
新创建的文件pen.txt权限为664(初始0666-umask0002=0664)
当我们设置umask 为0004
新建文件file1权限为662(0666-0004=0662)
新建目录wen权限为773(0777-0004=0773)
但是我们这种设置umask的方式时临时生效的。我们重启可能就又失效了。
如图,重新登录后又时初始的0002
用户的默认umask由shell启动脚本设置。默认情况下,如果账户UID为200以上,并且用户名和主要组名相同,则会分配一个值为002的umask,否则umask为022
该设置信息存在/etc/profile
vim /etc/profile查看
大概在59行的位置 可以找到相关信息
-gt 表示> -lt < eq = -gn 表示组名 -un表示用户名
(ge大于等于,le小于等于,ne不等于)
按照上面的逻辑,root用户UID<199所以不满足该条件为0022
如果要自己设置umask且达到一个永久的效果,则可以通过在/etc/profile.d的目录下创建一个脚本文件,文件名可自取,的那建议规范一点。shell启动该脚本来更改此设置。
脚本内容按照上面逻辑
vim /etc/profile.d/local-umask.sh
保存后,要让该脚本可被执行,所以要设置一下权限
要启动该脚本,则直接 写该路径即可
之后我们来看此时root的umask,按照上图逻辑UID<199,umask为007,所以root应该为007。
记得要重新登录root才可生效。
我们可以发现,student用户也变了,为0022,说明我们设置成功,记得除了UID号还有一个条件是用户名=用户组名(所以看到即使UID>199也未必是0022)