-bash: /dev/null: 权限被拒绝

Kev*_*rke 40 permissions

我正在尝试在 Centos 6 系统上创建一个新用户。

首先,我做

useradd kevin
Run Code Online (Sandbox Code Playgroud)

然后,我尝试以该用户身份运行命令

su - kevin
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下错误消息

-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
-bash: /dev/null: Permission denied
[kevin@gazelle ~]$
Run Code Online (Sandbox Code Playgroud)

而我作为那个用户也做不了多少。

权限/dev/null如下:

-rwxr-xr-x  1 root root           9 Jul 25 17:07 null
Run Code Online (Sandbox Code Playgroud)

与我的 Mac 上的大致相同,

crw-rw-rw-   1 root   wheel         3,   2 Jul 25 14:08 null
Run Code Online (Sandbox Code Playgroud)

有可能碰过 dev,但真的不太可能。

作为 root 用户,我尝试添加kevinroot组中:

usermod -a -G root kevin
Run Code Online (Sandbox Code Playgroud)

但是,我仍然收到/dev/null权限被拒绝的错误。

为什么新用户不能写入/dev/null
新用户应该属于哪些组?
我没有正确模拟用户吗?
是否有在 Linux 上设置用户/权限的初学者指南?

Mar*_*ick 78

显然有人将常规文件移动到 /dev/null。重新启动将重新创建它,或者做

rm -f /dev/null; mknod -m 666 /dev/null c 1 3
Run Code Online (Sandbox Code Playgroud)

正如@Flow 在评论中指出的那样,您必须这样root做。

13这里是基于Linux操作系统的主要和次要设备号(由处理的第3设备mem驱动程序,请参见/proc/devicescat /sys/devices/virtual/mem/null/devreadlink /sys/dev/char/1:3)。它因操作系统而异。例如22 在 OpenBSDAIX 上,它在给定的操作系统上也可能并不总是相同。某些操作系统可能会提供makedev/MAKEDEV命令来帮助重新创建它们。

  • 如果“某人”是指“我”,那么是的 :) (15认同)

jll*_*gre 17

这应该可以解决问题(以 root 身份):

rm /dev/null
mknod /dev/null c 1 3
chmod 666 /dev/null
Run Code Online (Sandbox Code Playgroud)

这些命令在做什么:

  • rm正在删除由于缺少预期文件而创建的伪造文件;
  • mknod正在/dev/null为 Linux 内核创建一个以适当的主要和次要编号命名的字符设备;
  • chmod正在设置所有用户的权限,使其能够读取和写入/dev/null.

  • 这个也适用于 Mac/BSD (2认同)

小智 6

Mark 建议的解决方案在 OpenBSD 上不起作用。然而

mknod -m 666 /dev/null c 2 2
Run Code Online (Sandbox Code Playgroud)

成功了。我已经在 OpenBSD 5.6 上测试过了。当接受的答案被执行时,/dev/null将会非常糟糕地阻止并破坏从中读取的任何代码。

要在 OpenBSD(null包括)上重新创建所有标准设备,您应该使用(作为 root):

cd /dev
./MAKEDEV std
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,不同的操作系统对`/dev/null` 使用不同的主要/次要编号,并且没有标准。OP 询问 CentOS 6。Linux 使用 `1,3` 作为 /dev/null 至少可以追溯到 2001 年。在 FreeBSD 上,我见过 `0,6`、`15,0`、`17,0` ,和`20,0`。OpenBSD 使用`2,2`。在 OpenBSD 上,您实际上不需要知道数字;你可以运行`# cd /dev; ./MAKEDEV std` 。 (6认同)