SCENE / 001
全部文章NOTE / 学习笔记

Linux权限管理:用户、文件与目录

记录Shell、用户身份、rwx权限、chmod、chown、chgrp、umask和粘滞位的笔记

#Linux#学习笔记#文件管理#服务器#系统管理
本文目录
  1. Shell是用户与内核(Kernel)中间层
  2. 用户身份和命令提示符
  3. 用ls -l查看权限
  4. 文件和目录里的rwx
  5. 八进制权限值
  6. 用chmod修改访问权限
  7. 所有者和所属组
  8. umask决定新文件的默认权限
  9. 目录权限和粘滞位
  10. 小练习
  11. 小结
  12. 来源
阅读记录0%
0%

这次学习Linux权限管理

权限并不只影响文件能否打开,也会影响目录能否进入、脚本能否执行、服务能否读取配置,以及多人共用目录时能否删除彼此的文件

Shell是用户与内核(Kernel)中间层

Linux严格意义上讲是一个操作系统的核心(Kernel),但一般用户不能直接使用Kernel,而是通过Kernel的“外壳”程序,即Shell,与Kernel进行通信

用户输入命令
    |
Shell解析命令
    |
Kernel执行系统调用
    |
文件、进程、网络和硬件

Shell会解析命令、启动程序并展示结果,权限检查主要发生在内核处理文件、目录和进程请求的过程中,所以同一条命令由不同用户执行,结果可能不同

用户身份和命令提示符

Linux中常见的是普通用户和root用户,root拥有很高的管理权限,普通用户只能在被授予的范围内操作

终端提示符通常也能提示当前身份:

  • 普通用户常见提示符是$
  • root用户常见提示符是#

先用下面两条命令确认当前身份和所属组:

whoami
id

whoami只显示当前用户名,id还会显示用户ID、主组和附加组,判断权限问题时,组信息经常是关键线索

切换用户时可以使用susudo

su - user
sudo -u user command
写法 作用
su - user 切换到user,并按登录用户的方式加载其环境
sudo -u user command user的身份执行一条命令

-不是每条命令都有的固定参数,它的具体作用取决于命令本身,遇到不确定的写法,可以运行man 命令名查看手册

ls -l查看权限

ls -l会以详细列表显示文件信息,例如:

-rw-r----- 1 user dev 128 Aug 27 20:00 note.txt

第一位表示文件类型,后面的九位每三位一组,依次对应文件所有者、所属组和其他用户的权限

第一位 类型
- 普通文件
d 目录
l 软链接
c 字符设备
b 块设备
p 管道
s 套接字

上例中的rw-r-----可以拆成三组:

用户范围 权限 含义
所有者u rw- 可以读和写
所属组g r-- 只能读
其他用户o --- 没有权限

ls -l里的-l表示详细列表格式,ls -a里的-a表示显示隐藏文件,所以ls -la会同时显示详细信息和隐藏文件

文件和目录里的rwx

rwx在文件与目录上有不同含义

权限 对普通文件 对目录
r 读取文件内容 列出目录中的名称
w 修改文件内容 配合x创建、删除或重命名目录项
x 执行文件 进入目录,并访问已知名称的目录项

目录的x很重要,没有x时,即使知道文件名,也无法正常进入目录或访问其中的文件

八进制权限值

每种基本权限都有对应数值:

权限 数值
r 4
w 2
x 1

把同一类用户的权限数值相加,就能得到一个八进制位:

数值 权限
7 rwx
6 rw-
5 r-x
4 r--
0 ---

例如755表示所有者拥有rwx权限,所属组和其他用户拥有r-x权限,640表示所有者可以读写,所属组只能读,其他用户没有权限

chmod修改访问权限

chmod用于修改文件或目录的访问权限,常见写法有符号方式和数字方式

chmod u+x deploy.sh
chmod go-w config.env
chmod a=r readme.txt
chmod 640 config.env

符号方式可以拆成三部分:用户范围、操作符和权限

部分 可用值 作用
用户范围 ugoa 所有者、所属组、其他用户、全部用户
操作符 +-= 增加、移除、精确设置权限
权限 rwx 读、写、执行

chmod u+x deploy.sh表示给所有者增加执行权限,chmod go-w config.env表示移除所属组和其他用户的写权限

数字方式适合一次明确写出三组权限,例如chmod 640 config.env

如果确实需要递归处理目录,可以使用-R

chmod -R u=rwX,go=rX site/
写法 作用
-R 递归处理指定目录及其内容
X 只给目录和原本已经可执行的文件添加执行权限

大写X比直接使用x更适合批量处理目录,它不会把普通文本文件误设为可执行,递归修改前应先在测试目录中查看结果,避免影响大量文件

所有者和所属组

除了权限位,文件的所有者和所属组也会影响访问结果,chown修改所有者,chgrp修改所属组

sudo chown user:dev note.txt
sudo chgrp dev note.txt
sudo chown -R user:dev project/
写法 作用
sudo 以已获授权的高权限身份执行命令
user:dev 把所有者设为user,所属组设为dev
-R 递归处理目录和目录中的内容

修改所有者通常需要管理员权限,执行前应先用ls -l确认当前所有者和所属组,避免把服务文件交给错误的用户

umask决定新文件的默认权限

新建普通文件通常以666作为权限上限,新建目录通常以777作为权限上限,普通文件默认没有x,避免新建的文本文件直接具备执行权限

umask是创建对象时要屏蔽的权限位,可以先查看当前值:

umask
umask 022
掩码 新建普通文件 新建目录
022 644 755
002 664 775

可以把它理解为创建权限上限与掩码进行按位处理,022会移除所属组和其他用户的写权限,因此常见结果是文件644和目录755

目录权限和粘滞位

目录中的rwx决定能否查看名称、创建或删除条目、进入目录,很多“文件权限看起来没问题却无法访问”的情况,原因在于上级目录缺少x

共享目录还需要考虑删除权限,给目录设置粘滞位后,目录中的文件通常只能由文件所有者、目录所有者或root删除和重命名

mkdir -p permission-lab/share
chmod 1777 permission-lab/share
ls -ld permission-lab/share
写法 作用
mkdir -p 上级目录不存在时一并创建,目标目录已存在时不报错
1777 首位1表示粘滞位,后面的777表示所有用户都有读、写、执行权限
ls -ld -l显示详细信息,-d显示目录本身而不列出其内容

/tmp就是常见的粘滞位目录,它允许多个用户创建临时文件,同时限制用户随意删除其他人的文件

小练习

可以在自己的工作目录中创建一个小实验,不需要改动系统目录:

mkdir -p permission-lab
touch permission-lab/private.txt
chmod 640 permission-lab/private.txt
mkdir permission-lab/upload
chmod 1777 permission-lab/upload
ls -ld permission-lab permission-lab/upload
ls -l permission-lab/private.txt

这个练习会创建一个仅供所有者读写的文件,以及一个带粘滞位的共享目录,查看ls -l输出时,重点观察权限字符、所有者、所属组和目录末尾的t

小结

Linux权限管理围绕用户身份、所属组、文件类型和rwx权限展开,chmod负责修改权限位,chownchgrp负责调整所有者与所属组,umask影响新建对象的默认权限,粘滞位解决共享目录中的删除控制问题

遇到权限问题时,可以按顺序检查当前用户、文件所有者、所属组、权限位和上级目录的x权限,把这些信息拆开看,排查会更直接

来源

本文为个人学习笔记,根据lvy-的《深入解析Linux权限管理:从基本原理到应用》提炼并重新组织,保留原文链接供进一步阅读

READING / FOCUSOFF

留言

评论区暂未开放;可先通过 RSS 或「关于」页联系。

站内搜索

输入关键词开始搜索