一、权限:
权限的限制是用于限制其他用户对某文件的操作。
第一类:修改属主属组
chown(主要用于更改属主,但也可以更改属组)
chgrp(主要用户更改属组)
第二类:修改UGO或者特别权限
chmod (修改UGO权限以及特殊权限)
umask(修改掩码在创建文件之前,修改,)
setfacl(修改ACL列表)
chattr(修改隐藏权限)
单单只看属组和属主是谁或者UGO是没有任何意义的,要把属主和属组和UGO权限一起看才有意义。
第一类:修改属主属组
1、chown (可以改变属主,属组,属主和属组一起)
如果只改变属主:
基本语法:chown 属主名 文件名
示例:
把file1的属主改成Mike
chown mike file1
把file2的属组改成Mike组
chown .mike file (.也可以换成:)
把file3的属组和属主都改成Mike
chown mike.mike
2、chgrp (修改属组的操作)
基本语法:chgrp 属组名 文件名
重要选项: -R 递归修改目录的属组操作
示例:要改变mylinux下所有文件的属组变成nick
[root@Nick tmp]# chgrp nick mylinux/
drwxr-xr-x. 3 root nick 18 10月 21 15:24 mylinux
发现外层的确奏效了
[root@Nick tmp]# ll mylinux
总用量 0
drwxr-xr-x. 2 root root 6 10月 21 15:24 mine
里面的文件并没有改变,这时我们就要想起来chgrp -R选项,不能一个个改
[root@Nick tmp]# chgrp -R nick mylinux/
最后查看,都的确好了
[root@Nick tmp]# ll mylinux
总用量 0
drwxr-xr-x. 2 root nick 6 10月 21 15:24 mine
3、chmod (修改属主属组其他用户对文件的权限)
基本语法:chmod 权限限定 文件
实例化就成为chmod 755 file1 (直接写值方法)
chmod o+x file1 (添加[一般|特殊]权限方法)
chmod a=rw flie1 (赋值方法)
三类操作
举例:
第一类 chmod 755 file1 (直接写值方法):
第二类 chmod o+x file1 (添加[一般|特殊]权限方法):
第三类 chmod a=rw flie1 (赋值方法)
并不是全部人有全部权限,就可以为所欲为。
举例:虽然全部人权限都是777 但是并不能删除重要的目录
总结:
权限位,可以用两种方法来表示:
1、字母 rwx(读写执行)
2、数字 421linux里面一切皆文件,不管是目录或者是文件。只是显示的方式不一样。
不管是对于目录还是文件而言,一切的文件都是一样的。文件存储的是我们可以直接看得见的东西(直观,可以vi看得见),而目录是存储的是目录里面的信息,文件名字,数目(抽象的,不能vi看得见)。
比如说一个文件有执行操作与一个目录有执行操作。
文件的执行操作体现于可以运行,目录的执行操作体现于可以进入到目录底下(仅次于可以进入,其他什么都看不见,ls操作都不够权限)。
可以抽象理解为把这个进程加载到内存里,在内存里运行了,仅仅是运行了。
举个例子:执行qq,但我们并不知道qq里面写的是什么,我们也不能改变写的内容。(正常情况下)
执行权限在脚本,服务那一块很重要;(脚本需要有执行权限才可以运行,服务需要控制某些用户的权限)
再比如说,一个文件有写操作与一个目录有写操作
在文件中是体现为写入删除并可以保存一些文字 并且最终改变了文件的大小,这些文字最终表现为二进制操作对文件执行了。
在目录中是体现为可以新建文件或者删除文件。这些操作最终也是转化成二进制操作对目录文件执行了。
最后说,一个文件有读操作和一个目录有读操作
读就只能把文件内容,从二进制存储转化为文字出来供用户查看。对于目录的话,就是把目录文件的信息和文件类似,转化成目录信息供用户进行查看(ls)
我想说明的是,文件的权限,不管是目录还是文件,在linux都可以统一理解他的权限的意思。而不用分开记忆理解。
4、umask(修改文件掩码在创建文件之前,会改变文件的初始权限)
首先使用查看现在的mask是多少
创建一个目录查看权限
现在默认创建的目录的权限是775
775的由来是777-002
再看看文件默认的权限
现在默认创建的文件的权限是644
664的由来是666-002
5、setfacl(修改ACL列表)
ACL相当于是给某个用户对某个文件或目录赋予特权.
setfacl命令可以用来细分linux下的文件权限。
chmod命令可以把文件权限分为u,g,o三个组,而setfacl可以对每一个文件或目录设置更精确的文件权限。
换句话说,setfacl可以更精确的控制权限的分配。
比如:让某一个用户对某一个文件具有某种权限。基本语法: setfacl -m u:username:rwx(权限) file(文件) //针对用户
setfacl -m g:Groupname:rwx(权限) file (文件)
setfacl -b file //清除facl
setfacl -x u:username file
setfacl -x g:username file
例子:
查看facl列表:
修改后查看:
虽然说可以看见他以及变色(可执行文件的颜色),而且多了+这个符号。
但是在nick用户还是不可以运行的。而在Mike用户下就可以运行
Nick用户下:
Mike用户下:
清除一下facl列表:
清除之后就成原来默认的一样了;
对组做facl权限列表操作,并查看:
在nick用户:
在Mike用户
删除mike组的facl权限:(使用-x选项)
删除mike 用户的facl权限:
6、SUID、SGID、BIT
当s这个标志出现在文件所有者的x权限上时,此时就被称为Set UID(SUID)。
例如执行ls -l /bin/su可以看到
执行ls -l /usr/bin/passwd 可以看到在文件所有者的x权限上都出现了s权限,那么这个特殊权限的特殊性的作用是什么呢?
个人总结:
1、SUID权限仅对二进制程序有效。
2、执行者对于该程序需要具有x的可执行权限。
3、执行者将具有该程序拥有者的权限。
SUID的关键作用体现在第3句,SUID的目的就是:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。
例如:
1、大家都知道su这个命令,无论任何人,执行了它都将具有root权限,因为他的拥有者是root,而且这个权限仅在执行的su命令中有效,从上面的截图可以看到,不管是文件拥有者,文件拥有者所属组,还是其他人,都是具有x权限的,所以都可以执行该程序,执行之后就将具有该程序拥有者的权限,即root的权限,这也就是su命令能够切换用户权限的实现原理。2、系统中的用户密码是保存在/etc/shadow中的,而这个文件的权限是
关键是要把密码写入到/etc/shadow中。我们知道,除了root用户能修改密码外,用户自己同样也能修改密码,为什么没有写入权限,还能修改密码,就是因为这个SUID功能。从截图2可以看到,passwd的文件拥有者,文件拥有者所属组,还是其他人,都是具有x权限的,所以都可以执行passwd,当执行了之后获得root的权限也就能进行密码的修改。注:这个SUID只能运行在二进制的程序上(系统中的一些命令),不能用在脚本上,同样也不能放到目录上,放上也是无效的。
Sticky Bit
这个就是针对others来设置的了,和上面两个一样,只是功能不同而已。
SBIT(Sticky Bit)目前只针对目录有效,对于目录的作用是:当用户在该目录下建立文件或目录时,仅有自己与 root才有权力删除。
最具有代表的就是/tmp目录,任何人都可以在/tmp内增加、修改文件(因为权限全是rwx),但仅有该文件/目录建立者与 root能够删除自己的目录或文件。注:SBIT对文件不起作用。
SUID/SGID/SBIT权限设置
和rwx权限一样,s、t也有两种设置方法:
1、文字法 :SUID: u+s ,SGID: g+s,SBIT: o+t
2、数字法:将原来的三位数扩展为四位数即可,SUID为4,SGID为2,SBIT为1,把它们放在权限数字的最开头。例如设置SUID,可以写成4777,设置SGID可以写成,2777
权限的排序:
用mike用户打开
总结:
虽然面板显示的权限是666,但是facl的权限限制了Mike的权限是4,又u+s
facl>特别权限>普通权限