Linux权限
在Linux系统中,权限是保障系统安全的重要机制。它通过区分用户类型和设定文件/目录的访问权限来控制用户对资源的操作能力。主要涉及的概念包括普通用户与超级用户(root)之间的区别、如何切换用户身份以及相应的权限限制。
linux下存在两种用户:普通用户和超级用户(root)
超级用户:不受linux的权限限制,可以为所欲为。
普通用户:受linux的权限限制,和我们普通人一样做有限的事情。
我们使用 su [用户名] 的方式,可以切换用户。
从普通用户切换到root,是需要输入root的密码的,而root因为是超级用户,使用可以随心所欲不用密码的切到任何用户,但是要切回root就需要输入密码了,因为切走之后便不再是超级用户。
Linux权限管理
1.文件访问者的分类
u(User):文件和文件目录的拥有者
g(Group):文件和文件目录的拥有者所在的组的用户
o(Others):其他用户
为什么会出现所属组这样的概念的,明明u跟o就已经可以区分权限了呀?
实则不然,因为我们做项目的时候一定会涉及到多人合作的问题,如果只区分拥有者跟其他用户,那么这个文件只能访问,其他人(比如你的领导)需要访问就得开放o的权限,但这会导致其他的所有用户(比如你的竞争对手)都有访问权,造成安全隐患,因此所属组g的出现很好的解决了这个问题。
2.文件的类型和访问权限
在Linux系统中,文件类型可以通过文件权限字符串的第一个字符来识别。常见的文件类型及其表示符号如下:
d:文件夹(目录)
例如:drwxr-xr-x
-:普通文件
l:软链接(类似Windows的快捷方式)
b:块设备文件(例如硬盘、光驱等)
p:管道文件
c:字符设备文件(例如显示器和键盘)
s:套接字文件
我们在使用 ll 指令查看文件的时候,会发现文件有这么一栏
drw-r--r-x
我们可以将其分为四个部分,第一个部分就是第一个字母,这就是用来判断我们当前的文件类型的,也就是上述我们提及的。
其余的9个字母可以平均分成三个部分,分别于我们上述提及的文件访问者的三个类型一一对应,每个类型的访问者都有其对印的权限。
基础权限
r(读):对于文件来说具有查看文件内容的权限。
w(写):对于文件来说修改文件内容的权限。
x(执行):对于文件来说有执行文件的权限。(比如test.c文件没有x权限的话无法执行)
“ - ” :表示不具有对应的权限。
3. 文件权限值的表示法
3.1 字符表示法
就是我们第二点提到的rwx
3.2 8进制表示法
已知权限的状态只有两种:有或者无,我们可以分别用1和0来表示这两种状态。比如若所属组的权限是 r-x
,那么就可以表示为 101
,而二进制转换为八进制刚好是三位二进制转一位八进制。 因此 101
又可以转成 5
,那么刚好一个访问者类型对应一个数据。
例如 664
对应的二进制 110 110 100
也就是表示文件的权限为:"rw- rw- r--"
。
4. 文件访问权限的相关设置指令
说明:只有⽂件的拥有者和root才可以改变⽂件的权限
4.1 chmod
功能:设置⽂件的访问权限
格式:chmod [参数] 权限 ⽂件名
常⽤选项:
-r:递归修改目录文件的权限
chmod命令的格式:
用户表示符和权限字符
-
用户表示符:
- u:拥有者
- g:拥有者同组用户
- o:其他用户
- a:所有用户
-
权限字符:
- +:向权限范围增加权限代号所表示的权限
- -:向权限范围取消权限代号所表示的权限
- =:向权限范围赋予权限代号所表示的权限
-
实例:
chmod u+w /home/abc.txt
:为文件拥有者增加写权限chmod o-x /home/abc.txt
:取消其他用户的执行权限chmod a=x /home/abc.txt
:为所有用户设置执行权限,取消其他所有权限
三位8进制数字
- 实例:
chmod 664 /home/abc.txt
:设置文件权限为rw-rw-r--
chmod 640 /home/abc.txt
:设置文件权限为rw-r-----
4.2 chown
功能:修改⽂件的拥有者
格式:chown [参数] ⽤⼾名 ⽂件名
实例:• chown user1 f1
• chown -R user1 filegroup1
4.3 chgrp
功能:修改⽂件或⽬录的所属组
格式:chgrp [参数] ⽤⼾组名 ⽂件名
常⽤选项:
-R 递归修改⽂件或⽬录的所属组
实例: • chgrp users /abc/f2
4.4 umask
功能: 查看或修改⽂件掩码
实例:
• umask 755
• umask //查看
• umask 044//设置
文件掩码:
新建⽂件夹默认权限=0666,新建⽬录默认权限=0777,但是那么照例来说我们新建一个文件他默认的权限应该是 rw-rw-rw,但是实际上我们新建一个文件可以发现并不是这样的
可以看到转换过来应该是664,那么为什么会这样呢? 这就是因为有文件掩码,
比如文件掩码是0002,那么实际的默认权限就等于起始的默认权限&(~文件掩码)
为什么要有文件掩码?
新创建的目录默认具有 777 权限(即 drwxrwxrwx),表示所有用户都具有读、写和执行权限。然而,这些默认权限可能过于宽松,存在安全风险。umask 的作用就是从这些默认权限中减去一些权限,以确保新创建的文件和目录具有更严格的权限设置。
通过设置全局或用户的umask值,可以确保所有新创建的文件和目录具有一致的权限设置。这有助于维护系统的权限管理标准,减少因权限设置不一致而引起的混乱。
我们可以可以通过调整umask
值来快速更改新文件和目录的默认权限,而不需要手动逐个设置权限。
4.5 file指令
功能说明:辨识⽂件类型。
在linux中,文件名的后缀并不一定代表着他的真实类型,就比如说一个文件的后缀是.c,着并不能代表他是一个代码文件,可能只是一个文本文件。当我们需要查看该文件的类型是时,就需要使用file指令。
语法: file [选项] ⽂件或⽬录...
常⽤选项:
• -c:详细显⽰指令执⾏过程,便于排错或分析程序执⾏的情形。
• -z:尝试去解读压缩⽂件的内容。
4.6 sudo指令
当我们需要root的权限来执行当前语句,但是又不想用su来频繁切换用户,就可以使用sudo来进行提权。
功能:提升用户的权限,目前这个阶段我们可以暂时理解为以root用户的权限来执行当前语句
语法:sudo + 命令
5. 目录的权限
目录的权限与文件的权限又些许不同,因此我们需要在阐述一下。
• 可读权限(r): 如果⽬录没有可读权限,则⽆法⽤ls等命令查看⽬录中的⽂件内容.
• 可写权限(w): 如果目录没有可写权限,则无法在目录中创建,删除,以及修改文件。
• 可执⾏权限(x): 如果目录没有可执行权限,则无法cd到目录中,即无法进入访问该目录。
6. 粘滞位
如果有一天那么需要写一个公共的项目,那么就需要建立一个共享文件,这样可以促进文件和资源的共享、协作和管理。
于是,问题来了,只要用户具有目录的写权限,用户就可以删除该目录中的文件,即使用户对该文件本身没有写权限。我张三创建的⼀个⽂件,凭什么被你李四可以删掉?
所以共享目录这种行为可能会导致一些安全和管理上的问题。
因此就引出了我们的粘滞位的概念。
[root@localhost ~]$ chmod +t /home/ # 加上粘滞位
[root@localhost ~]$ ls -ld /home/
drwxrwxrwt. 3 root root 4096 9⽉ 19 16:00 /home/
[root@localhost ~]$ su - litao
[litao@localhost ~]$ rm /home/abc.c #litao不能删除别⼈的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/abc.c"?y
rm: ⽆法删除"/home/abc.c": 不允许的操作
使用 chmod +t 给文件加上粘滞位,则该⽬录下的⽂件只能由
1. 超级管理员删除
2. 该⽬录的所有者删除
3. 该⽂件的所有者删除
关于权限的总结
• 目录的可执行权限(-x)表示你是否可以在目录下执行命令。
• 如果目录没有 -x 权限,用户无法对目录执行任何命令,甚至无法使用 cd 命令进入该目录。即使目录有 -r 读权限(这是一个常见的误解,认为有读权限就可以进入目录并读取文件,但实际上没有可执行权限是无法进入目录的)
• 如果目录具有 -x 权限,但没有 -r 读权限,用户可以执行命令,可以使用 cd 命令进入目录。但由于没有目录的读权限,用户在目录下即使可以执行 ls 命令,也无法读出目录下的文档。也就是说,用户可以看到目录的存在,但不能列出目录中的文件和子目录。