有关Linux文件权限的概述

文章目录


1️⃣一、理解权限

1.1什么叫做权限

权限我们并不陌生,大家一开始接触权限这个词还是在手机上感受到的吧。权限,归根结底,表明的就是能还是不能的问题,给不给你访问资源的权力!

1.2为什么要有权限

你想啊,我们操控的Linux,是一个多用户同时访问的操作系统,人一多,就要对用户进行管理,也就是给予合适的权限,你该干什么,你不该干什么

1.3权限=人+文件属性

这里的标题就是我想输出的结论:文件=人+文件属性。权限是针对特定群体的------与人有关(普通 or root)


2️⃣二、切换用户

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以在linux系统下做任何事情,不受限制
  • 普通用户:在Linux下做有限的事情
  • 超级用户的命令提示符是#,普通用户的命令提示符是$

命令su [用户名]
功能 :切换用户

例如,要从root用户切换到普通用户user,则使用su user。要从普通用户user切换到root用户则使用su root(root可以省略),此时系统会提示输入root用户的口令

cpp 复制代码
//超级用户切换为普通用户,不需要输入密码!!
root@VM-0-3-ubuntu:~# su - czh//czh为我们希望切换的普通用户
czh@VM-0-3-ubuntu:~$ pwd
/home/czh//切换成功


//普通用户切换为超级用户,有三种方法
①su -
czh@VM-0-3-ubuntu:~$ su -//输入su -
Password: //这里要输入登录超级用户的密码
root@VM-0-3-ubuntu:~# pwd
/root//切换成功

②su root
czh@VM-0-3-ubuntu:~$ pwd   
/home/czh
czh@VM-0-3-ubuntu:~$ su root//输入su root
Password: //这里要输入登录超级用户的密码
root@VM-0-3-ubuntu:/home/czh# pwd//最前面的root已经说明目前是root用户
/home/czh//这里虽然还是czh,但是已经是超级用户了,这是su root的原因

③su
czh@VM-0-3-ubuntu:~$ pwd
/home/czh
czh@VM-0-3-ubuntu:~$ su//输入su
Password: //这里输入登录超级用户的密码
root@VM-0-3-ubuntu:/home/czh# //最前面的root已经说明目前是超级用户了

为什么root账号切换为普通账号输的不是root的密码?

你想,要是输的是root密码,还能切换到其他普通用户的账号下,这不扯吗?切换为普通用户输的必然是普通用户的密码

3️⃣三、Linux文件中角色的问题

在文件角色分类中,共分为三类,分别是拥有者所属组other角色

就拿我经常访问的一个文件来说

cpp 复制代码
drwxrwxr-x 21 czh  czh   4096 Apr  1 19:30 code/


角色是有人来扮演的,与用户问题不冲突,互相补充

可能是root来扮演文件拥有者,czh来扮演文件的所属组,其他人来扮演文件的other角色;也有可能是其他方案,总之,角色是由用户来扮演的

你可能会发现,在 Linux 系统中,拥有者(Owner)和所属组(Group)经常是同一个人。既然如此,Linux 为什么要设计 "组" 这个概念?难道不能直接给多用户赋权吗?

这其实是为了解决 "协作效率权限隔离 的矛盾。

  • 极简场景(只有 Owner): 如果只有拥有者,那么每新增一个协作同事,你都得手动把他的UID 添加到文件的 ACL 列表里。如果项目有 10 个人,你要改 10 次权限,这简直是运维噩梦。
  • 组的智慧(Group): 所属组就像一个 项目徽章。你只需要把 10 个同事加入同一个 "开发组",然后把文件的所属组改成这个组。
  • 动态生效: 以后只要是这个组里的人,哪怕人员流动(离职 / 入职),只需要调整组的成员配置,文件权限根本不需要动。

4️⃣四、rwx 权限的具象化规则

4.1如何看各个角色的权限

再拿刚才的例子再说一遍

cpp 复制代码
drwxrwxr-x 21 czh  czh   4096 Apr  1 19:30 code/

讲了那么多,这些角色对文件的权限到底怎么看呢?一张图,让你秒懂

所以,各种角色对文件的权限一目了然,拥有者可以对文件进行rwx操作,所属组也可以对文件进行rxw操作,other可以对文件进行rx操作,没有w

4.2rwx权限解析

  • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录而言,具有浏览该目录信息的权限
  • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限(因为对于目录来说,目录的内容就是由文件组成的)
  • 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • -表示不具有该权限

细节一

假设一个权限是-rwxr--r--

拆下来

  • 拥有者:rwx
  • 所属组:r--
  • 其他人:r--

现在你是这个文件的拥有者 ,也是这个文件的所属组

linux会怎么判断?

  • 1.先看你是拥有者吗?
  • 2. ,把rxw赋予给你
  • 3.后面的组权限,其他权限,全都不看

再举一个反例

你不是拥有者 ,但在所属组

  • 1.先看你是不是拥有者,不是
  • 2.再看你是不是所属组,是
  • 3.把r--权限赋予给你
  • 4.其他人权限直接忽略

这就叫身份只验证一次,验证完就停

细节二:关于可执行

文件要被执行,需要满足什么条件

  • 文件本身就是一个可执行的文件,是一个真正可以执行的二进制文件
  • 文件本身拥有可执行权限x,哪怕你是一个可执行的文件,没有x,你可无法被执行

给x权限,不是能让你执行,而是当你想执行的时候,OS允许你执行

细节三:文件的拥有者,具有修改文件权限的能力(怎么修改后面会讲)

细节四:更改拥有者或所属组需要root或sudo

5️⃣五、关于文件权限的一些指令

chmod

功能 :设置文件的访问权限
格式 :chmod 参数 权限 文件名
常用选项

  • -R 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值得格式:

  • 用户表示符+/-=权限字符
    +:向权限范围增加权限代号所表示的权限
    -:向权限范围取消权限代号所表示的权限
    =:向权限范围赋予权限代号所表示的权限
    用户符号:
    u:拥有者
    g:所属组
    o:其他用户
    a:所有用户

示例

  • chmod u+w abc.txt:给abc.txt文件的拥有者添加w权限
  • chmod o-x abc.txt:给abc.txt文件的其他人添加x权限
  • chmod a=x abc.txt:所有角色对abc.txt只有x权限

三位8进制数字(每个角色的权限都由三个数字决定)

  • chmod 664 abc.txt:即drw- rw- -w-
  • chmod 640 abc.txt:即drw- -w- ---

chown

功能 :修改文件的拥有者(只有root用户才能改,你拥有者能改,不就相当于出事了把黑锅让别人背吗)
格式 :chown 参数 用户名 文件名
示例

  • chown czh:czh abc.txt:把 abc.txt 的拥有者改成 czh,所属组改成 czh
  • chown root abc.txt:只改拥有者为 root
  • chown :dev abc.txt:只改所属组为 dev
  • chown -R czh:czh code/:把 code/ 目录 + 里面所有文件/子目录,归属都改成 czh:czh

chgrp

功能 :修改文件的拥有者
格式 :chgrp 参数 用户组名 文件名
常用选项 :- R 递归修改文件或目录的所属组
实例

  • chgrp czh /abc/hello.txt

umask(重要)

在我们创建文件时,系统总是会给这个文件一个默认的权限值,比如新建文件一般是644rw--w--w-,新建目录一般是755rwxr-xr-x
为什么呢? 一方面太麻烦,效率极低;另一方面,如果权限完全开放,任何人都能读写执行,服务器安全直接等于裸奔。

所以,linux必须给新建目录、文件一套默认权限

  • 既能保证普通用户正常使用
  • 又能屏蔽掉默认不必要的权限,保证基础安全

所以

  • 目录默认是要进入的,所以要有x权限,所以默认给的是755
  • 文件默认不能有执行文件,也就是666

自此umask就诞生了,假设我们的umask的值设置为002 时,新建文件由最初的666-002 就为664

实例

  • umask 002设置掩码值为002,所以一般新建文件权限为666-002=664,目录的话为777-002=775
  • umask 查看掩码值

file

功能说明 :辨识文件类型
语法file [选项] 文件或目录...
常用选项

  • -c:详细显示指令执行过程,便于排错或分析程序执行的情形
  • -z:尝试去解读压缩文件的内容

sudo

前面我们讲了umask,也讲了文件的权限,我们就可以看到,其实普通用户的权限非常有限,也就是说普通用户能干的事很少,系统默认不让你干 ,但实际使用linux时,我们又经常需要做一些管理员才能做的事 ,总不能每次都切换到root用户吧?于是 Linux 提供了一个非常经典、几乎必用的权限机制:让普通用户临时借一点 root 权限来执行命令,用完就收回。

所以也就有了sudo 命令
使用sudo分配权限

(1)修改/etc/sudoers文件分配文件

cpp 复制代码
//chmod 740 /etc/sudoers
// vim /etc/sudoers
//将自己的用户名加入到sudoers的用户名表当中,这里问ai然后操作即可

(2)使用sudo调用授权命令

新建一个目录,普通用户不能在/新建目录,但我们可以使用sudo

cpp 复制代码
czh@VM-0-3-ubuntu:~$ mkdir /dir

会报错,权限不够

加sudo就可以

cpp 复制代码
czh@VM-0-3-ubuntu:~$ sudo mkdir /dir
[sudo] password for czh:
//这里就要输入你用户名的密码,输入成功后,会有几分钟的提权时间,你可以不用sudo然后在/目录新建

为什么输入的是用户名的密码?

  • sudo的初衷就是允许信任的普通用户临时提权
  • 系统要确认:你确实是这个用户本人
  • 所以验证的是你自己账号的密码

总结

希望通过这篇文章,大家对于文件权限有了新的认识。

相关推荐
HLC++12 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室13 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
groundhappy15 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
通信小小昕16 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫17 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式
栩栩云生17 小时前
AI 写代码犯的错,早被写进了错题集
linux·安全·ai编程
imc.1119 小时前
linux基础IO
linux·运维·服务器
BelongPanda21 小时前
Linux Nginx 纯手动 Let‘s Encrypt 泛域名证书配置教程
linux·nginx
酷可达拉斯21 小时前
Linux操作系统-shell编程(0)
linux·运维·服务器·python·云计算
2301_7779983421 小时前
Linux中断机制:操作系统如何高效运行
linux·运维·服务器