linux中有权限的概念,最常见的就是安装一些命令的时候需要输入sudo来提权,那么为什么要有这个东西呢?
linux是一个多用户操作系统,很多东西看起来是有很多分,但是实际的存储只有一份(比如命令,不同的用户可以输入相同的命令,实际上用的是同一个地方的命令),多用户的时候,肯定不想别人能进入你的用户家目录,或者更改你的文件,这就是权限的意义所在。同时也能联系生活,很多东西都是我们不能接触的,所以,权限防的是想要更改你的文件的陌生人。
一、缺省权限
1.文件权限
在linux中,如果用户没有指定文件的权限(用umask),那么就会按照默认的权限赋予文件。比如创建一个普通文件“a.txt”。
可以看到
中白色的部分,它们应该怎样理解呢?
a.它们三个为一组,从左到右分别是“拥有者”、“所属组”、“other”的权限。
b.‘r’是读,‘w’是写,‘x’是可执行。
另外:
中白色的部分从左到右依次是文件的拥有者,所属组。
怎样理解“拥有者”、“所属组”、“other”?
拿一个家庭举例,家庭中有父母和我和我哥,那么我和父母就是拥有者,整个家庭构成所属组。
在文件的访问中,系统会根据当前用户来确定访问的权限,举个例子,当另外一个用户访问“a.txt”的时候,系统先判定这个用户属于拥有者,答案为否,再判定是否属于所属组,答案为否,最终系统判定是属于“other”的,所以这个用户只有读权限。就像:“我买了一台电视,那么这个电视就是这个文件,是属于我的,那么我就是拥有者,,因为我哥是和我一个组,我也开放了所属组权限,告诉他们也可以来我卧室看电视,那么当我哥看电视的时候,系统会把他们判定为所属组的成员,当有一天某一个远房亲戚来家做客,他们也想看电视,那我就告诉他们,你们只允许看,不可以碰我的电视”。
因为我是电视(文件)的主人,我想干嘛就干嘛,我也可以不让他们进行操作,那么对于linux的文件,该怎样修改文件权限呢?
在linux中,使用“chmod”来修改权限。选项字节有:“u”、“g”、“o”、“a”,分别表示“user(拥有者)”、“group(所属组)”、“other(其他用户)”、“all(所有用户)”。用法是chmod 选项 文件/目录
它的操作有‘+’、‘-’、‘=’。‘+’、‘-’很好理解,即加上或者减上某个权限,例如我们给拥有者减上一个读的权限:
可以看到文件的拥有者读权限已经没有了,测试一下:
提示我们“Permission denied”即“没有权限”。同样的操作可适用于所属组和other。
‘+’和‘=’的用法一样。
但是,我们的root是至高无上的,root就像父母,家庭中的权力很大,这个文件在root下是随便打开的:
即使全部的权限都没有,也能打开:
另外,修改权限还可以使用数字来修改(三个八进制数字),通过以上介绍可以知道,每三个字符可以表示一个用户的权限,那么这三个位置可以分别对应二进制的0和1,从前到后分别表示‘r’、‘w’、‘x’,拿拥有者的权限举例,想让他只有读的权限,那就是100,八进制就是4,引申出:如果想要拥有者,所属组,other都只有读的权限,那就是444。就可以这样写“chmod 444 a.txt”:
可以看到同时更改了拥有者,所属组和other的权限。
2.目录权限
先创建一个目录:
可以看到目录的拥有者默认权限是rwx,在这里不卖关子,‘r’权限对应的是查看目录里面的内容的权限,‘w’对应的是在目录中是否能创建文件的权限,‘x’对应的是能否打开目录的权限。
示例:
a.去掉‘r’并浏览目录内容发生报错:
b.去掉‘w’并创建一个文件发生报错:
c.去掉‘x’并打开目录发生报错:
值得大家注意的是:当别人的目录在你的文件中的时候,虽然你没有权利打开,但是你是有权利删除的,这里创建一个root的目录在test里面,并关闭other的全部权限:
我们可以看到我是没有权限访问的,但是!我可以删除它:
如果不加-f,即强制删除,那么系统会问你是否删除:
这时候输入‘y’按下回车键即可!
可以看到目录已成功删除
二、更改所属组或者拥有者
Linux中更改所属组或者拥有者可以用命令chown(用于更改拥有者),chgrp(用于更改所属组)。
目前我们是用户ubuntu,操作的目录是test。
a:更改所属组为root:
哎呀我擦?竟然报错了,不让我们更改,那么为什么呢?这就好比陌生人想要在你家放一个东西,你敢让陌生人进来吗吗?那肯定得提防着点,或者得取得同意才可以。
既然你不要,那我就告诉你爸妈(root),强制给你,即获取管理员权限(sudo),即可更改成功。
b.更改拥有者为user1(和chgrp一样的操作)。
但是chown有和chgrp一样的效果,如果只想该拥有者,那么和更改所属组是一样的用法,如果还想更改所属组(比如更改为user1),那么可以执行“chown cx:user1”,冒号前边代表拥有者,后边代表所属组。这时候的文件意为拥有者是cx,所属组是user1。
让我们恢复所属组:
然后使用chown更改所属组为root:
更改成功!
更改拥有者和所属组为root:
更改成功!
那么单独测试更改拥有者:
更改成功!
三、粘滞位
在多用户的文件操作中,由于我们的个人用户的家目录是不可以被被人进入的,所以需要在不属于任何一个私人用户的目录(root下的根目录)下完成多用户操作同一个目录(已经给了other写的权限),这个时候就出现了一个问题,倘若是我在这个公共目录下创建了一个文件,由于这个目录是公共的,而删除这个文件的权限和这个文件的权限没有任何关系,是和目录有关系。这么说,别人可以随时删除我的文件。
为了解决这个问题,Linux中出现了粘滞位,它可以在公共的目录中限制删除的行为,即“除了文件的 所有者,目录的拥有者以及root用户删除外,其他人均不可删除”。添加粘滞位的命令如下chmod +t 目录。下边使用root用户在根目录下创建一个test目录,并赋予other读写执行的权限。
下边使用ch用户在test下创建一个文件aa.txt,然后再切换到user1删除这个文件:
可以看到user1把ch用户的文件删除了,接下来我们给这个目录添加粘滞位:
可以看到test目录已经在other的后边加上了“t”,接下来再次使用user1操作删除:
可以看到user1已经没有权限删除ch创建的文件了。