Linux 用户、用户组、文件权限、文件查找

3 - linux 用户、用户组、文件权限、文件查找

概述

在 Linux 操作系统中,用户与权限管理是系统安全和稳定运行的核心环节。Linux 是典型的多用户操作系统,每个使用系统的人都需要拥有独立的用户账户,系统通过用户 ID(UID)来唯一标识不同用户。

用户分类

  • 超级用户(root) :UID 固定为 0,拥有系统的最高权限,可执行任何操作,包括修改系统核心配置、删除关键文件等。在日常操作中应尽量避免使用 root 账户,以降低误操作风险。
  • 系统用户:通常 UID 范围在 1-999(不同 Linux 发行版可能略有差异),这类用户并非为实际操作人员创建,而是用于运行系统服务(如 Apache、MySQL 等)。系统用户一般没有登录权限,其存在是为了保证服务运行的独立性和安全性。
  • 普通用户:UID 从 1000 开始,由管理员创建,用于日常工作。普通用户的权限受到严格限制,仅能在授权范围内操作文件和执行命令。

用户

1. 创建普通用户

创建普通用户使用useradd命令,默认会分配 1000 及以上的 UID,同时创建对应的家目录和默认 shell。

  • -m:自动创建用户的家目录(/home/stark),如果不添加此参数,家目录不会自动创建。
  • -s /bin/bash:指定用户的默认 shell 为 bash,允许用户登录系统后使用 bash 交互环境。
bash 复制代码
useradd [选项] 用户名

# 示例 1:创建用户并自动创建家目录
useradd -m newuser          # 创建 newuser 并生成 /home/newuser

# 示例 2:指定家目录和 shell
useradd -m -d /data/user1 -s /bin/bash user1  # 家目录为 /data/user1,shell 为 bash

# 示例 3:指定初始组和附加组
useradd -m -g developers -G sudo,adm user2  # 初始组为 developers,附加组为 sudo 和 adm

#查看系统中有多少用户
cut -d: -f1 /etc/passwd

2、创建系统用户

系统用户主要用于运行服务,通常不需要登录权限,因此创建时会指定较小的 UID 范围,并设置不可登录的 shell。

示例:创建一个用于运行 nginx 服务的系统用户

bash 复制代码
useradd -r -s /sbin/nologin -M nginx
  • -r:表示创建系统用户,UID 会自动分配在 1-999 范围内。
  • -s /sbin/nologin:指定默认 shell 为 nologin,禁止该用户登录系统,增强安全性。
  • -M:不自动创建家目录,因为系统用户一般不需要家目录来存储个人文件。

系统用户创建后无需设置密码(也可以设置,但通常没必要),其主要作用是在运行 "nginx" 服务时作为进程的所有者,限制服务进程的权限范围,避免服务被攻击后获得过高权限影响系统安全。

3. 设置用户密码

bash 复制代码
passwd 用户名

# 示例:为用户设置密码(需输入两次)
passwd newuser             # 交互设置 newuser 的密码

4. 删除用户

bash 复制代码
userdel [选项] 用户名

# 示例 1:仅删除用户账户
userdel olduser            # 保留 /home/olduser 目录

# 示例 2:彻底删除用户(推荐)
userdel -r olduser         # 删除用户及家目录、邮件池

用户组

4.创建用户组

bash 复制代码
groupadd [选项] 组名

# 示例 1:创建普通组
groupadd devops            # 创建 devops 组

# 示例 2:创建系统组(GID < 1000)
groupadd -r systemd        # 创建系统组 systemd

5. 删除用户组

bash 复制代码
groupdel 组名

# 示例:删除空组
groupdel temp              # 删除 temp 组(组内无用户时生效)

6. 修改用户所属组

bash 复制代码
usermod -aG 组名 用户名

# 示例 1:添加用户到单个组
usermod -aG docker user1   # 将 user1 添加到 docker 组(用于容器权限)

# 示例 2:添加用户到多个组
usermod -aG sudo,wheel user2  # 赋予 user2 管理员权限(sudo 组)

7. 切换用户

bash 复制代码
su - 用户名

# 示例 1:切换到 root 用户
su - root              # 切换到 root 并加载环境变量

# 示例 2:临时执行命令(无需切换)
sudo -u user1 ls /data  # 以 user1 身份执行 ls 命令

文件权限

1、Linux 是多用户多任务操作系统,为了区分不同用户对文件的操作权限,采用了用户 - 组 - 其他(User-Group-Others)的三元权限模型。

  • 所有者(User) :文件的创建者,拥有最高管理权限
  • 所属组(Group) :包含多个用户的集合,便于团队协作授权
  • 其他用户(Others) :系统中除所有者和所属组成员外的所有用户

2、每种身份可拥有三种基本权限,分别是:

  • 读权限(r) :允许查看文件内容或列出目录内容
  • 写权限(w) :允许修改文件内容或在目录中创建 / 删除文件
  • 执行权限(x) :允许运行可执行文件或进入目录

3、数字表示法用三位八进制数表示权限组合,每个权限对应固定数值:

  • 读权限(r):4
  • 写权限(w):2
  • 执行权限(x):1
  • 无权限:0
bash 复制代码
# 设置权限为rwxr-xr-x(755):常用于可执行文件
chmod 755 app.py

# 设置权限为rw-r--r--(644):常用于普通文件
chmod 644 README.md

# 设置权限为rwx------(700):常用于私有目录
chmod 700 ~/private/

# 设置权限为rwxrwxrwx(777):所有用户都有全部权限(谨慎使用)
chmod 777 /tmp/shared/

4、chmod 和 chown

权限赋值的核心命令:chmod

bash 复制代码
chmod [选项] 权限 文件/目录

# 设置权限为rwxr-xr-x(755):常用于可执行文件
chmod 755 app.py

# 设置权限为rw-r--r--(644):常用于普通文件
chmod 644 README.md

# 设置权限为rwx------(700):常用于私有目录
chmod 700 ~/private/

# 设置权限为rwxrwxrwx(777):所有用户都有全部权限(谨慎使用)
chmod 777 /tmp/shared/

修改文件的所有者和群组,这里有个chown万能的命令,-R参数非常有用,R是recursive的缩写,表示递归,用来设置子目录和子文件。

bash 复制代码
chown -R stark:stark file.txt

文件查找

1. find 命令(全能搜索)

  • -name:按文件名查找(支持通配符 *?)。
  • -type:按文件类型查找(f= 普通文件,d= 目录,l= 符号链接)。
  • -size:按文件大小查找(+10M= 大于 10MB,-50k= 小于 50KB)。
  • -mtime:按修改时间查找(-2=2 天内,+7=7 天前)。
  • -user/-group:按所有者 / 组查找。
bash 复制代码
# 查找当前目录下所有名为 "example.txt" 的文件
find . -name "example.txt"

# 查找 /etc 目录下所有 .conf 后缀的文件(忽略大小写)
find /etc -iname "*.conf"

# 查找 /home 目录下大于100MB且修改时间在7天内的文件
find /home -size +100M -mtime -7

# 查找并删除30天前的临时文件
find /tmp -type f -mtime +30 -delete

#查找二进制目录命令
find / -type f -executable -name "nginx" 2>/dev/null

2. locate 命令(快速索引搜索)

  • 基于系统预建的文件索引(由 updatedb 命令更新),速度极快。
  • 适合查找已知文件名的文件,但可能不显示最新创建的文件。
bash 复制代码
# 查找所有包含 "nginx" 的文件
locate nginx

# 使用通配符精确匹配
locate /usr/bin/python3  # 查找绝对路径
相关推荐
COSMOS_*2 小时前
2025最新版 Go语言&Goland 专业安装及配置(超详细)
开发语言·后端·golang·go
mCell2 小时前
那台榨汁机,竟是哈希表祖师爷?
后端·安全·go
ChinaRainbowSea2 小时前
用户中心——比如:腾讯的QQ账号可以登录到很多应用当中 02
java·服务器·spring boot·后端·mysql·mybatis
追逐时光者3 小时前
精选 10 款开源美观、简单易用的 WPF UI 控件库,让 WPF 应用界面焕然一新!
后端·.net
要开心吖ZSH4 小时前
Spring Boot 自动配置:从 spring.factories 到 AutoConfiguration.imports 的演变
spring boot·后端·spring
brzhang4 小时前
我十几个项目都是这套Flutter 快速开发框架,今天开源了,从此你只用关心业务了
前端·后端·架构
神仙别闹5 小时前
基于ASP.NET+SQL Server的网站登录注册功能设计与实现
后端·asp.net
threejs源码翻译官5 小时前
显微镜图像处理【部署】- pytorch模型转onnx使用GPU进行推理
后端
wjpwjpwjp08315 小时前
[MySQL基础3] 数据控制语言DCL和MySQL中的常用函数
数据库·笔记·后端·学习·mysql