/dev에 없는 노드에서 /dev/console에 쓸 수 없습니다.

/dev에 없는 노드에서 /dev/console에 쓸 수 없습니다.

누구든지 이것을 설명할 수 있습니까?

임베디드 Arm 시스템, 리눅스 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에서 실행됩니다.

답변1

/tmp설치됨노르데브/dev는 그렇지 않습니다...?

관련 정보