有关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的初衷就是允许信任的普通用户临时提权
  • 系统要确认:你确实是这个用户本人
  • 所以验证的是你自己账号的密码

总结

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

相关推荐
发发就是发2 小时前
顺序锁(Seqlock)与RCU机制:当读写锁遇上性能瓶颈
java·linux·服务器·开发语言·jvm·驱动开发
_Emma_2 小时前
【Linux media】Linux Media Driver Framework
linux·服务器·视频
萝卜小白3 小时前
算法实习学习记录-day01
linux·服务器
cyber_两只龙宝3 小时前
【Oracle】Oracle之SQL中的单行函数
linux·运维·数据库·sql·云原生·oracle
overmind3 小时前
oeasy Python 120[专业选修]列表_直接赋值_浅拷贝_shallowcopy_深拷贝_deepcopy
linux·windows·python
小宋0013 小时前
Ubuntu Terminator(多开并行终端工具)
linux·运维·ubuntu
小尔¥3 小时前
keepalived高可用与负载均衡
linux·运维·负载均衡
李李李li4 小时前
vmware各种版本下载链接-github
linux·ubuntu·开源软件
残 风4 小时前
linux(Xshell、Xterm)如何搭建隧道间接访问目标服务网站教程
linux·运维·php·信息与通信