跳转到内容
搜索 Fedora 文档

    浏览当前文档目录

    Fedora 用户与权限:wheel、sudo 与密码策略

    Fedora 的权限模型有两层容易混:文件权限(rwx)与 sudo 提权(谁能变成 root)。这两层与 SELinux 又是独立的,本节只讲前两层。

    下面是 F45 上的实测。

    Terminal window
    id
    getent passwd labuser
    uid=1000(labuser) gid=1000(labuser) groups=1000(labuser),4(adm),10(wheel),190(systemd-journal)
    labuser:x:1000:1000:fedora Cloud User:/home/labuser:/bin/bash

    id 的输出里,10(wheel) 就是能 sudo 的关键。getent passwd 那行是七个冒号分隔字段:用户名、密码占位、UID、GID、注释、家目录、登录 shell。

    Fedora 默认让 wheel 组拥有 sudo 权限,规则在 /etc/sudoers:

    Terminal window
    sudo grep -nE "^(%wheel|Defaults)" /etc/sudoers | head -5
    55:Defaults !visiblepw
    64:Defaults always_set_home
    65:Defaults match_group_by_gid
    73:Defaults always_query_group_plugin
    75:Defaults env_reset

    对应的授权行是 %wheel ALL=(ALL) ALL(部分镜像里被注释,用 # %wheel 形式给出备选)。改 sudoers 一律用 visudo,它会做语法检查;直接编辑出错会把 sudo 锁死。

    自己的规则放 /etc/sudoers.d/,一文件一条:

    Terminal window
    sudo ls /etc/sudoers.d/
    90-cloud-init-users
    Terminal window
    sudo tee /etc/sudoers.d/90-labadmin >/dev/null <<'EOF'
    labadmin ALL=(ALL) NOPASSWD:ALL
    EOF
    sudo chmod 440 /etc/sudoers.d/90-labadmin
    Terminal window
    sudo useradd -m -G wheel -s /bin/bash alice
    sudo passwd alice

    三个参数各有含义:

    参数作用不写的后果
    -m创建家目录用户能登录但没有 ~
    -G wheel加入 wheel 组不能 sudo
    -s /bin/bash指定登录 shell取 /etc/default/useradd 里的默认值

    Fedora 的默认值:

    Terminal window
    grep -E "^(SHELL|INACTIVE|CREATE_MAIL_SPOOL)" /etc/default/useradd
    grep -E "^(UID_MIN|UID_MAX|PASS_MAX_DAYS|PASS_WARN_AGE)" /etc/login.defs
    SHELL=/bin/bash
    INACTIVE=-1
    CREATE_MAIL_SPOOL=yes
    UID_MIN 1000
    UID_MAX 60000
    PASS_MAX_DAYS 99999
    PASS_WARN_AGE 7

    注意两个默认值:PASS_MAX_DAYS 99999 等于不过期,INACTIVE=-1 等于密码过期后账户也不锁。生产环境通常要收紧,见下一节。

    Terminal window
    sudo usermod -aG wheel alice # 正确:追加
    sudo usermod -G wheel alice # 错误:会清空其他组

    -G 是”把附加组设成这些”,-aG 才是”追加”。漏掉 -a 会把用户在 adm、systemd-journal 等组的成员身份一并抹掉——这是权限问题里最隐蔽的一种。

    验证:

    Terminal window
    id alice
    getent group wheel
    Terminal window
    sudo chage -l alice # 看当前策略
    sudo chage -M 90 -W 7 -I 14 alice # 90 天过期、提前 7 天提醒、过期 14 天后锁定
    sudo passwd -l alice # 锁定账户
    sudo passwd -u alice # 解锁

    -I 14 补的正是 INACTIVE=-1 那个缺口:密码过期 14 天后自动锁账户。

    查看锁定状态(passwd -S):

    Terminal window
    sudo passwd -S alice
    alice LK 2026-10-28 0 90 7 14 (Password locked.)

    第二个字段:P 正常、LK 已锁、NP 无密码。

    Terminal window
    sudo userdel -r alice # -r 连家目录与邮件一起删

    不带 -r 会留下家目录——下次建同名用户时 UID 可能不同,旧文件全变成”孤儿”,还会带来 SELinux 标签错乱。

    • 删用户前先看有没有进程在跑:ps -u alice、loginctl list-sessions;
    • sudo -l 看自己能做什么,比猜快;
    • sudo -i 与 sudo -s 的区别:前者是登录 shell(读 /etc/profile),后者保留当前环境;
    • SELinux 与用户的关系:id 输出末尾的 context=unconfined_u:... 是 SELinux 用户上下文,详见SELinux。