Linux权限

目录

  • 一、核心基础
    • [1. Linux用户分类](#1. Linux用户分类)
    • [2. 权限核心公式](#2. 权限核心公式)
    • [3. 用户切换命令](#3. 用户切换命令)
  • 二、文件/目录权限详解
    • [1. r/w/x 权限的本质区别](#1. r/w/x 权限的本质区别)
    • [2. 权限的表示方法](#2. 权限的表示方法)
      • [2.1 字符版](#2.1 字符版)
      • [2.2 数字版](#2.2 数字版)
    • 3.实操命令:权限怎么改?
      • [1. chmod:修改权限(最常用)](#1. chmod:修改权限(最常用))
      • [2. chown:修改拥有者](#2. chown:修改拥有者)
      • [3. chgrp:修改所属组](#3. chgrp:修改所属组)
    • [4. 权限掩码umask](#4. 权限掩码umask)
    • [5. Linux中如何创建多用户共享文件](#5. Linux中如何创建多用户共享文件)

一、核心基础

1. Linux用户分类

Linux中分为两类用户:超级用户 root 和普通用户,命令提示符区别(root # / 普通用户 $)

2. 权限核心公式

权限 = 人(u/g/o) + 事(事务属性/操作权限)

访问者有三类:拥有者(u -- user)、所属组(g -- group)、其他(o -- other)

操作:读(r)、写(w) 、x -- 对于普通文件而言是执行权限,对于目录文件而言是进入权限

3. 用户切换命令

su [用户名]

  1. 普通用户切换到root用户 -- su root (其中root可省略)

    [zhangsan@localhost ~] whoami zhangsan [zhangsan@localhost ~] su
    Password: 这里的密码要输入root的密码
    [root@localhost zhangsan]# whoami
    root

  2. 从root切换到普通用户 -- 无需输入普通用户的密码,直接切换,root是不受约束的

    [root@localhost zhangsan]# whoami
    root
    [root@localhost zhangsan]# su zhangsan
    [zhangsan@localhost ~]$ whoami
    zhangsan

二、文件/目录权限详解

1. r/w/x 权限的本质区别

  • 对于文件的含义:读内容/改内容/运行程序
  • 对于目录的含义:查看指定目录内的文件信息/在目录内新建删除或修改文件/进入目录

思考:为什么普通用户能删除别人的文件甚至是root的,这合理吗?

合理的,删除文件的权限与该文件本身没有关系,而是和他所处的目录文件有关,先进入(x)、再删除(w)

2. 权限的表示方法

2.1 字符版

用 ls -l 查看文件权限,格式是 - rwx r-x r- -,拆成 3 段对应 u/g/o:

复制代码
示例:- rwx r-x ---
文件类型  拥有者(u)  所属组(g)  其他人(o)
-         rwx        r-x        ---

红色框的位置是文件类型,Linux通过这里来区分文件类型,而不是后缀,常见的有 - 表示普通文件,d表示目录文件,后面33为一组分别表示拥有者、所属组、其他

2.2 数字版

每个人都有三种权限位 - - -分别对应rwx,当有字符显示出现时就表示拥有权限,可用二进制1表示,- 表示无此权限用二进制0表示,则使用二进制位表示- - -为 000,rwx 为111

组合 字符权限 数字权限 含义
r - - 4 4 只读
r w - 4+2 6 读写
r - x 4+1 5 读+执行
r w x 4+2+1 7 读写执行
- - - 0 0 无权限

示例:rwxr-xr-- → 754;rw-r--r-- → 644 八进制表示

3.实操命令:权限怎么改?

1. chmod:修改权限(最常用)

两种写法:字符修改+数字修改

  1. 字符修改
    chmod [u/g/o/a] [+/-/=] [r/w/x] 文件名

示例:

复制代码
chmod u+x test.txt  # 给拥有者加执行权限
chmod g-w file.txt  # 给所属组减写权限
chmod a=rwx dir     # 给所有人设置读写执行权限 a-all所有人
chmod o=rw file     # 给其他人只设置读写权限
  1. 数字修改 -- 快速批量化设置
    chmod 数字权限 文件名

示例:

复制代码
chmod 755 file1.txt  # 拥有者rwx,所属组r-x,其他人r-x
chmod 644 file2.txt  # 拥有者rw-,所属组r--,其他人r--
chmod 777 dir        # 所有人读写执行(慎用!)

2. chown:修改拥有者

chown 用户名 文件名
chown name1:name2 filename 修改文件的拥有者和所属组

复制代码
chown zhangsan file.txt  # 把file.txt拥有者改成zhangsan
chown zhangsan:users dir # 把dir拥有者改成zhangsan,所属组改成users

tips:需要注意的是普通用户不能直接改拥有者,咱也不能什么垃圾都给别人,是不是,但是可以使用指令提权sudo或者切换root直接强制给

3. chgrp:修改所属组

chgrp 组名 文件名

复制代码
chgrp zhangsan dir # 把文件dir的所属组改成zhangsan组

4. 权限掩码umask


5. Linux中如何创建多用户共享文件

Linux上最简单、最临时的一种 "共享" 方式 --- 实现本机多用户之间的共享文件

/tmp 为什么能用来做 "共享" ?

  1. /tmp是全局临时目录,默认权限rwxrwxrwx
  2. 所有用户都能读、写、创建文件/文件夹
  3. 所以你在/tmp目录下创建文件,本机其他用户可直接访问

当我在整理过程中发现了一个问题:不是说我进不了其他用户的家目录吗?为什么我现在进来了?

为什么会出现上述这种情况?

核心原因是su命令默认不切换工作目录,导致出现了 "能进入目录,但无实际权限" 的状态

Linux的目录权限校验逻辑是:

  • 进入目录(cd操作):需要目的的执行权限(x)
  • 列出目录的内容(ls/ll操作):需要目录的读权限(r)
    上述操作的关键就是su继承了当前目录,跳过了cd的校验,但是在执行ll时是切实自己操作的,触发了权限校验( r )

除了上述我们所了解到的su直接切换到root身份执行 "高级指令" 以外,还要一个指令提权的操作sudo
sudo [指令] 对该指令进行提权,让该指令形同root执行

复制代码
[zhangsan@localhost ~]$ sudo mkdir dir1  
[sudo] zhangsan 的密码:
zhangsan 不在 sudoers 文件中。此事将被报告。

我们发现zhangsan无法执行sudo操作,zhangsan 为什么不能执行?

看到执行的报错原因 -- zhangsan不在sudoers文件中,所以没有sudo的权限

  • sudo是授权普通用户临时用root权限的命令
  • 只有在/etc/sudoers名单里面的用户,才能用sudo,否则任何普通用户都能使用指令提权的话,那权限约束岂不是形同虚设

等后续我们将了vim的使用之后,我们再补充如何在/etc/sudoers文件中添加用户,使其拥有sudo提权的权限,sudo提权还有一个好处就是可以追溯该指令是谁执行的

相关推荐
张3232 小时前
Ansible实施任务控制
linux·ansible
卵男(章鱼)2 小时前
系统终端命令对比大全(Linux发行/macOS/Windows)
linux·运维·服务器·windows·macos
草明2 小时前
Linux主流发行版全面修复Spectre/Meltdown后续漏洞
linux·运维·服务器
君生我老2 小时前
C++ 红黑树
c++
旖-旎2 小时前
深搜(二叉树剪枝)(3)
数据结构·c++·算法·力扣·剪枝·递归
HABuo2 小时前
【linux网络(一)】初识网络, 理解协议&四层网络模型&网络传输流程
linux·运维·服务器·网络·c++·ubuntu·centos
流年如夢2 小时前
结构体:定义、使用与内存布局
c语言·开发语言·数据结构·c++·算法
SNOWPIAOP2 小时前
从MAC电脑复制qwen3.5:4b 的OLLAMA模型到LINUX电脑实践
linux·运维·macos·manifest·ollama·blobs
cui_ruicheng2 小时前
Linux文件系统(三):VFS 结构与软硬链接详解
linux·运维·服务器