《Linux 用户与权限管理:从 useradd 到 sudo,一次讲清》

举报
yd_23412927 发表于 2026/11/11 10:11:28 2026/11/11
【摘要】 Linux 用户与权限管理:从 useradd 到 sudo,一次讲清服务器上最常见的报错之一就是 Permission denied:文件明明在那,就是打不开、写不进、执行不了。多数时候不是文件坏了,是用户和权限没对上。用户与权限管理就四件事:认清当前用户、管好用户和组、看懂文件权限、用好 sudo。下面按这个顺序讲清。 一、认清当前用户:whoami、id、/etc/passwd先看自...

Linux 用户与权限管理:从 useradd 到 sudo,一次讲清

服务器上最常见的报错之一就是 Permission denied:文件明明在那,就是打不开、写不进、执行不了。多数时候不是文件坏了,是用户和权限没对上。用户与权限管理就四件事:认清当前用户、管好用户和组、看懂文件权限、用好 sudo。下面按这个顺序讲清。

一、认清当前用户:whoami、id、/etc/passwd

先看自己是谁,再动手:

whoami
id
id www-data

id 输出里重点看三组数字:uid 是用户 ID,gid 是主组 ID,groups 是所属的组。uid 0 就是 root,普通用户一般从 1000 开始。

系统里所有用户都记在 /etc/passwd,一行一个:

cat /etc/passwd
grep "^www-data" /etc/passwd

登录 shell 是 /sbin/nologin 的用户不能直接登录,这类账号一般是给服务用的,正常,不用改成 bash。

二、建用户、改用户、删用户

新建用户

sudo useradd -m -s /bin/bash dev
sudo passwd dev

-m 是创建家目录,-s 指定登录 shell。只写 useradd dev 不加 -m,家目录是没有的,新用户登录后很多地方会不顺手。

改密码、锁定、解锁:

sudo passwd dev
sudo passwd -l dev
sudo passwd -u dev

passwd -l 是锁定账号,密码还在但登不上,适合临时停用,比删账号安全。

改用户

给用户加一个组,注意 -aG 要一起写,只写 -G 会把原来的附加组顶掉:

sudo usermod -aG docker dev
id dev

这是最容易踩的坑:usermod -G docker dev 执行完,用户原来在 sudo 组里的身份就没了,下次 sudo 直接报不在 sudoers 里。

删用户

sudo userdel dev
sudo userdel -r dev

不加 -r 只删账号,家目录和文件留着;加 -r 连家目录一起删。删之前先确认这个用户有没有在跑的服务、有没有 cron 任务:

ps -u dev
sudo crontab -u dev -l

三、组:把一类人放在一起管

新建组、把用户加进组、看组里都有谁:

sudo groupadd devops
sudo usermod -aG devops dev
getent group devops

一个文件只属于一个组,但一个用户可以属于很多组。项目目录共用时,正确做法是建一个组、把人都加进去、把目录的组改成这个组,而不是把目录 chmod 777。

四、文件权限:rwx、chmod、chown

先看懂 ls -l

ls -l /opt/myapp/app.py
ls -ld /opt/myapp

输出第一列像 -rw-r--r--,分四段:第一位是类型(- 文件、d 目录、l 链接),后面九位三三一组,分别是属主、属组、其他人的权限,每组都是 r(读)、w(写)、x(执行)。

目录的 x 不是执行,是“能进去、能看里面文件名”,没有 x 的目录,里面文件路径再对也进不去。

chmod:改权限

数字法最常用,r=4、w=2、x=1,三组相加:

chmod 755 script.sh
chmod 644 config.yaml
chmod 600 ~/.ssh/id_rsa

755 是属主全权限、其他人读和执行,适合脚本和目录;644 是属主读写、其他人只读,适合普通配置文件;600 是只有属主能读写,私钥、密码文件必须这个级别。

chown:改属主和属组

sudo chown dev:devops /opt/myapp/app.py
sudo chown -R dev:devops /opt/myapp
sudo chgrp devops /opt/myapp

五、sudo:不用 root 登录,也能干 root 的活

su 和 sudo 的区别

su 是切换用户,su - 切到 root 要输 root 的密码;sudo 是以 root 身份执行一条命令,输的是你自己的密码。日常运维用 sudo,不直接登 root。

谁能 sudo

能 sudo 的用户在 sudo 组里,或者写在 /etc/sudoers 里。看自己能 sudo 干什么:

sudo -l

改 sudo 权限必须用 visudo,它会先检查语法,写错了不让保存,直接改 /etc/sudoers 写错一个字符,下次 sudo 就全员报错:

sudo visudo

给某个用户只放行一条命令,比给全部权限安全:

dev ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx

这行意思是 dev 只能 sudo 重启和查看 nginx,别的命令一律不行。

sudo 的常见报错

dev is not in the sudoers file:用户不在 sudo 组、也不在 sudoers 里,先 id dev 确认组,再用有权限的账号加:

sudo usermod -aG sudo dev

六、SSH 登录:密钥登录、关掉密码登录

服务器安全的第一步,是让 root 不能用密码从网上直接登录。先给自己的账号配好密钥,再关密码登录,顺序不能反。

本机生成密钥对:

ssh-keygen -t ed25519 -C "dev@myserver"

一路回车,私钥在 ~/.ssh/id_ed25519,公钥在 ~/.ssh/id_ed25519.pub。私钥绝不发给别人、绝不传到服务器之外的群里。

把公钥放到服务器上:

ssh-copy-id dev@服务器IP

确认密钥能登录后,再改 SSH 配置,关掉密码登录和 root 登录:

sudo vim /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes

改完重启 SSH 服务(sudo systemctl restart sshd),先别关当前窗口,另开窗口试登一次再关旧窗口。手动放公钥时记得 ~/.ssh 700、authorized_keys 600,权限不对会拒绝密钥登录。

七、排查流程:Permission denied 按这个顺序查

部署完服务起不来、日志写不进,先别急着 chmod 777,按这个顺序查:

whoami
id
ls -ld /opt/myapp
ls -l /opt/myapp/app.log
namei -l /opt/myapp/app.log
sudo -l

whoami 和 id 确认当前是谁、属于哪些组;ls -ld 看目录本身的权限,ls -l 看文件的权限;namei -l 最关键,它把整条路径上每一级目录的权限都列出来,中间任何一级目录没有 x,文件权限再对也访问不到。

八、常用命令速查

看用户:whoami、id 用户名、cat /etc/passwd、getent group 组名

建改删用户:useradd -m -s /bin/bash 用户名、passwd 用户名、usermod -aG 组名 用户名、userdel -r 用户名

组管理:groupadd 组名、usermod -aG 组名 用户名、groupdel 组名

文件权限:chmod 755 文件、chmod 644 文件、chmod 600 私钥、chown 用户:组 文件、chgrp 组名 文件

sudo:sudo -l、sudo visudo、sudo visudo -c、usermod -aG sudo 用户名

SSH:ssh-keygen -t ed25519、ssh-copy-id 用户@服务器IP、chmod 700 ~/.ssh、chmod 600 ~/.ssh/authorized_keys

记住一个原则:权限问题先问“你是谁”,再问“你要动的东西是谁的”,最后才动手改。改之前看一眼,改之后用 ls -l 和 id 核对一次,生产服务器上一个错的 chown -R,比一次 Permission denied 贵得多。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。