刚学会网络诊断,这篇讲 Linux 里最有特色、也最容易踩坑的一块:权限。Windows 上你双击就能运行的东西,在 Linux 上经常报 Permission denied,别慌,这不是 bug,这是 Linux 在保护你。搞懂这篇,你才算真正入门了 Linux 的思维方式。
先理解:为什么 Linux 这么"较真"
Linux 生来就是多用户系统。一台服务器上可能同时有几十个用户登录,每个人只能动自己的东西,动不了别人的,更动不了系统文件。权限就是这套规则的执行者。
就算你的 VPS 只有你一个人用,这套机制也在默默工作:网站进程以低权限用户运行,被黑了也翻不起大浪;系统文件普通用户改不了,误操作也删不掉。
记住一句话:在 Linux 里,每个文件都有主人,每个主人都有地盘。
ls -l:读懂那串神秘的字母
ls -l /home
drwxr-xr-x 2 chris chris 4096 10-09 11:20 notes
-rw-r--r-- 1 chris chris 220 10-09 11:20 hello.txt
-rwxr-xr-x 1 chris chris 120 10-09 11:20 deploy.sh
第一列就是权限。拆开看 drwxr-xr-x:d=文件类型(目录),rwx=主人可读可写可执行,r-x=组可读可执行,r-x=其他人可读可执行。
rwx 对文件和目录意思完全不一样
重点:目录没有 x 进都进不去;删文件看的是目录的 w,不是文件的 w。
chmod 数字模式:421 速记法
r=4,w=2,x=1。rwx=7,rw-=6,r--=4。
chmod 755 script.sh # 自己全权,别人能看能跑
chmod 644 notes.txt # 自己读写,别人只读
chmod 600 id_rsa # 私钥:只有自己能看
chmod 700 ~/.ssh # 私密目录:只有自己能进
SSH 私钥必须是 600,太开放 SSH 会拒绝使用。
chmod 符号模式:精细微调
chmod u+x deploy.sh # 只给主人加执行权限
chmod g-w notes.txt # 拿掉组的写权限
chmod o-r secret.txt # 别人不许看
u=主人 g=组 o=其他人 a=所有,+=加上 -=拿掉 ==设为。
chown / chgrp:换主人
sudo chown nginx:nginx /var/www/html/index.html
sudo chown -R nginx:nginx /var/www/html/
网站 403 十有八九是主人不对,改成 nginx(或 www-data)就好。
sudo:为什么不直接用 root
sudo apt update # 临时提权执行一条命令
sudo usermod -aG sudo newuser # 给新用户 sudo 权限(别漏 -a)
umask:新建文件的默认权限
umask
0022
目录默认 755,文件默认 644。umask 077 则新建文件默认 600。
实战:Permission denied 三连查
ls -l deploy.sh # 1. 有 x 吗?没有就 chmod +x
chmod +x deploy.sh
./deploy.sh
实战:网站 403 排查套餐
sudo chown -R nginx:nginx /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;
小结
下一篇 L7:软件包管理——apt 的 update 和 upgrade 区别,换源加速,一条命令装 Nginx。