Linux文件权限与归属:chmod和chown

遇到Permission denied,先确认“哪个账号正在访问哪个路径”,再看文件及每层目录权限。不能靠全目录777解决。下面先在当前账号自己的临时练习目录操作,不对真实业务目录递归改权限。

看懂权限与归属

lab_dir=$(mktemp -d)
printf 'hello\n' > "$lab_dir/note.txt"
ls -ld "$lab_dir" "$lab_dir/note.txt"
stat -c '%A %a %U:%G %n' "$lab_dir/note.txt"
id

ls -l 最左侧第一位表示文件类型,其后依次为所有者、所属组、其他人的r/w/x权限。文件的r/w分别表示读与写,x表示执行;目录的x表示穿过该目录访问内部路径,目录的r表示列出目录项。可读文件放在无法穿过的目录里,仍可能访问失败。

只改需要的权限

chmod 600 "$lab_dir/note.txt"
chmod 700 "$lab_dir"
stat -c '%A %a %U:%G %n' "$lab_dir" "$lab_dir/note.txt"
常见设置 含义 适用判断
文件600 所有者可读写,其余无权限 该账号独占的私密配置或凭据文件
目录700 只有所有者可列出、写入和进入 该账号私有目录
文件640、目录750 为同组用户保留必要读取/进入权限 已确认组成员且确需共同访问的内容
chmod u+x 文件 仅给所有者增加执行位 确认为可执行脚本后使用,不等于脚本可信

数值不是全站通用模板。网站、数据库与程序需要不同的读写目录,先查该服务运行账号和官方部署要求。配置文件、上传目录、程序代码和密钥不应使用同一套宽泛权限;变更时记录原值,逐个目录验证业务。

归属错了才使用chown

ps -eo user,pid,comm
ls -ld /实际/目标目录

确定真实用户和组后,管理员可对具体文件执行 sudo chown 用户:组 /实际/目标文件。不要把这个示意路径直接复制执行,也不要对 /、/etc 或整块数据盘一键递归chown。上传文件的账号与服务运行账号不同,应设计共享组或交接目录,不能把整个程序都改成root可写。

Permission denied仍存在

沿路径检查父目录权限,核对是否只读挂载、磁盘或inode不足、ACL或AppArmor/SELinux策略限制。sudo能读到文件不代表服务账号能读到;最终用实际程序或服务验证读取、写入和访问结果。练习目录路径会由mktemp随机生成,结束后只清理你确认创建的练习文件,不把临时目录清理命令套到正式数据上。