누구든지 이것을 설명할 수 있습니까?
임베디드 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는 그렇지 않습니다...?