目录
linux文件分类
在Linux操作系统中,共有七种文件类型,分别是:
d (directory) 目录文件。
l (link) 符号链接。
s (socket) 套接字文件。
b (block) 块设备文件,二进制文件。
c (character) 字符设备文件。
p (pipe) 命名管道文件。
- 普通文件,或者更准确地说,不属于以上几种类型的文件。
基本权限介绍
r:读 w:写 x:执行
比如1.txt文件:
drwxrwxr-x 其实是 d rwx rwx r-x
d是文件类型,这里说明1.txt是一个目录文件
第一处的rwx表示文件所有者对该文件的权限是读写执行
第二处的rwx表示组用户对该文件的权限是读写执行
第三处的r-x表示其他用户对该文件的权限是度执行
修改文件权限(chmod)
以字母形式修改文件权限
u:文件所有者 g:文件属组 o:其他用户 a:所有用户
chmod a=rwx 1.txt(直接让所有用户对文件的权限修改为rwx)
chmod o+wx 1.txt(其他用户的权限增加了写和执行)
chmod g-x 1.txt(组用户的权限出去了执行权限)
以数字形式修改文件类型
r=4 w=2 x=1 没有某权限就用0表示
chmod 754 1.txt (u的权限为rwx , g的权限为rx , o的权限为r)
修改文件的所有者与所属组(chown)
chown stu1 1.txt 只修改文件的所有者为stu1
chown :stu1 /mnt/1.txt 只修改文件的所属组为stu1
chown stu2:stu2 /mnt/1.txt 同时修改文件的所有者为stu1、所属组为stu1
上图中cent文件的所有者为前面的cent , 用户组为后面的cent
ACL权限
(这里用用户stu6和文件/mnt/files举例:)
ACL权限的配置(setfacl)
setfacl -m u:stu1:rwx /mnt/files(setfacl -m u:指定的用户名:需要的权限 /指定文件的路径)
针对其他用户中的个别用户或部分用户单独设置的权限
就是说我们想对既不是文件所有者,也不是组用户的其他用户设置权限!
比如用户stu3想要查看files文件,但是stu3既不是root用户,也不是rsb用户组成员,并且files文件的权限是rwxr-x---即其他用户没有任何权限:
所以如果stu3用户想要查看files文件,只能设置ACL权限:setfacl -m u:stu3:rwx /mnt/files
设置了ACL权限后,可以看到权限后面的点号变成了加号+,此时,stu3用户就有对files文件指定的权限了
查看ACL规则(getfacl)
getfacl 文件名
上图中user:stu3:rwx就是我们对指定用户stu3设置了ACL权限rwx
删除一条ACL规则(setfacl)
setfacl -x u:stu3 /mnt/files
虽然删除了ACL规则,但权限后面的加号+仍然还在。
删除所有ACL规则(setfacl)
setfacl -b /mnt/files
这个命令会将指定文件files的所有ACL规则删除,并且权限后面的加号+也会变为原来的点号。
限制ACL最大权限的mask权限
mask权限用于限制ACL可以设置的最大权限,例如下图中mask::rwx表示ACL权限的最大可设置权限:
setfacl -m m:r files 就可以将files文件的mask权限设置为r.
可以看到,mask权限变为了r-- 虽然stu3任然显示rwx但是实际权限只有r--
sudoers文件
/etc/sudoers
在该文件中通过修改上图所示的内容,即可删除root的一些权限,或者添加普通用户,获得root权限。
linux的特殊权限
SetUID(chmod u+s )
只有可以执行的二进制程序才能设定SetUID权限(目录不行);
命令执行者要对该程序拥有x(执行)权限;
命令执行者在执行该程序时获得该程序文件属主的身份;
SetUID 权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。
上图中的权限rwsr-xr-x中的s就表示SetUID权限(这里小写的s。如果是大写的S说明执行者没有x执行权限,则SetUID权限不会生效)之所以用户能修改自己的密码,就是因为SetUID权限,当执行这个文件是,用户会以root身份去执行,执行完后又会恢复到原来的身份。
当一个具有执行权限的文件设置 SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。/usr/bin/passwd 命令具有SetUID 权限,所有者为 root,也就是说当普通用户使用 passwd 更改自己密码的时候,实际是在用 passwd 命令所有者 root 的身份在执行passwd命令,root当然可以将密码写入/etc/shadow 文件,所以普通用户也可以修改/etc/shadow文件,命令执行完成后该身份也随之消失。
chmod u+s /usr/bin/vim命令,会让普通用户获得编辑重要文件的权限,这很危险!
chmod u-s /usr/bin/nim即可取消。
SetGID(chmod g+s)
,设置后,组权限会有s(小写)
chmod g+s 文件/目录
只有可执行的二进制程序才能设置 SGID 权限;
命令执行者要对该程序拥有 x(执行)权限;
命令执行在执行程序的时候,组身份升级为该程序文件的属组;
SetGID权限同样只在该程序执行过程中有效,也就是组身份改变只在程序执行过程中有效。
获得SetGID权限后,用户会以文件所属组的身份执行文件,执行完后,又会恢复自己的身份。
对目录执行时,执行后的文件所属组也不会显示是执行人的所属组,依然会显示是原文件所属组。
Sticky BIT(chmod o+t)
Sticky BIT 粘滞位,也简称为 SBIT,SBIT目前仅针对目录有效。
普通用户对该目录拥有 w 和 x 权限,即普通用户可以在此目录拥有写入权限;
shmod o+t 文件名 ,执行命令后,任何用户都只能删除自己建立的文件,但是不能删除其他用户建立的文件(root用户除外,如果想让root用户也不能删除他人文件,可以使用下面的chattr命令)。
特殊权限的数字表示
4 代表 SUID
2 代表 SGID
1 代表 SBIT
chmod 4755 files 赋予 SUID 权限(以所属用户身份执行)
chmod 2755 files 赋予 SGID 权限(以组用户身份执行)
chmod 1755 test 赋予SBIT权限(不能删除他人文件)
文件系统属性chattr权限
chattr命令(+ i/a)
i: 如果对文件设置 i 属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置 i 属性,那么只能修改目录下文件的数据,但不允许建立和删除文件。
a: 若对文件设置 a 属性,那么只能在文件中增加数据,但是不能删除也不能修改数据;如果对目录设置 a 属性,那么只允许在目录中建立和修改文件,但是不允许删除。
chattr +i 文件名
chattr +a 文件名
chattr命令对root用户也生效!
lsattr命令
lsattr 文件名
用于查看文件是否有chattr权限