Linux 用户与权限命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第⑤族:用户与权限,约 28 个命令。Linux 是多用户系统,权限体系的出发点很简单:每个文件都属于某个用户和某个组,系统据此决定谁能读、谁能写、谁能执行。理解 UID(User ID,用户编号)和 GID(Group ID,组编号)这两个数字,比记住用户名更重要——系统内部认的是数字,用户名只是给人看的别名。文件权限数字规则见 文件与目录速查,安全加固见 安全加密与审计。
一、用户管理
用户信息存在 /etc/passwd 里,每行一个用户,用冒号分成七段:用户名、密码占位符(现在是 x)、UID、GID、注释(通常是全名)、家目录、登录 Shell。真正的密码哈希在 /etc/shadow 里,只有 root 能读——这样拆分是为了让普通用户也能查用户信息,却拿不到密码。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| useradd | 创建新用户 | useradd -m -s /bin/bash alice(-m 建家目录,-s 指定 shell);useradd -G sudo alice(加入附加组);useradd -u 1500 -g dev alice(指定 UID/GID);useradd -r(创建系统用户,无家目录、不能登录,给服务用) |
| usermod | 修改已有用户属性 | usermod -aG docker alice(追加到附加组);usermod -s /bin/zsh alice(改 shell);usermod -L alice(锁定账号);usermod -U alice(解锁);usermod -d /new/home -m alice(改家目录并迁移) |
userdel | 删除用户 | userdel alice;userdel -r alice(连同家目录和邮件池一起删);userdel -f(强制,即使用户还登录着) |
| passwd | 设置或修改密码 | passwd(改自己的);passwd alice(root 改别人);passwd -l alice(锁定);passwd -u alice(解锁);passwd -e alice(强制下次登录改密码);passwd -S alice(查看状态) |
| chpasswd | 批量修改密码,从标准输入读"用户名:密码"对,适合初始化脚本 | echo 'alice:NewPass123' | chpasswd;chpasswd < users.txt(批量);chpasswd -e(密码已是加密形式) |
getent | 从系统数据库查询条目,比直接 grep /etc/passwd 更可靠(会用上 NSS,LDAP 等源也能查到) | getent passwd alice;getent group docker;getent passwd(列出全部用户) |
pwck | 检查 /etc/passwd 与 /etc/shadow 的一致性,手改过用户文件后跑一下 | pwck;pwck -r(只读检查) |
vipw | 安全地编辑 /etc/passwd,会加锁防止并发编辑改坏文件 | vipw;vipw -s(编辑 shadow) |
usermod -G与usermod -aG的区别是个经典陷阱:不加-a会覆盖用户原有的附加组,等于把人从其他组里踢出去。日常加组一律用aG(append group)。改完组之后用户需要重新登录才生效——已经登录的会话里,groups 看到的还是旧列表。
二、组管理
每个用户有一个主组(GID,在 /etc/passwd 里指定,新建文件默认归这个组)和若干个附加组(/etc/group 里的成员列表,用于授权)。groups 命令输出里第一个就是主组。
| 命令 | 作用 | 常用示例 |
|---|---|---|
groupadd | 创建新组 | groupadd dev;groupadd -g 1001 dev(指定 GID);groupadd -r(系统组) |
groupdel | 删除组(若该组是某用户的主组则删不掉) | groupdel dev |
groupmod | 修改组属性 | groupmod -n newname oldname(重命名);groupmod -g 1002 dev(改 GID) |
gpasswd | 管理组成员与组密码 | gpasswd -a alice dev(加入组);gpasswd -d alice dev(移出);gpasswd -A alice dev(设为组管理员);gpasswd -M "a,b" dev(设置成员列表) |
grpck | 检查 /etc/group 与 /etc/gshadow 的一致性 | grpck;grpck -r(只读) |
vigr | 安全编辑 /etc/group(带锁) | vigr;vigr -s(编辑 gshadow) |
| groups | 查看用户所属的组 | groups alice;groups(当前用户,第一个是主组) |
newgrp | 临时切换有效组,之后新建的文件归属新组 | newgrp dev(切换后需重新登录才恢复) |
sg | 以指定组的身份执行单条命令,不影响当前会话 | sg docker -c "docker ps" |
三、身份切换
su 与 sudo 的分工:su 是"变成另一个人"(要知道对方的密码),sudo 是"以别人的身份做一件事"(用自己的密码,且能精细控制能做什么)。生产环境基本都推荐 sudo——不用共享 root 密码,且每条命令都会留下审计记录。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| su | 切换用户身份 | su - alice(带 -,载入目标用户的完整环境变量);su -(切到 root);su -c "cmd" alice(以 alice 执行单条命令) |
| sudo | 以其他用户(默认 root)身份执行命令 | sudo cmd;sudo -u alice cmd(指定用户);sudo -i(root 登录 shell);sudo -l(查看自己被授予的权限);sudo -k(清空密码缓存);sudo -v(延长缓存有效期);sudo !!(用 sudo 重跑上一条命令) |
visudo | 安全编辑 sudoers 配置,保存时会校验语法,防止改错导致所有人都用不了 sudo | visudo;visudo -c(只检查语法);visudo -f /etc/sudoers.d/alice(编辑指定文件) |
sudoedit | 以 root 权限安全地编辑文件(编辑时用的是普通用户身份,编辑器配置不丢) | sudoedit /etc/nginx/nginx.conf |
| logname | 显示最初登录的用户名,与 whoami 不同(sudo 后 whoami 会变,logname 不变) | logname |
| whoami | 显示当前有效用户名 | whoami(等价 id -un);id(含 UID/GID 与所有组) |
永远用
visudo编辑 sudoers,不要直接用 vim 改/etc/sudoers。viudo 会在保存时做语法检查,语法错了会提示你重来;直接改坏的话,整个系统的 sudo 就瘫痪了,只能进单用户模式抢修。新增授权建议写在/etc/sudoers.d/下的独立文件里,而不是改主文件——升级系统时主文件可能被覆盖,独立目录不会。典型规则:alice ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx。
四、文件权限
Linux 的标准权限是三组三位:属主(u)、属组(g)、其他人(o),每组三个位——读(r=4)、写(w=2)、执行(x=1)。chmod 755 就是把这三组各用一个八进制数表示。除了这九位,还有三个特殊位处理更特殊的场景。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| chmod | 修改文件权限 | chmod 755 script.sh;chmod u+x file(属主加执行);chmod -R 755 dir/(递归改目录);chmod a=r file(所有人只读);chmod u+s file(设 SUID);chmod g+s dir/(设 SGID);chmod +t dir(设 sticky bit) |
| chown | 修改属主与属组 | chown alice file;chown alice:dev file;chown -R alice:dev dir/(递归);chown :dev file(只改组) |
| chgrp | 只修改属组 | chgrp dev file;chgrp -R dev dir/ |
| umask | 设置新建文件/目录的默认权限掩码 | umask 022(新文件 644、新目录 755);umask(查看当前值);umask -S(符号形式显示) |
三个特殊权限位要留意:SUID(
chmod u+s)让程序以文件属主的权限运行,典型例子是/usr/bin/passwd——普通用户能改自己的密码,靠的就是它能临时以 root 身份写 shadow 文件;SGID(chmod g+s)用在目录上时,新文件会自动继承目录的属组,团队协作目录几乎必配;sticky bit(chmod +t)让目录里的文件只有属主能删,/tmp就是靠它防止用户互删文件。查看方式:ls -l里对应位置显示s或t。给随便一个程序设 SUID 是严重的安全风险,等于给了普通用户一段以 root 运行的任意代码。
五、登录与审计
排查"谁在什么时候登录过、做了什么"是安全事件响应的第一步。下面这些命令读的是系统的登录日志(wtmp、btmp、lastlog),它们由 PAM 在登录时写入。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| last | 显示最近登录记录(读 /var/log/wtmp) | last;last -n 10 alice(某用户最近 10 条);last reboot(重启记录);last -i(显示 IP 而非主机名);last -f /var/log/wtmp.1(读归档日志) |
lastb | 显示失败的登录尝试(读 /var/log/btmp),发现暴力破解的入口 | lastb;lastb -n 20;lastb | awk '{print $3}' | sort | uniq -c | sort -rn(统计来源 IP 次数) |
lastlog | 显示所有用户的最后一次登录时间 | lastlog;lastlog -u alice;lastlog -t 30(只看最近 30 天登录过的) |
| who | 显示当前登录的用户 | who;who -b(上次系统启动时间);who -u(含空闲时间);who -a(全部信息) |
ac | 统计用户的连接总时长(读 wtmp),合规审计常用 | ac;ac -d(按天统计);ac -p(按用户统计) |
发现可疑登录后的标准动作:
last -i看来源 IP →lastb看有没有爆破痕迹 →lastlog确认哪些账号被用过 → 检查该账号的~/.bash_history。注意登录日志可以被入侵者清理,所以关键服务器应当把日志实时同步到远端(rsyslog 转发或 auditd 留痕)。纵深防御的做法见 安全加密与审计。
一句话总结
用户与权限速查:建用户用 useradd -m -s,加组用 usermod -aG(别漏 -a),提权用 sudo(规则用 visudo 改),改归属用 chown/chgrp/chmod(特殊场景上 SUID/SGID/sticky),审计用 last/lastb/lastlog/ac——28 个命令覆盖从账号创建到权限收口再到事后追溯的完整链路。