Linux目录无法仅设“写权限”,必须保留执行位(x)才能实现写入操作,因为x是路径搜索和进入目录的必要条件;chmod 300 dir(wx权限)可实现所有者写+执行但禁止列出内容,而chmod 200 dir(仅w)因缺失x会导致所有写操作失败。

目录不能只设“写权限”,必须带执行位
Linux 中无法真正实现“只写”目录——因为写操作(如 touch、cp、mkdir)依赖目录的执行权限(x)才能进入或定位其中。若仅保留 w 而去掉 x,所有写入操作都会失败,报错类似:Permission denied 或 No such file or directory(即使路径存在)。
所以所谓“只写”,实际是指:允许创建/删除文件,但禁止列出内容(r)、禁止执行(对目录无意义),且需保留 x 才能生效。
-
chmod 300 dir是最接近的方案:所有者有wx(3 = 2+1),无r;组和其他用户全无权限 - 该权限下,所有者可
touch dir/a、rm dir/a、mkdir dir/sub,但ls dir会提示Permission denied - 注意:
300不等于“只写”,而是“写+执行”,且刻意屏蔽读取能力
为什么 chmod 200 dir 会失败
chmod 200 dir 表示仅所有者有写权限(w),但没执行(x)。此时目录变成“不可进入状态”:
-
cd dir失败:bash: cd: dir: Permission denied -
touch dir/file失败:touch: cannot touch 'dir/file': Permission denied(内核拒绝访问路径) - 根本原因:Linux 将目录的
x视为“搜索权限”(search permission),没有它,路径解析就中断
常见误用场景与替代思路
用户想实现“只能往里丢文件,不能看里面有什么”,但直接设权限很难兼顾安全与可用。更稳妥的做法是:
- 用
chmod 300 dir+ 配合chown user:group dir,把写入权交给特定用户/组 - 若需多人协作,改用
chmod 370 dir(所有者wx,组rwx),再通过setgid(chmod g+s dir)确保新建文件继承组权限 - 避免用
chmod 377或777:其他用户若有x,就能cd进去;若有r,就能ls看到所有文件名 - 真正防窥探需结合 SELinux 或 bind mount 隔离,单纯 chmod 无法隐藏文件名
验证是否生效的命令
设完权限后,别只信 ls -l,要实测关键操作:
- 检查权限:
ls -ld dir→ 应显示drwx------(700)或d-wx------(300) - 测试写入:
touch dir/testfile && echo ok || echo fail - 测试读取:
ls dir 2>/dev/null || echo "ls blocked — good" - 测试进入:
cd dir && pwd && cd - 2>/dev/null || echo "cd blocked"
真正的“只写”不是靠一个数字达成的,而是靠 w 和 x 的组合压制 r,并接受“无法列出内容”这个副作用。忽略执行位,一切写操作都只是纸面权限。


















