chmod命令详解
chmod命令主要针对文件和目录权限进行修改,在权限修改上的这篇文章中我们知道权限共有三种类型,分别是可读,可写,可执行权限,在linux中有两种方式可以授予权限。
-
第一种就是使用符号的方式进行修改
我们知道在查看文件和目录的权限时,共有九位来表示其权限,前三位为所有人(u:user)权限,中间三位为所有组(g:group)权限,后三位为其他人(o:other)权限。如若一个文件的权限如下:如果理解了文件权限的形式,那么chmod命令的符号修改的方式也就很容易理解了,具体如下:
chmod <u|g|a>+/-<r|w|x> file #用字符方式设定文档权限
##例如:
chmod u-wx file #取消文件拥有者写和执行的权力
chmod g+x file #增加文件拥有组执行的权力
chmod o+r file #增加文件其他用户的读的权力
- 第二种就是使用数字的方式进行修改
我们首先需要了解如何使用数字去表示权限,将r(read),w(write),x(execute)权限分别顺序使用三位二进制来进行表示,如下:
权限表示 二进制表示 十进制表示
_-_-_ 000 0
_-_-x 001 1
_-w-_ 010 2
_-w-x 011 3
r-_-_ 100 4
r-_-x 101 5
r-w-_ 110 6
r-w-x 111 7
那么如下图的文件权限使用数字表示应该为:
利用chmod’结合这种数字表示的形式我们来进行权限的修改:
chmod *** file #利用数字形式修改文件权限
#其中的*代表小于等于7的数字`
##例如:
chmod 600 file #修改文件的权限为<rw------->
#即修改该文件的权限为文件拥有者权限为可读可写,文件拥有组和其他人都没有该文件的权限
特殊权限 stickyid sgid suid
- 粘制位 stickyid
主要是针对目录,如果一个目录的stickyid权限开启,那么这个目录中的文件只能被文件拥有者删除。
stickyid权限主要针对公共目录,在公共目录中任何人都可以读写该目录中的内容,但在这种情况中由和不人性化的问题,就是在该目录中若小红建立了一个file1,小李建立了file2,但由于该目录是公共目录,意味着小李可以对小红的文件进行删除操作,这显然是不合理的,而stickyid就可以解决这种问题。
两种开启stickyid的方法:
chmod o+t file #使用符号方式打开该文件的stickyid权限
chmod 1777 file #使用数字方式打开该文件stickyid权限
- 强制位 sgid
主要针对目录,使得该目录中新建的文件可以被自动归属在该目录的所有组中,是针对所有组的权限。这个权限只针对于二进制可执行文件,在运行该文件时都是以该文件的拥有组运行,而与执行用户无关。在后续接触到守护进程的知识时,一般会将文件的所有组设置为某些特定的进程,并赋予其sgid权限和可执行权限从而让守护进程可以对该文件进行操作。
chmod g+s file #使用符号方式打开sgid权限
chmod 2*** file #使用数字方式打开该文件权限
- 冒险位 suid
suid也是只针对二进制可执行文件的权限,在suid权限下运行的文件都是以文件拥有者权限运行,而与执行用户无关。suid权限一般应用于想让用户可以执行一些只有root用户才能执行的文件的场景。
chmod u+s file #字符形式打开suid权限
chmod 4*** file #数字形式打开suid权限
系统默认权限设定 umask
当我们在linux中新建一个文件时,我们发现系统会默认给他们特定的权限,这其实是由系统中设定的umask决定的。umask是指目前用户在建立文件或目录时的权限默认值。
那么该如何查看umask值呢?我们可以直接在命令行输入umask来进行查看,如图
需要注意的是,umask的数字指的是默认需要减掉的权限,如上中所示,umask的值为
了解了umask的意义和查看后,如果我们要进行修改该如何进行操作呢?
umask *** ##对umask值进行临时修改
vim /etc/bsahrc ##使用系统配置文件进行永久修改
ACL列表
在学习ACL之前,我们开看这样一个场景,若有一个文件所有人为张三,所有组为三组,文件的权限为644,但此时要求李四可以对该文件进行读写操作,我们该如何授予李四读写权限呢?
可能会有小伙伴想到可以直接修改文件所有人的身份为李四,但这显然是不合理且不安全的。那么我们该如何能够安全且合理的赋予李四权限呢?
ACL权限列表(Access Control List)可以解决这一难题,它能够针对单一用户、单一文件或目录来进行权限设置。
-
启动ACL权限列表的标识
如图在文档或目录开启ACL列表时需注意此时查看文件或目录权限不能仅依据ls命令来进行查看,必须展开ACL列表来进行查看,因为此时ls所查看到的权限是不完整的,在ls中所有组的权限显示的是umask值所决定的默认权限。
-
设置ACL权限列表
主要使用两个命令:
getfacl:获取某个文件/目录的ACL设置选项
setfacl:设置某个文件/目录的ACL选项
具体的使用方法如下:`
在这里插入代码片
- ACL权限优先级