Невозможно выполнить запись в / dev / console через узел не в / dev

Кто-нибудь может объяснить это:

Система Embedded Arm, Linux 3.18.44. Нет SELinux или что-то еще:

# ls -l /dev/console crw------- 1 root root 5, 1 Jan 6 02:40 /dev/console # ls -l /tmp/console crw------- 1 root root 5, 1 Jan 6 02:39 /tmp/console # echo foo > /dev/console foo # echo foo > /tmp/console -sh: can't create /tmp/console: Permission denied # ls -ld /tmp drwxr-xr-x 2 root root 80 Jan 6 02:39 /tmp # ls -ld /dev drwxr-xr-x 11 root root 5480 Jan 6 02:32 /dev 

Некоторые детали из strace :

 # strace sh -c 'echo foo > /tmp/console' 2>&1 | grep console execve("/bin/sh", ["sh", "-c", "echo foo > /tmp/console"], [/* 12 vars */]) = 0 open("/tmp/console", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = -1 EACCES (Pe) 

Против:

 # strace sh -c 'echo foo > /dev/console' 2>&1 | grep console execve("/bin/sh", ["sh", "-c", "echo foo > /dev/console"], [/* 12 vars */]) = 0 open("/dev/console", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3 foo 

Это одно и то же устройство: майор 5, минор 1. Почему устройство должно заботиться о имени пути узла файловой системы, который ссылается на него? Если это именно так, это выглядит так:

 # mknod -m 600 /tmp/cons c 5 1 # echo foo > /dev/cons foo # mknod -m 600 /tmp/cons c 5 1 # echo foo > /tmp/cons -sh: can't create /tmp/cons: Permission denied 

Какой-то «театр безопасности»? Он работает под Linux 3.14 на очень похожем аппаратном обеспечении.

Linux и Unix - лучшая ОС в мире.