【Linux】Linux权限

📝前言:

上篇文章我们对Linux的基本指令进行了收尾,这篇文章我们来理解一下Linux的权限

🎬个人简介:努力学习ing

📋本专栏:Linux

🎀CSDN主页 愚润求学

🌄其他专栏:C++学习笔记,C语言入门基础,python入门基础,C++刷题专栏


Linux权限

  • 一,shell命令介绍
  • 二,Linux权限
    • [1. Linux下的用户](#1. Linux下的用户)
    • [2. 命令su](#2. 命令su)
    • [3. Linux权限管理](#3. Linux权限管理)
      • [3.1. 文件访问者](#3.1. 文件访问者)
    • [4. 修改权限](#4. 修改权限)
      • [1. 修改目标属性](#1. 修改目标属性)
      • [2. 修改拥有者](#2. 修改拥有者)
    • [5. 缺省权限](#5. 缺省权限)
      • umask
      • [t 粘滞位](#t 粘滞位)

一,shell命令介绍

在了解Linux操作权限之前,我们先补充一个知识点,shell------命令行解释器。对于Linux而言,Linux是操作系统,它是内核,用户无法直接对操作系统进行操作,于是就有了kernel的"外壳"程序:shell。
shell的作用:

  • 将使⽤者的命令翻译给核⼼(kernel)处理。
  • 同时,将核⼼的处理结果翻译给使⽤者。

二,Linux权限

权限 = 角色 + 目标属性,修改权限,起始就是该角色,或者改目标属性。

1. Linux下的用户

Linux下分为两种用户:root用户和普通用户

  • root用户具有超极权限,不受权限约束,做任何事情不受限制
  • 普通用户受到权限的约束
  • 超级⽤⼾的命令提⽰符是#,普通⽤⼾的命令提⽰符是$

只有具有对应的权限才可以进行某些操作,比如要在usr/bin目录下安装程序,这时候就需要root权限。

如果普通用户没有root权限,可以通过sudo来进行短暂提升权限。
sudo的提权是基于root用户设置的"白名单",在白名单内的用户才能够提权。

如tr用户未在白名单里面:


2. 命令su

有su 用户名 和 su - 用户名两种方式,su切换时,当前的目录不变,用su-切换时,相当于用另一个用户重新登录。

  • 对于root切换到其他用户,不需要输入密码
  • 其他用户切换到root,需要输入密码(输入密码的时候不回显)

如root用户切换到用户tr(注意看目录还是/home):

tr切换到root(注意看目录变成了~家目录):

创建用户:使用adduser 用户名,这条命令会自动在/home目录下生成用户目录


3. Linux权限管理

3.1. 文件访问者

  • ⽂件和⽂件⽬录的所有者:u---User
  • 件和⽂件⽬录的所有者所在的组的用户:g---Group
  • 其它用户:o---Others

u和g以外的就是o,

第一个root代表拥有者,第二个root代表所属组

我们再看:第一个-代表文件属性,后面每三个字符为一组,代表对应的访问者的权限

每个字符都是两态的,即表示允许(1)或拒绝(0),即:r或 - 。

且顺序必须是rwx,r:读权限,w写权限,x可执行权限(有了可执行权限并不代表文件就可执行 ,还要求文件是可执行文件才可执行)。

因此某一用户的权限也可以用一个8进制的数字来表示:如6代表:110,即:rw-。

对于目录:

  • r:是否能查看目录内容和目录里面的文件 ,如ls,以及:就算内部文件有r权限,但是父目录没有r,则也看不了这个内部文件
  • w:是否能在该目录创建和删除文件 ,一个文件能否被删除和文件本身权限无关,与该文件所在的目录的w权限有关。
  • x:是否能够进入这个目录

默认情况下,如果要新建一个目录,则rwx权限都要有


4. 修改权限

1. 修改目标属性

命令:chmod [参数] 权限 ⽂件名
说明:只有⽂件的拥有者和root才可以改变⽂件的权限

常⽤选项:

  • R 递归修改⽬录⽂件的权限

chmod命令权限值的格式:
用户表示符 +/-/= 权限字符

权限字符 作用
+ 增加
- 删除
= 赋予
用户符号 含义
u 拥有者
g 所属组
o 其他用户
a 所有用户

实例:

  • chmod u+w abc.txt,修改单人单权限
  • chmod o-rwx abc.txt,修改单人多权限
  • chmod u+x, g-rw abc.txt,修改多人多权限

三位8进制数字:

  • chmod 664 abc.txt,(即:拥有者:rw-,所属组:rw-,其他人:r--)
  • chmod 640 abc.txt

当我们访问一个文件时,如果没有对应的权限,系统就是拒绝我们的访问

centos下,权限只确定一次,且确定权限的顺序是:拥有者→所属组→其他用户(即先判断是不是拥有者,如果是则按拥有者的权限,如果不是就再判断是不是所属组,以此类推)


2. 修改拥有者

chown

chown命令:

格式:chown [参数] 用户名[:所属组] ⽂件名

前提:必须有root级别的权限才可以修改拥有者(root用户,或者sudo提权)

如,普通用户无法把文件拥有者改成别人:

root用户:


chgrp

chgrp命令:

功能:修改⽂件或⽬录的所属组(也需要root权限)

格式:chgrp [参数] 用户组名 ⽂件名

常⽤选项:-R:递归修改⽂件或⽬录的所属组


5. 缺省权限

如图,创建一个文件的时候,系统自动会给不同角色赋予默认的权限 ,如这里是664,这就是缺省权限。

系统在创建的时候,默认权限分别是:文件:666,目录:777


那为什么这里是664呢?

这就要谈到umask

umask

umask是系统中存在的权限掩码 ,即:凡是umask中出现的权限,最终权限中都不能出现。

umask四位数字的构成和含义

umask 显示为四位八进制数,其中第一位表示特殊权限位,后三位分别对应所有者、所属组和其他用户的权限掩码。

  • 特殊权限位(第一位) :这一位用于设置特殊权限,也就是 setuid(4)、setgid(2)和 sticky(1)。例如,若 umask 为 0022,第一位的 0 表示不设置特殊权限
  • 所有者权限掩码(第二位) :对应所有者的权限掩码,在 0022 中,第二位的 0 表示不对所有者的默认权限进行屏蔽。
  • 所属组权限掩码(第三位):对应所属组的权限掩码,0022中的第三位 2 表示屏蔽所属组的写权限。
  • 其他用户权限掩码(第四位):对应其他用户的权限掩码,0022 中的第四位 2 表示屏蔽其他用户的写权限。

具体计算方法:最终权限 = 起始权限 & (~umask) ,其实也是起始权限 - 对应位umask

比如对于所属组:起始权限:111,umask是010,则最终权限:111 & 101 = 101

为什么要有umask呢?

  1. umask可以去除一些不必要的权限,满足需求和保证安全
  2. 配置umask,可以控制新生成的文件的默认权限,满足更多用户的需求

umask也可以修改:


Linux的多用户之间的"隔离"也是通过这个实现的 。当我们新建用户的时候,会在/home目录下创建独立的用户文件,这个文件默认对自身开放所有权限,但是对其他非root用户的权限都禁止。


t 粘滞位

对于共享类目录 (即other都有rwx权限),想让other都能新建文件,但是非文件的拥有者无法删除别人的文件(即使有该目录的w权限),如何实现呢?

方法:给目录设置一个"粘滞位"t (在删文件时对权限做再判断)

语法:chmod o+t 目录名

当⼀个⽬录设置了"粘滞位",则该⽬录下的⽂件只能由

  1. 超级管理员删除
  2. 该⽬录的所有者删除
  3. 该⽂件的所有者删除

如,根目录下的tmp就自带t


🌈我的分享也就到此结束啦🌈

要是我的分享也能对你的学习起到帮助,那简直是太酷啦!

若有不足,还请大家多多指正,我们一起学习交流!

📢公主,王子:点赞👍→收藏⭐→关注🔍

感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

相关推荐
律宏阔3 小时前
WSL Docker 端口明明空闲,但就是绑不上端口
linux·windows
律宏阔3 小时前
WSL 突然断网,无法 ping 内网或外网
linux·windows
穷人小水滴3 小时前
用容器编译 VirtualBox 虚拟机软件 (ArchLinux, podman)
linux·容器·virtualbox
乱码三千4 小时前
如何优雅地直连无公网 IP 的远程 GPU 服务器
linux·人工智能·程序员
yunwei374 小时前
使用 eBPF 跟踪 Nginx 请求
linux·后端·性能优化
yunwei374 小时前
使用 eBPF 跟踪 MySQL 查询
linux·后端·性能优化
yunwei374 小时前
eBPF 示例教程:使用 XDP 捕获 TCP 信息
linux·后端·性能优化
GeW4 小时前
制造业高端化,为什么必须重估Linux和数据库?
linux
百万蹄蹄向前冲4 小时前
双端同步!云服务器装最新Node.js v26.10全过程追踪
服务器·人工智能·node.js
GeW4 小时前
工业场景中的Linux与数据库选型:高端化转型的技术底座
linux