在用户 postgres 上:
$ ls -l /dev/null
ls: cannot access /dev/null: Permission denied
以root用户思考,权限是正确的:
# ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Sep 21 12:05 /dev/null
我尝试重新创建它:
# rm /dev/null && mknod -m 0666 /dev/null c 1 3
但结果是一样的。我在 x86_64 上安装了 Debian 7 和内核 2.6.32 的 VPS 上
答案1
问题出在/dev 的权限上:
# ls -ld /dev
drwx------ 3 root root 4096 Sep 21 12:12 /dev
因此用户无法访问 /dev。
# chmod a+x /dev
# chmod a+r /dev
问题解决了。
答案2
我遇到了类似的问题,我通过搜索症状来到这里,但解决方案并不适合我的情况。所以即使它并不完全适合原帖作者,我也想添加另一个可能的原因。
在我的特殊情况下,我使用了proot
(一个很好的chroot
包装器)。但权限本身是正确/dev/null
的/dev
。
碰巧的是chroot
,我thunar
以普通用户身份挂载了目录。因此,在这种情况下,挂载没有正确的权限。
您很难找到这一点,因为当仅查看文件时,您看不到这些权限。
一般解决方法是开始检查问题位置的状况(/dev/null
),然后进入下一个级别(/dev
),然后是挂载、文件系统等等,无论接下来是什么。
在每个步骤中,你可能有几个先决条件,每个先决条件都有自己的外层。例如,用户可能处于错误的组中,这会导致组配置文件,而组配置文件可能具有错误的权限等。
显然,总体来说你必须遵循一种树。
答案3
我自己无法解决这个问题,所以我做了以下事情:
mycommand.sh | echo -n
该echo
命令不关注标准输入,因此它将被丢弃。这样-n
就不会将无用的换行符打印到 stdout。
答案4
chmod a+rw /dev/null /dev/random /dev/urandom /dev/ptmx /dev/tty /dev/zero /dev/full /dev/fuse /dev/net/tun
这就是解决我在 VPS 上的问题的方法。请注意,在重新启动服务器后,您必须再次运行此命令