Linux的权限管理

1. 权限的概念

1.1 什么是权限

Linux 下的权限是一种用于控制文件和目录访问的系统机制,它决定了用户能够访问、修改、删除文件和目录,或者执行特定命令的操作权限。

1.2 权限的本质

权限不仅和人的身份有关,还和事物的属性有关。就比如你去电影院看电影,因为你买了电影票所以你有这个身份进入电影院;但是你想去电影院吃饭,这个是做不到的,尽管你有这个身份进入(买了电影票),但是电影院不具有这个属性呀。

2. Linux中的用户以及相关的命令

2.1 root 超级用户(老流氓)

Linux 操作系统中,root 用户是一个具有超级权限的用户账号,它拥有系统中的所有权限,可以执行任何操作,包括修改系统设置、访问受限文件和执行通常不允许普通用户执行的任务。由于 root 用户的权限如此之大,因此应当谨慎使用,以避免不必要的系统损坏或安全问题。

2.2 普通用户(打工人)

普通用户是除 root 之外的用户,使用计算机系统进行日常工作和任务,但不足以对系统核心或其他用户账户进行深入管理的用户。普通用户的权限和功能通常受到一定限制,以保障系统的稳定性和安全性。

2.3 区别

特性root普通用户
权限级别天花板低权限
操作范围整个系统个人文件和目录
文件访问不受限受限
系统配置完全访问和修改系统配置有限,不能修改系统设置
软件安装能够安装和卸载任何软件受限
日常使用适合系统管理和维护适合日常工作和任务

通过比较,不难看出 root 用户在系统里面可谓是想去哪儿去哪儿,想干嘛干嘛。不愧是超级用户(老流氓)。

2.4 用户之间的切换

普通用户之间的切换 (需要输入切换用户的密码)
su [-] usrname 加入 - 之后切换用户后,会自动前往该用户家目录
在这里插入图片描述

普通用户切换为 root 用户 (需要 root 密码)
su [-]
在这里插入图片描述

root 切换为普通用户 (无需密码,这就是霸道的力量!!!)
su [-] usrname
在这里插入图片描述

2.5 指令提权

普通用户在进行文件操作的过程中难免遇到权限不够的提示!就比如:

-bash-4.2$ ll
total 20
-rwxrwxr-x 1 lq lq 8360 May 29 18:40 a.out
drwxrwx--x 3 lq lq 4096 May 29 16:34 dir
-rw-rw-r-- 1 lq lq   79 May 29 18:39 test.c
-bash-4.2$ mv dir ../
mv: cannot move ‘dir’ to ‘../dir’: Permission denied

在这里我想要将 dir 移到上一个目录,结果失败了,原因权限不够。
如果真的这样的话,只有切到 root 用户来代替当前用户进行操作了,可这样未必太繁琐了些。
但是我们还有一个办法,使用 sudo(Substitute User and Group)sudo 允许普通用户在需要时以 root 的身份执行命令,但条件是输入你的密码
使用方法是将 sudo 放到你的指令的前面,如:

-bash-4.2$ sudo mv dir ../
[sudo] password for lq: 
-bash-4.2$ ll ../
total 24
drwx------ 4 admin   admin   4096 Apr  3 23:00 admin
drwxrwx--x 3 lq      lq      4096 May 29 16:34 dir
drwxr-xr-x 6 root    root    4096 May 23 21:20 javatar
drwxrwxrwx 2 limuyou limuyou 4096 May 29 20:45 limuyou
drwxrwxrwx 7 lq      lq      4096 May 29 21:04 lq
drwxr-xr-x 3 root    root    4096 Mar 31 00:48 service

可以看到,dir 顺利的拷贝到上一个目录。

3. 文件的分类和权限

前面铺垫了这么多,终于到了本文的重点,文件的权限。当然这里的权限是对于普通用户来说的,root 用户可直接忽视掉权限。

3.1 文件的分类

文件类型符号描述
普通文件-包含文本、数据或程序代码的文件
目录文件d用于存储其他文件和子目录的文件夹
符号链接i指向其他文件或目录的链接
块设备文件b用于存储数据,每次读写时以块为单位
字符设备文件c用于串行通信,每次读写时以字符为单位
管道文件p用于进程间的数据传输

这里的符号会在后面内容中提到,文件的权限本篇 blog 主要是讲解前两种我们下载常用的。

3.2 文件的权限

Linux 中文件的权限有 读( w ), 写( r ), 执行( x ) 三种。

  • 读( w ):该文件是否可以查看
  • 写( r ): 该文件是否可以可以写入新的内容
  • 执行( x ): 是否可以执行该文件
3.2.1 执行(x)权限是什么

前两者还是比较好理解的。但是执行是什么呢?这里我们单独好好讲一下:
能执行 = 具有可执行权限 + 本身就是可执行文件, 两者缺一不可。
比如,这里我们写一个简单的 C 程序:

-bash-4.2$ cat test.c
#include <stdio.h>

int main(){
    printf("hello, world\n");
    return 0;
}

在经过 gcc test.c 后,我们得到了一个 a.out 的可执行文件:
在这里插入图片描述
通过使用 ./a.out 指令,我们可以得到程序运行的结果:
在这里插入图片描述
我们通过相应的指令来去除 a.out 的执行权限(后面具体会说明如何操作),再运行一下,我们可以得到:
在这里插入图片描述
所以说,就算你是可执行程序,不给你执行的权限你也没办法执行。反之,就算给你执行的权限,你本身就不是可执行的程序,你也执行不了。

3.3 文件权限的构成

好了言归正传,我们怎么查看文件的权限呢?其实就是我们最常用的指令 ll, 输入指令后,出现以下内容:
在这里插入图片描述
现在我们来仔细看看文件权限的构成:

rw-rw-r--

文件权限的构成可以详细解读为:每一行代表文件或目录的访问权限,共九个字符,它们被分为三组,每组三个字符,分别对应 文件所有者、文件所属组和其他用户(others) 的权限。具体来说啥意思呢?请看图:
在这里插入图片描述
这样看的话意思就比较明朗了,一个文件针对不同的人设置了不同的访问权限。
就拿这个文件来说明:

  1. 文件拥有者:可 读(r) , 可 写(w), 但不可 执行(x)
  2. 文件所属组: 可读(r) , 可 写(w), 但不可 执行(x)
  3. other:可 读(r) , 不可 写(w), 不可 执行(x)

重点:使用数字来代表字符

普通情况下我们使用字符来代表该权限,但是我们同时也可使用数字来表示,就比如:
在这里插入图片描述
如具有该权限则是 1 ,反之则为 0,然后我们使用八进制来代表二进制,得到的结果是:664
我给出一个列子,下面大家自己试一试:

rwxr-x–x

解答:首先我们使用二进制表示是:111101001, 在转化为八进制,最终的结果是 751。大家答对了吗:).

3.3.1 针对文件对用户进行分组

在上面我们提到了,文件所有者、文件所属组和其他用户(others) 的概念,文件拥有者不难理解,其余两者又是什么身份呢?下面我们逐一理解。

文件拥有者

  • 文件所有者是创建文件的用户。他们对文件拥有完全的控制权,包括读取(r)、写入(w)和执行(x)的权限
  • 文件所有者可以改变文件的权限设置,也可以删除文件或修改文件内容
  • 我们可使用该指令切换文件的拥有者:chown 用户名 文件。但是极大可能会被拒绝的,因为文件不可以随意更改拥有者。但是如果你就是要给别人,那可以使用 sudo 提权:sudo chown 用户名 文件

文件所属组

  • 文件所属组是与文件所有者属于同一用户组的用户集合
  • 文件所属组内的用户默认共享相同的文件访问权限,但文件所有者可以对所属组的其他成员的访问权限进行单独设置
  • 通常,文件所属组内的用户可以读取文件(r)和写入文件(w),但不一定能执行文件(x)
  • 将用户加入所属组:sudo usermod -aG 新的组 用户。现在基本都是一个组使用一个云服务器,所以我们不着重讲解所属组

other

  • 其他用户指的是除了文件所有者和文件所属组成员之外的所有用户
  • 对于文件的其他用户,默认情况下他们只有读取文件的权限(r),无法写入文件(w)或执行文件(x)
  • 文件所有者或管理员可以设置其他用户的访问权限,以允许或限制他们对文件的访问

4. 修改文件权限

4.1 谁可以修改

一般情况下,只有文件拥有者root才具有修复文件权限的能力。

4.2 修改指令

  • chmod [u / g / o][+ / -][r / w / x] 文件
    好长,别怕。我们来逐一解释:chmod 没啥好说,修改指令。[u / g / o] 代表 文件拥有者,所属组,other。意思是你 想要修改这三者的哪一位的权限。[+ / -], + 代表增加权限,- 代表去除权限。[r / w / x] 代表具体操作的哪一个权限。
    例:

    // other是不具有写权限的,我们给other加上
    -rw-rw-r-- 1 lq lq   79 May 29 23:01 test.c
    

    我们执行chmod o+w test.c ,选择 o(other), +(增加),w(写的权限):

    // other有了写的权限
    -rwxrw-rw- 1 lq lq   79 May 29 23:01 test.c
    

    我看自己不顺眼,想去掉自己读的权限,我们执行 chmod u-r test.c:

    // 我们不具有了读的权限
    --wxrw-rw- 1 lq lq   79 May 29 23:01 test.c
    

    指令还可以叠加的,就比如我想去掉我和所属组和other写的权限,chmod ugo-w test.c

    // 都不具有了写的权限
    ---x---r-- 1 lq lq   79 May 29 23:01 test.c
    
  • chmod a[+ / -][r / w / x] 文件
    a 代表 all 全部的意思,所以你的修改是针对所有用户而言的。
    例:

    // 所有用户都不具有读写的权限
    ---x---r-- 1 lq lq   79 May 29 23:01 test.c
    

    我为所有用户加上读写的权限,chmod a+wr test.c:

    // 执行成功
    -rwxrw-rw- 1 lq lq   79 May 29 23:01 test.c
    
  • chmod [num][num][num] 文件
    上面我们提到了可以利用数字来代表字符表示权限,现在修改权限就可以利用数字来表示权限,十分的方便。
    例:
    我们为所有用户加上所有权限 chmod 777 test.c:

    // 所有用户拥有全部权限
    -rwxrwxrwx 1 lq lq   79 May 29 23:01 test.c
    

    文件拥有者保留读写权限,所属组保留所有权限,other只有读的权限,chmod 674 test.c:

    // 成功实现
    -rw-rwxr-- 1 lq lq   79 May 29 23:01 test.c
    

5. 总结

这篇 blog,我们介绍了什么是权限。以及在Linux中的文件权限,权限的表达方式,针对文件对用户分组,以及修改文件权限的各种方法。如果有什么不正确的地方,希望大家指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值