[Linux]权限

一、Linux下用户的分类

要知道权限,我们首先需要知道在Linux下用户的分类:

在linux中用户一般分为两类:

  • root:超级用户(基本不受权限的约束)

  • 普通用户:普通用户是受权限的约束的

超级用户:可以再linux系统下做任何事情,不受限制

普通用户:在linux下做有限的事情。

超级用户的命令提示符是"#",普通用户的命令提示符是"$"

1.用户之间的切换

首先是这两个用户是如何切换的?

比如我们当前是一个普通用户

我们可以使用su指令,然后我们输入root的密码即可,这样我们就能成为root用户

这样切换以后,我们会发现,我们依旧处于原来的路径中,但是用户已经更改为了root账号了

我们从dream(我的用户名)变成了root,此时,我们依旧处于原来的路径中,但是用户已经更改为了root账号了

现在当我们想要退出来的时候,我们可以直接使用exit或者CTRL + D快捷键,这样我们就可以退出root用户了

除了直接使用su,我们还可以加上-,也就是使用 su -指令

不过我们可以注意到,当我们输入密码以后,它是一种以登录的方式进入进去的,所以会显示登录的一些信息,并且它的登录后当前的目录直接切换为home目录

su就像是一个直接的身份转变。直接将一个普通用户变成root,但并不是以重新登录的身份变化的,而是把一个人变成了root

同样的,对于su -以后的root,我们直接退出的话,会显示logout

当我们是root用户了,我们想要登录一个普通用户,我们也可以su加上指定用户名即可,这里不需要密码。当我们想退出的时候直接exit或者CTRL+D即可

同样,对于su -以后,我们直接退出的话,会显示logout

2.对一条指令的提权

当我们目前是普通用户的时候,我们知道,我们是不可以安装软件等操作的

因为安装软件其实就是将某些文件拷贝到系统的指定目录,而普通用户是没有权限进行拷贝的

所以我们可以使用sudo指令进行提权

sudo command

sudo后面加上你需要的操作,然后输入你的密码即可

不过在这里我们可能会觉得有些问题?那这样的话sudo只需要加上我当前账号的密码就可以了,那岂不是人人都是root,即便不知道root密码的情况下?

事实上却并非如此,你不信可以试试,你会发现sudo用不了。

那是因为,我们当前adduser新建出来的用户,没有办法执行sudo,因为系统不信任我们,除非未来将普通用户,添加到系统的信任白名单里面

如下图:

二、什么叫权限

1.权限

权限=角色+文件的属性

权限的最通俗的解释就是一件事情是否允许被我们做

  1. 权限认证的是身份(权限和"人"有关,这个人是有身份/角色的)

  2. 权限也和事物的"属性"有关(毕竟我们不可以将硬盘像面包一样啃一口

这里的属性,我们指的就是文件属性。

文件属性有三种:可读可写可执行

2.文件的属性

我们可以先创建一个目录和一个普通文件,然后使用ll命令显示如下

我们可以看到有很多列,最后一列是文件名,然后紧接着的三列是时间。这些很容易看出来

可是前面五列又代表了什么呢?这个,我们需要分开认识。

3.文件类型

首先是第一列我们进行分析一下

第一列的第一个字符是代表着文件的类型

文件类型:Linux系统中文件名后缀没有直接的意义(当然不代表它不用)

也就是说,Linux系统不以文件后缀作为文件类型,而是以这个第一个字符代表文件类型

下面是第一个字符所代表的文件种类

    • :普通文件
  • d : 目录文件
  • b : 块设备文件
  • c :字符设备文件
  • p : 管道文件
  • ...

其实一般来说我们只需要用到目录文件和普通文件就行。

b是块设备文件,其实就是磁盘文件,c是字符设备文件,通常有键盘、显示器文件等,如下所示的都是字符设备文件,p是管道文件,一般用于通信

4.权限属性

如下所示,第一列的后九个字符代表的是权限的属性

  • r : 可读
  • w : 可写
  • x : 可执行
  • - : 对应位置没有权限

这些权限是跟角色的身份有关系的

而我们将这些人划分为三种角色、权限身份

  1. 拥有者
  2. 所属组
  3. other

对于我们下面的信息中,第三列就是拥有者,第四列就是所属组(分别是我框起来的两列)

而对于其他人,不是拥有者也不是所属组那就是other

第五列是文件的大小

对于第二列,我们暂时先不讨论

现在,我们先回过头来看第一列的后九个字符

他们三个三个为一组,分别对应拥有者,所属组和other的权限

而且对于每一个权限里面,三个的位置分别依次代表,是否可读,是否可写,是否可执行,就比如我划线:

  • 对于拥有者的权限是可读可写可执行

  • 对于所属组的权限是可读可写可执行

  • 对于其他人的权限是可读不可写可执行

需要注意的是root其实是不受权限约束的

举个例子:

首先,我们回到root用户,我们之前写了这个

现在我们是可以读取的

下面,我们将这个Hello.txt的权限给全关了

现在按照道理来说,应该不能访问了,但是我们是高贵的root用户,我们无视权限,照样访问。

三、更改权限

一般而言,更改权限的人只有两种,一个是拥有者 ,一个是root

在Linux中更改权限的指令是:

1. chmod 更改文件的属性

chmod指令可以进行权限的修改
功能: 设置文件的访问权限
格式: chmod [ 参数 ] 权限 文件名

常用选项:
R -> 递归修改目录文件的权限
说明:只有文件的拥有者和 root 才可以改变文件的权限
chmod命令权限值的格式
用户表示符 +/-= 权限字符
+: 向权限范围增加权限代号所表示的权限
-: 向权限范围取消权限代号所表示的权限
=: 向权限范围赋予权限代号所表示的权限
用户符号:
u :拥有者
g :拥有者同组用
o :其它用户
a :所有用户
实例:

chmod u+w /home/abc.txt

chmod o-x /home/abc.txt

除了以上的指定修改,还有一种是利用比特位一一对应的方式来进行修改
②三位 8 进制数字

示例: # chmod 664 /home/abc.txt

chmod 640 /home/abc.txt

2. chown 更改拥有者

我们可以使用chown更改拥有者

但是当我们直接这样使用的时候,我们发现是不可以的

因为还需要考虑接受方是否想要。

所以在这里我们需要使用sudo来进行指令的提权或者直接用户root来执行。
chown
功能 :修改文件的拥有者
格式 : chown [ 参数 ] 用户名 文件名
实例:

chown user1 f1

chown -R user1 filegroup1

3. chgrp更改所属组

既然拥有者都可以更改,那么所属组当然也是可以更改的了

不过还是一样的, 我们无法直接去更改所属组吗,即便我们本身就是所属组,但我们仍需要使用root去更改,或者如果是拥有者也是可以更改的
chgrp
功能 :修改文件或目录的所属组
格式 : chgrp [ 参数 ] 用户组名 文件名
常用选项 : -R 递归修改文件或目录的所属组
实例
chgrp users /abc/f2
在使用chown的时候,如果我们在中间加上冒号,然后就可以一次性连续更改拥有者和所属组了

四、起始权限问题

当我们创建了一个新的文件的时候,我们发现它的起始权限是如下的

如果我们又创建了两个目录,它的起始权限是这样的

下面我们要介绍

umask

功能
查看或修改文件掩码
新建文件夹默认权限 =0666
新建目录默认权限 =0777
但是
但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是 mask ,则实际创建的出来的文件权限是 :
mask & ~umask
格式 : umask 权限值
说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为 0022 ,普通用0002


这个0002就是一个八进制数,第一个0代表它是一个八进制数,后面的三位才是关键的。后面的三个八进制数刚好可以形成9个比特位
权限掩码:凡是在umask中出现的权限,不会在最终的文件权限中出现

所以最终,才有了本应该是666和777,但是最终确变为了664和775

最终权限 = 起始权限 & (~umask)

如果我们想要修改umask,我们直接它在后面添加八进制数字即可:

五、目录文件的读写执行权限

对于text.c文件它的读写执行,我们都很好理解,

可是对于dir1这个目录文件,它的读写执行就有点奇怪了,那么究竟都代表什么意思呢?

如果我们对这个目录文件的读权限给去掉了,那么我们可以看到,我们仍然可以进去这个文件,并且在这个目录文件中创建文件

所以读权限并不影响能否进入,但是如果我们想看目录的文件呢?

很抱歉,它不让我们看,所以读权限影响我们能否去看

如果我们继续将这个目录文件的x给去除掉,我们会发现,我们无法进入这个文件了

但是如果我们有r权限的话,我们可以去看它里面的内容

所以对于目录

r : 是否允许我们查看指定目录下的文件内容

w : 是否允许我们在当前目录下进行创建、更改、删除

x : 是否允许用户进入对应的目录

六、粘滞位

我们可以看一下我们的家目录里面的信息

可以看到,每一个用户它的拥有者和所属组都是它自己,并且只有拥有者有权限,其它的都没有权限

所以普通用户自己的家目录权限是700,我在我的家目录创建的文件,别人都看不到

但是有时候,我们多个用户想要进行文件数据的共享

所以就说明了我们所建立的共享文件,不能在任何一个人的家目录下

所以我们可以使用root账号在根目录下创建一个共享文件shared

这样大家就都能从这个目录共享文件了,但是因为大家都有权限,如果哪个用户急了,直接把这个目录

删了,这可不行为了避免被删除我们的文件,我们可以去关掉这个shared目录的写权限

可是这样做的话如果我们去掉了共享目录的w权限,我们也同时无法创建文件了,这就不是共享了!

为了使得让其他人无法删除文件,所以我们可以使用一个新的位,也即是粘滞位 即直接o+t就可以了

这时候其他人就没办法删除这个目录了

当然root本身是可以删除这个目录的

所以粘滞位:给目录设置,一般是共享目录,大家可以在目录进行各自文件的增删查改,但是只允许文件的拥有者和root去删除文件,其他人一概不允许,t就是一种特殊的x权限

也就是说root用户是可以无视前面的一切规则的。在比如root自己的文件,即便我将我自己的权限都给关了,root照样想干啥干啥

不过如果每次我们想要共享文件的话,这样是不是有点太费劲了呢?

其实在linux中,根目录下就有一个文件tmp,他就是带了粘滞位的

相关推荐
yuniko-n4 小时前
【Linux】CentOS 部署 IPFS
linux·服务器·centos·ipfs
liu****4 小时前
12.线程同步与互斥
linux·数据结构·c++·算法·1024程序员节
此生只爱蛋4 小时前
【Linux】Socket编程预备及UDP
linux·网络·udp
二进制星轨4 小时前
科研人如何使用ubantu服务器
运维·服务器
tobybo4 小时前
【BUG调查日记】用于压测的机器人进程内存压不住且脱离分配器的管理
服务器·bug·压力测试
网宿安全演武实验室4 小时前
【技术观察】反检测浏览器Camoufox 技术解构与思考
运维·安全
打不了嗝 ᥬ᭄5 小时前
NAT,代理服务,内网穿透,DNS
linux·网络·网络协议
凯子坚持 c5 小时前
基于VMware与CentOS 7的Hadoop集群部署全景指南
linux·hadoop·centos
硬核子牙6 小时前
存储核心:EXT文件系统
linux
不吃鱼的羊6 小时前
ZSAR配置CANSM模块
服务器·网络