一、文件属性的查看
ls -l filename
1 、“-” 文件类型,有以下几种
- 代表普通类型
d 代表目录
c 字符设备
s 套接字
p 管道
b 快设备
l 连接
二、文件所有人、所有组的管理
1、chown username filename|directory3、chown -R username directory
更改目录本身及里面所有的文件的所有人
使用chown -R student test 将test文件夹中及其中的所有文件的所有人更改为student。
4、chgrp -R username directory
更改目录本身及里面所有内容的所有组
chgrp -R student test 将上面的目录及其中的所有的文件的所有组改为 student
三、对文件或目录权限的修改
(一)字符的方式修改文件或目录的权限
chown [-R] <u|g|o><+|-|=><r|w|x> filename |directory1、chown u-w filename #filename文件所有者去掉对文件的w权限
如上:file1文件的student用户拥有读写权限,将其的写权限去掉
2、 chmod g+w filename #filename文件的所有组加上写权限
如上面的 test/file1文件 对其执行 chmod g+w test/file1 结果如下
3、chmod ugo-r filename #filename文件的所有者、用户组、其他人都去掉对该文件的读
#权利
如上文件 /test/filename 执行chmod ugo -r test/file1
4、chmod ugo+r,g-w file3 ##file3用户和组添还有其他人加r权限,组去掉w权限
如上文件 test/file1 执行chmod ugo+r,g-w test/file1
(二)数字方式修改文件权限
6=rw-
5=r-x
4=r--
3=-wx
2=-w-
1=--x
0=---
存在一个如上图的文件 将其的权限使用数字修改的方式进行修改
(三)系统默认权限的设定
从系统存在的角度来讲,开放的权利越大,系统的存在意义越高,但是从系统的安全角度来讲,开放的权利越少,系统的安全性越高,所以系统在设定新建文件或目录会去掉一些权限。
系统权限的满值为777。umask 是系统在新建文件或目录时保留的权利大小(即系统给文件的权限则为777-umask,umask的值越大,系统创建的文件的权限越小)。
umask #查看系统保留权限的默认值(未经过改动一般为022)
umask 077 #将系统的保留权限值设置为077,但是此种方法只是临时设置,只在当前shell中有效
如上图在两个不同的shell中我们设定了不同的文件系统的保留权限值
我们可以使用下面的方式对文件的保留权限进行永久设置
第一步:
vim /etc/bashrc ##设置shell的保留值
如上图 我们将超级用户的 保留权限设置为077 则我们使用超级用户创建的文件将会拥有rwx------权限
第二步:
vim /etc/profile ##设置系统的保留值
如上图 我们将超级用户的 保留权限设置为077 则我们使用超级用户创建的文件将会拥有rwx------权限
以上两个文件的umask 必须设定的一致
第三步:
source /etc/bashrc
source /etc/profile
重新读取两个文件则设置开始生效
如上图我们使用root用户新建的文件filetest 的权限为
我们发现上面的file文件依旧没有可执行权限,但是文件夹有可执行权限。这是因为,系统为了安全会,无 论在任何时候新建文件,都会默认的将文件的可执行权限去掉。
四、文件的访问控制(acl列表)
(一)acl的定义
acl = access control 它用来指定特殊用户对特殊文件有特殊权限。
当我们使用 ls -l directory命令的时候 我们就会获取directoy文件夹的所有属性列表和所有者、所有组等
等信息 ,"drwxrwx ---+",中的“+”就代表权限列表已经被激活,
如上图我们看到 的是“.”,他不是权限列表,它代表权限列表未被激活。当“+”存在时,我们使用getfacl命令 来获取文件的访问控制列表(权限列表)
使用方法 : getfacl [参数] filename|directory
-a 显示访问控制列表
-d 仅显示默认的访问控制列表
-c 不显示注释表头
-e 显示所有有效权限
-E 显示无效权限
-R 递归显示子目录
如上我们看到 test权限列表已经别激活,使用 getfacl -a filename|directory 查看权限列表。
# file: test #文件名称
# owner: root #文件所有人
# group: root #文件所有组
user::rwx #拥有者权限
user:student:rwx #特殊用户权限
group::r-x #组权限
mask::rwx #权限掩码
other::r-x #其他*限
(二)设定acl列表
setfacl -m <u|g>:<username|groupname>:权限 文件|目录
#-m #设定
# u #用户
# g #组
例如设定权限为550的test文件夹,拥有student用户的rwx权限。
我们可以看到user:student:rwx 代表了特殊用户的权限,即student这个用户是属于文件的其他人,但是对
该文件拥有rwx权利,这个在ls -l命令中无法看出来
当我们的权限列表中存在特殊用户权限或特殊用户组权限时候,我们使用命令ls -l看到的文件的权限是不正确的
我么使用下面的命令删除列表中的特殊用户或特殊组的权限
setfacl -x <u|g>:<username|groupname> 文件|目录
我们可以看到该文件的student特殊用户权限已经被删除。
setfacl -b 文件|目录 #关闭列表
(三)acl mask值
1、mask 权限掩码
mask 权限掩码,一般用来对特组权限和殊权限进行限制的,用来表示能够赋予用户最大权限,当时用chmod改变文件普通权限时可能会被破坏,我们使用下面的命令行修复
setfacl -m m:rwx filename|directory #对文件的读写权限进行限制。
例如:
第一步:
我们在桌面创建的test文件,它的默认权限为rwxr-xr-x,我们使用命令对其加上特殊权限:
setfacl -m:u:student:rwx test
注意:
我们在次使用ls -l 对test文件详细信息查看
在 “+”号出现的位置,原来是一个 “.” 正代表我们文件存在了权限列表,这个时候使用ls -l 查
看文件的权限时有可能是错误的,我们要使用getfacl filename|directory,详细查看文件权限。
第二步:
使用setfacl -m m:r-- test 对文件的特殊权限进行限制。
如上我们可以看到我们对文件的组权限和特殊权限已经进行了限制。 只有r--可以生效
注意:
第一点:
上面的权限显示是错误的和我们使用getfacl命令看到的不一致。因为文件夹存在权限列表。
第二点:
当我们再次对该test文件使用setfacl -m u:student:rwx directory 命令时,我们会发现他会将我
们的mask值再次覆盖掉,因为系统默认我们重新设置了mask值,如下图:
2、当我们需求某个目录对于student可写,并且目录中新建的子目录对student也可写,就要设定默认默认
权限,默认权限只对目录中新建立的文件或者目录生效,对已经建立的文件无效,对于目录本身也无效。
setfacl -m d:u:student:rwx directory 例如 我们在桌面上创建如下的文件及目录
我们使用 setfacl -m d:u:student:rwx test 命令使得test文件中之后所有新建的文件对student用户
可读可写可执行
五、特殊权限
(一)SUID
chmod u+s file
chmod 4xxx file
SUID 的值是 4
例:当我们普通用户去执行passwd命令是后我们需要调用 /usr/bin/passwd 我们可以使用 ls -l /usr/bin/passwd 查看passwd命令的权限,
passwd 命令的所有组和所有者都是root 且拥有者权限里面存在s,这说明这个命令具有SUID权限。
同时发现普通用户没有w权限,按理来说普通用户不能执行这个命令的,因为在修改密码的时候肯定要进行文件的写入。通过分析,我们发现passwd这个命令会操作/etc/shadow这个文件,继续查看该文件的权限如下:
这个文件的权限是0 ,但是root用户对所有的文件有读写(rw)权限,对所有目录拥有读写执行权限(rwx),因此普通用户对这个文件确实不能使用读写执行权限。不过passwd命令具有suid权限,所以普通用户执行这个命令的时,当系统生成对应的进程后,这个进程就拥有了 /usr/bin/passwd文件拥有者root的权限。
我们可以使用下面方法进行验证:
执行上面的命令操作,后我们通过pstree -u 来查看系统的命令树。
我们发现执行passwd命令的权限不是student用户而是root
(二)SGID
2、对目录:
当目录有sgid权限后,目录中新建的所有文件的所有组都自动归属到目录的所有组
之中,和文件建立者所在的组无关
3、设定方式:
chmod g+s file|dir
chmod 2xxx file|dir
例:我们普通用户使用locate命令
发现用户组权限中应该出现x的位置的地方显示了s,表示这个命令具有SGID权限,而普通用户
只有x权限没有rw权限。locat这个命令,实际上会去访问 /var/lib/mlocate/mlocate.db这个文件,
普通用户对这个文件没有任何权限,所以理论上locate命令普通用户不可以执行,但是因为,locate拥有SGID权限,所以locate生成进程时候,这个进程会得到locae命令的用户组权限,相当于student用户被临时加入了slocate这个组,因此student对这个文件拥有了r权限。
对于目录,当目录有sgid权限后,目录中新建的所有文件的所有组都自动归属到目录的所有组之中,和文件建立者所在的组无关。
例如:当我们在团队在某个目录下共同工作来做一个项目时,那么团队成员都得对这个目录下的所有文件具有rwx权限,当我们有A、B、C、三个用户属于不同组时,但都在同一个目录下工作,我。当用户A创建了一个权限为770的文件后,B、C用户的无法访问这个文件,这个时候我们可以对该工作目录加入SGID权限,那么目录中的所有新建文件的归属组就属于目录的所有组之中,由于其他用户和目录属于同一个组,其他用户也可以对该文件进行读写执行操作。
(三)SBIT
只针对目录有效,当用户对目录拥有wx权限时,用户在该目录创建的文件或目录只有自己与root用户才可以删除 ,SBIT = 1,SBIT在其他用户权限本应该是x的地方显示位t
设定方式
chmod o+t directory
chmod 1777 directory
例:
(四)chmod
我们使用chmod更改文件的权限时 我们使用这样的命令chmod 4xxx filename 其中4 代表文件的SUID xxx代表们对文件的对写权限的改动,如果我们希望查找系统中所有具有特殊权限的文件,则:
find / -perm +7000 # 其中7 = 4+2+1 即SUID+SGID+SBIT