linux的文件权限

大家都知道,linux系统以安全著称,那么大家知道linux系统为什么安全吗?
linux系统之所以安全,是因为它对文件权限有着非常严格的控制,文件权限是系统最底层的设定方法之一,它保证文件可以被可用的用户进行相应的操作。那么,接下来我们就来谈谈linux系统的文件权限吧。

文件权限的查看

ls -l 文件名
ls -ld 目录名

在这里插入图片描述
使用ls -l 可以查看一个文件的权限,这个文件显示的权限为-rw-rw-r–,这个具体是什么意思呢?别着急,在接下来的内容我们会谈到。
如果我们查看的是一个目录的权限那么只要加一个d就行了,也就是ls -ld。

文件权限的读取

上面我们已经学会怎么查看一个文件的权限,那么现在我们来看看这些权限分别是什么吧。
看到第一张图,文件的权限是这样的:

-rw-rw-r--.	1	 student	 student	 0	 Jan 	3	14:54	long 

1.第一个[-]代表文件的类型,文件的类型还用下面这些符号表示

-	空文件
d	目录
l	软连接
s	socket 套接字
b	block块设备
c	字符设备

这里我们知道,我们查看的文件是一个空文件。
2.接下来的[rw-rw-r–]则表示文件的权限。首先我们应该知道:

[r]: 读权限
[w]: 写权限
[x]: 执行权限
[-]: 没有权限

其中,前三个[rw-]表示所有者对文件的权限,中间的三个[rw-],代表所属组对文件的权限,最后三个[r–]代表其他人对文件的权限。
我们知道了文件有读,写执行权限,但读写执行权限又是什么意思呢?下面我们来谈一谈。
读权限:
如果对普通文件有读权限,则可以查看这个目录,如果对目录有读权限,我们可以查看目录中有什么子文件或子目录。下面来看一个例子,我用root在/mnt创建一个文件我们看:
在这里插入图片描述
我们可以看到,s所有者有读写权限,所属组和其他人都只有读权限,当然因为我使用的是root所以这个权限对它不受限制。现在我们切换到普通用户来编辑一下这个文件。

在这里插入图片描述
它会提示你正在修改一个只读文件,保存退出看看。
在这里插入图片描述
可以看到,退出失败了,因为我们用的普通用户对这个用户来说是其他人,只有读权限,不能修改文件内容。
所以我们知道,什么人拥有什么权限才能进行什么操作,对于自己没有的权限是不能操作的。对于这个文件来说除了所有者对文件有读写权限,其他用户都只有读权限,也就是只能看。对于目录来说也是一样的,你只能看目录中用什么,不能进行其他操作。这就是读权限。
写权限
我们还是看刚才的文件,现在我门给其他人一个写权限,看看会怎么样,修改权限的命令下面会提到。
在这里插入图片描述
可以看到,其他人有写权限了,现在我们切换到普通用户。

在这里插入图片描述
在这里插入图片描述
可以看到,我成功的保存退出了,这就是对文件的写权限,可以修改文件的内容。如果操作的对象是一个目录的话,就表示是否可以对目录中的子目录或子文件的数据进行更改,这个挺难理解的,我们来看一看:
我用root创建一个目录:
在这里插入图片描述
可以看到,其他人是没有写权限的,我现在用普通用户删除它。
在这里插入图片描述
可以看到,没有权限,操作失败。
其实意思就是我们是否可以在目录内增删改文件,如果对目录有写权限,就可以在这个目录内删除文件。
执行权限:
执行权限对文件来说就是否可以通过文件名调用文件记录的程序,也就是在空文件写一个程序,调用文件名时能否运行。而对目录来说,有执行权限就可以进入这个目录,没有就进不去,这就是执行权限。
上面我们用到了跟改文件权限的命令,

更改文件的权限

前面我们用到了更改文件权限的命令,现在我们来详细谈一下。

chmod <u|g|o><+|-|=><r|w|x> 文件名		##更改文件权限

这样看都不知道这是啥,没关系我们一个一个看。
chmod,修改权限的命令,没什么好说的。下面的[u]代表所有,[g]代表所属组,[o]代表其他人。rwx前面讲过,是文件的读写执行权限,而[+],[-],[=]就更好理解了,就是字面意思上的加减,这个命令的意思是,要对谁增加或者减少对这个文件的相应权限,[=]则是直接赋予权限。
比如,
对所有者增加读权限:

chmod u+r 文件名

对其他人减少写权限:

chmod o+x 文件名

对所属组赋予读执行权限:

chmod g=rx 文件名

如果要对多人进行操作,要用逗号隔开,如

chmod  u+rwx,g+rw,o-x 文件名

在这里插入图片描述
可以看到,在这里,我对所有者减掉了读权限,对所属组和其他人减掉了执行权限。
除此之外,还可以用数字的方法修改文件的权限。
其中:

r=4
w=2
x=1

这个代表权限的权重,赋予权限是用加法来实现的,比如说上面的1代表x,2代表w,4代表r,那么5代表[r+x],也就是rx,读权限和执行权限,最高为7,即[rwx]。
比如:

chmod 755 文件名

第一位7,代表所有者的权限,第二位5,代表所属组的权限,第三位5,代表其他人的权限。用这个命令可以给文件直接赋予权限,不管之前的权限是什么。
在这里插入图片描述
文件的权限直接变为[rwxr-xr-x]。
在进行文件的权限管理时,我们还可以更改他们的所有者和所属组。

chgrp	用户名	文件名		##改变文件的所属组

使用这个命令可以更改文件的所属组。
在这里插入图片描述
所属组由root变为student。

chown   用户名	文件名		##改变文件的所有者

使用这个命令可以更改文件的所有者。
在这里插入图片描述
所有者由root变为student。

chown	用户名1:用户名2	文件名	##改变文件的所有者和所属组

同时改变文件的所有者和所属组。
在这里插入图片描述

系统系统预留权限 :umask

umask表示系统建立文件时默认保留的权力,也就是系统预留的权力,直接使用umask查看系统预留权限。
在这里插入图片描述
这里前面的0不用管,系统预留的权限是022,现在我们新建立一个文件看看吧。
在这里插入图片描述
在这里我新建了一个目录,他的默认权限是755,是不是发现755+022=777?这里我们可以看到,022是系统收回去的权限,也就是在创建目录的时候默认会少了022,也就是所属组和其他人的写权限被系统默认收回了。
为什么系统要收回这部分权力呢,当然是因为要保证系统的安全啦。写权限是一个非常危险的权限,因为它是修改的,所以系统要限制这个权力。而对于文件来说:
在这里插入图片描述
可以看到,它的默认权限是644,也就是在文件默认权限的基础上再减去111。
用umask+数字可以临时修改系统预留权限:
那么如何永久修改呢?

vim /etc/bashrc	##shell配置文件

在这里插入图片描述可以看到:

  if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
       umask 002	##普通用户的umask
    else
       umask 022	##超级用户的umask
    fi

这是修改shell配置文件的umask

vim /etc/profile	##系统配置文件

在这里插入图片描述
可以看到:

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002		
 else
    umask 022
fi

这是修改系统配置文件的umask,修改时直接修改上面的数字就可以了。
这些完成之后。要重启一下服务才会生效。

source	/etc/bashrc	  ##让更改立即生效
source	/etc/profile

特殊权限

1.sticky
作用:
只针对目录生效,当一个目录上有sticky权限时,在这个目录中的文件只能被文件的所有者删除

设定方式:

chmod o+t 目录
chmod 1xxx 目录

使用这个命令的目的是,在一些所有人都可以操作的目录下,可以保证自己创建的文件不被他人删除。保证自己创建的文件的安全性。
比如创建一个权限为777的目录
在这里插入图片描述

用studnet建一个文件
在这里插入图片描述
切换到另一个普通用户,删除hh文件。
在这里插入图片描述
可以看到student用户建立的文件被别的用户删除了。这就很不合理,这时候,我们只要:
在这里插入图片描述
可以看到,在其他人权限后有个t,这就表示已经附上了粘着位,这样,只有自己和root用户可以删除自己的文件了。
2.sgid
作用
对文件: 只针对二进制可执行文件
当文件上有sgid时任何人执行此文件产生的进程都属于的文件的组
对目录:
当目录上有sgid权限时任何人在此目录中建立的文件都属于目录的所有组
设定方式:

chmod g+s 文件名或目录名
chmod 2xxx	文件名或目录名

使用sgid就可以让文件获得所属组的权限。比如,在一个拥有sgid权限的目录中,任何人所创建的文件都属于目录的所属组,而不是自己的所属组。
首先,我们使一个目录拥有sgid权限。
在这里插入图片描述
可以看到,在所属组权限位置多了一个s。这表明这个目录拥有了sgid权限。
现在我们切换成普通用户创建一个文件。
在这里插入图片描述
可以看到,新建的文件不属于student,而是属于这个目录的所属组root。
3.suid
suid只针对于二进制可执行文件,当文件上有suid时任何人执行这个文件的时候都会变成这个文件的所有者。这个命令可以用来放权。比如系统中很多命令只能是root执行的,但是root可以给某些命令suid权限,这样我们就可以用普通用户去执行一些只有root才能之执行的命令了。
用法:

chmod u+s 文件或目录名
chmod 4xxx	 文件或目录名

以useradd为例:
在这里插入图片描述
可以看到,普通用户是不能添加新用户的。
在这里插入图片描述
在这里插入图片描述
可以看到,用户成功添加了,student在使用拥有suid权限的useradd时,它是以root的身份执行这条命令的,也就是说,在执行这条命令的时候,student变身成为了root,在执行完这条命令之后又变回原来的身份。

用户的acl权限

acl权限的作用是使特定的用户拥有特定的权限。
1.acl列表管理

setfacl -m u:用户名:rwx 文件名	##设定用户对文件拥有rwx权限
setfacl -m g:组名:rwx	文件名	##设定特定组成员对文件拥有的权限
setfacl -x u:用户名 文件名	    ##从acl列表中删除用户,用户将不在拥有acl权限
setfacl -b 文件名		        ##关闭文件的acl

2.acl列表查看

-rwxrwxr-x+(有+号表明acl开启)

什么时候使用acl权限呢?比如一个目录的权限是rwxrwxr–,所有者,所属组都拥有读写执行权限,但其他人只有读权限,也就是连目录都进不去,那么一个人不是所有者,也不在文件的所属组内,如何使他能进入这个目录呢?
这时候就要用到acl权限了。
我们现在建立一个这样的目录看看:
在这里插入图片描述
之后设置目录的权限:
在这里插入图片描述
对于这个目录,其他人是没有执行权限的。
在这里插入图片描述
现在我们用另一个普通用户进入这个目录
在这里插入图片描述
可以看到,权限不够,因为其他人对目录没有执行权限。
现在我们打开它的acl列表
在这里插入图片描述
查看acl列表
在这里插入图片描述
可以看到,在其他人权限后有一个+号,说明打开了acl权限。

getfacl	文件名

在这里插入图片描述
这里我们看到:

user:huang:rwx

表明huang用户拥有读写执行权限。
现在,再用huang用户进入这个目录
在这里插入图片描述
可以看到,我们成功进去了,这就是acl权限的作用。让特定的人去做特定的事。
3.mask值

mask值表示在权限列表中能生效的权力值。
在这里插入图片描述
在这里我们看到这里能生效的值为rwx。
当用chmod减小开启acl的文件权限时mask值会发生改变。

chmod g-w 目录名

在这里插入图片描述
在这里插入图片描述
可以看到mask的值由rwx变为r-x。
如果要恢复mask值:

setfacl -m m:rwx 目录名

在这里插入图片描述
4.acl默认权限设定
默认权限只针对设定完成之后新建立的文件或目录生效,而已经存在的文件是不会继承默认权限,也就是让新建的文件都有acl权限。

setfacl -m d:u:用户名:rwx 目录
setfacl -k 目录

在这里插入图片描述
在这里插入图片描述
可以看到,在这个目录里新建的目录也拥有acl权限,这就是acl默认权限。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值