码上问学问代码之理,学编程之道
教材同步›项目 4
教材同步 · 叶廷东《Linux 操作系统管理(第 2 版)》航空工业出版社 · “十四五”国家规划教材

项目4 Linux 文件管理与用户权限

Linux 是多用户系统,先管『人』再管『权』。用户组 useradd·groupadd、权限 chmod·chown·umask、精细授权 ACL,以及绕不开的 vim 编辑器。

任务 4.1

文件管理

查找、归档与文件类型
4.1.1文件操作回顾

项目 3 已学的 touch / cp / mv / rm / ln / cat 这里继续用;重点是查找与类型判断。

4.1.2按条件查找 find
find★ 必会

沿目录树查找文件,条件可叠加(名字/类型/大小/时间)。

随身参数卡 · find 常用条件
查找条件
  • -name '*.conf' 按文件名(支持通配)
  • -type f/d 只找文件 / 目录
  • -size +10M 大于 10MB
  • -mtime -7 7 天内修改过
  • -user root 属主是 root
对结果动作
  • -exec 命令 {} \; 逐个处理
  • -exec 命令 {} + 批量处理(更快)
  • | xargs rm 交给 xargs
bash
find /etc -name '*.conf'
find / -type f -size +100M 2>/dev/null
find /var/log -mtime -1 -exec ls -lh {} \;
/etc/resolv.conf /etc/httpd/conf/httpd.conf (找出大于 100M 的文件) (列出 1 天内改过的日志)
4.1.3文件类型 file

file 文件名 看真实类型(文本 / 二进制 / 压缩包),避免被扩展名骗。

bash
file /bin/ls
file index.html
/bin/ls: ELF 64-bit LSB executable index.html: HTML document, ASCII text
任务 4.2

用户与组管理

Linux 是多用户系统,权限先管人
4.2.1用户与组的概念

每个用户有唯一 UID,属一个或多个 GID(组)。关键信息存 /etc/passwd(账号)、/etc/shadow(密码,仅 root 读)、/etc/group(组)。

4.2.2用户管理命令
useradd / passwd★ 必会

建用户与设密码,是服务器运维的日常。

随身参数卡 · 建用户与设密
useradd 选项
  • -m 建家目录 /home/用户
  • -s /bin/bash 指定登录 Shell
  • -u 1001 指定 UID
  • -g 组 主组 · -G 组1,组2 附加组
  • -d /data/u 指定家目录位置
passwd
  • passwd 用户 root 给用户设密
  • passwd -l 用户 锁账号
  • passwd -u 用户 解锁
  • passwd -d 用户 清空密码
usermod / userdel★ 必会

改用户属性与删用户。

随身参数卡 · 改与删
usermod
  • -aG 组 用户 追加附加组(务必带 -a)
  • -l 新名 旧名 改名
  • -L / -U 锁 / 解锁
  • -d 目录 -m 改家目录并迁移
userdel
  • userdel 用户 删账号(留家目录)
  • userdel -r 用户 连家目录一起删
  • id 用户 查看 UID/GID
bash
useradd -m -s /bin/bash -G wheel zhang
passwd zhang
usermod -aG docker zhang
userdel -r zhang
(创建 zhang 并加入 wheel 组) Changing password for user zhang. (zhang 再获 docker 组权限) (删除 zhang 及家目录)
4.2.3组管理命令
groupadd / gpasswd★ 必会

建组与批量管组成员。

随身参数卡 · 组管理
groupadd
  • groupadd 组名 建组
  • groupadd -g 2000 组 指定 GID
gpasswd
  • gpasswd -a 用户 组 加成员
  • gpasswd -d 用户 组 移除
  • gpasswd -M a,b,c 组 设全部成员
  • groupdel 组 删空组
bash
groupadd dev
gpasswd -a zhang dev
gpasswd -M zhang,li dev
(建 dev 组) (zhang 加入 dev) (dev 组成员设为 zhang,li)
任务 4.3

文件权限管理

rwx 三三得九,755 是门禁卡
4.3.1权限模型

每文件有 属主(u) / 属组(g) / 其他(o) 三类身份,每类有 r 读(4) / w 写(2) / x 执行(1) 三种权。rwxr-xr-- = 754。目录的 x 表示『能否进入』。

4.3.2修改权限与属主
chmod / chown★ 必会

改权限(数字法最常用)与改属主属组。

随身参数卡 · chmod / chown
chmod 两种写法
  • chmod 755 f 数字法:u=rwx g=rx o=rx
  • chmod u+x f 符号法:给属主加执行
  • chmod g-w f 去掉属组写权
  • chmod -R 755 dir 递归改目录
chown
  • chown 用户 文件 改属主
  • chown 用户:组 文件 属主属组一起改
  • chown -R www:www /var/www 递归
  • chgrp 组 文件 只改属组
bash
chmod 644 f.txt
chmod +x deploy.sh
chown -R www:www /var/www
(本人读写、他人只读) (脚本变为可执行) (站点目录交给 www 用户)
4.3.3默认权限掩码 umask

umask 决定新建文件的默认权限:文件 = 666 - umask,目录 = 777 - umask。常见 umask 022 → 文件 644、目录 755。

bash
umask 022
touch new.txt && ls -l new.txt
-rw-r--r-- 1 root root 0 10月 19 10:00 new.txt
4.3.4ACL 访问控制(精细授权)

当『某用户 / 某组』要单独授权、又不想改属组时用 ACL。setfacl 设、getfacl 查。

setfacl / getfacl☆ 理解

给单个用户/组单独加权限,突破 ugo 三类限制。

随身参数卡 · ACL
setfacl
  • -m u:zhang:rwx 文件 给用户 zhang 单独 rwx
  • -m g:dev:rx 目录 给 dev 组单独 rx
  • -R 递归设置
  • -b 文件 清除全部 ACL
getfacl
  • getfacl 文件 看 ACL 明细
  • 权限位后出现 . 表示有 ACL
bash
setfacl -m u:zhang:rwx /data/share
getfacl /data/share
(zhang 对 /data/share 有 rwx) user:zhang:rwx (getfacl 显示出该条 ACL)
任务 4.4

vi / vim 编辑器

不会 vim,就改不了配置
4.4.1三种模式

命令模式(打开即进入,移动/删除)、插入模式(按 i/a/o 进入,才能打字)、末行模式(按 : 进入,保存/退出/替换)。Esc 随时回命令模式。

4.4.2常用操作
vim★ 必会

服务器上改配置几乎全靠它;记住『先 Esc 回命令模式』。

随身参数卡 · vim 速查
进入 / 移动
  • i 光标前插 · a 后插 · o 下行新行
  • h j k l 左 下 上 右
  • 0 / $ 行首 / 行尾 · gg / G 首行 / 末行
编辑 / 保存
  • x 删字符 · dd 删行 · yy 复制 · p 粘贴
  • :w 保存 · :q 退出 · :wq 保存退出
  • :q! 强退不存 · :s/旧/新/g 替换
  • /关键字 向下搜 · n 下一个
bash
vim /etc/hostname
# 进入后按 i 改内容,Esc,再敲 :wq 回车保存
(保存并退出,主机名已改)

拓展训练

教材每项目末尾 · 上机可重做取最高分
1
新建用户 stu01(带家目录、可登录),设密码,再把它加入 wheel 组以便用 sudo。
2
把 /data 目录属主改为 stu01:stu01 并递归;用 chmod 750 /data 让其他人不可进。
3
用 umask 077 后新建文件,验证其默认权限变成了 600。
4
用 setfacl -m u:stu02:r-x /data 单独给 stu02 读进权,再用 getfacl 查看。

用户/权限是服务器安全的地基,项目 7~12 配服务时每条都要回到『谁有权、权限对不对』。