기본적으로 세계 쓰기 가능 디렉토리는 무엇입니까?


14

표준 Linux 파일 시스템에서 이러한 공통 디렉토리 중 기본적으로 세계 기록 가능한 디렉토리는 무엇입니까?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

왜 세계 쓰기가 가능한가요? 보안 위험이 있습니까?

답변:


16

세계적으로 쓸 수 있는 유일한 FHS 필수 디렉토리는 /tmp/var/tmp입니다. 두 경우 모두, 누군가가 만들 수있는 임시 파일을 저장하기위한 것이기 때문입니다.

프로세스간에 공유되는 중간 크기의 데이터에 빠르게 액세스하거나 재부팅 할 때 파기되도록 보장하는 파일을 만들기 /dev/shm위한 tmpfs (RAM이 지원하는 파일 시스템) 도 일반적입니다 .

/var/mail또는 또는 /var/spool/mail때로는 다른 스풀러 디렉토리 가있을 수도 있습니다 . 메일은 처리되기 전에 일시적으로 메일을 보관하는 데 사용됩니다. 사용중인 도구에 따라 항상 쓰기 가능한 것은 아닙니다. 그것들은 데몬에 의해 처리하기 위해 사용자 도구로 파일을 만들 수 있기 때문입니다.

이러한 모든 디렉토리에는 일반적으로 고정 비트 ( t) 세트가 있습니다. 즉, 파일 소유자 나 디렉토리의 소유자 만 파일을 이동하거나 삭제할 수 있습니다.

사용자로 실행되는 모든 프로그램은 이러한 디렉토리에 파일을 만들 수 있으며 특정 데이터에 대한 보안이 유지되는 한 올바른 작업을 수행하는 것은 프로그램을 만드는 데 달려 있습니다. 잠재적으로 파일 시스템을 채우는 사람 이외의 일반적인 일반적인 보안 문제는 없지만 프로그램이 잘못 할 수있는 충분한 범위가 있습니다.

가 있었다 일부 이동 서비스 별에 대한 /tmp디렉토리. 이로 인해 발생할 수있는 잠재적 인 버그를 피할 수 있으므로 디렉토리를 사용하는 방법에있어 프로그램에 버그가없는 것이 중요하지 않습니다.


다음을 사용하여 시스템에서 세계 쓰기 가능한 디렉토리를 찾을 수 있습니다.

find / -maxdepth 3 -type d -perm -777

8

/tmp, /var/tmp그리고 /var/lock세계 쓰기 기본적으로 있습니다. 이전 응용 프로그램과의 호환성을 위해 제공되는 /usr/tmp→ 와 같은 심볼릭 링크가있을 수 있습니다 /var/tmp.

/tmp/var/tmp세계 쓰기 그들은 임시 저장을위한 모든 사용자가 사용할 수 있도록 의미하기 때문이다. /var/lock모든 사용자가 실행하는 모든 프로세스가 중앙 위치에 잠금 파일을 작성할 수 있도록 세계 쓰기가 가능합니다.

보안 위험이 있습니까? 아니요,하지만 그렇습니다.

해당 디렉토리의 모든 권한은 1777선도와 함께, 1되는 스티키 비트 . 즉, 누구나 쓸 수있는 해당 디렉토리에 파일을 만들 수는 있지만 소유자 만 자신의 파일을 삭제할 수 있습니다 (물론 루트 사용자도 가능).

안전하지 않은 임시 파일 작성으로 인해 보안 위험이 발생할 수 있습니다. 이러한 디렉토리는 모두 무료이기 때문에 사용자는 악의적 인 사용자가 생성 한 기존 파일이나 심볼릭 링크를 열지 않고 자신이 만든 파일이 실제로 새 파일인지 확인하기 위해주의를 기울여야합니다. 파일과 같은 적절한 기술을 사용하여 생성하는 경우 open(…, O_EXCL)mkstemp(3), 그러한 위험은 피할 수있다.


1
현대적인 시스템에서, 그 호환성 심볼릭 링크 중 하나입니다 /var/lock/run/lock
camh

2

/tmp

안전하게 사용하려면 추가 코드를 추가해야하므로 위험합니다. 분명히 이것은 간과됩니다.

Steve Kemp가 최근 예를 들었습니다. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

두 번째 줄 이전에 (공격자) / tmp / shadow를 바꾸면 모든 사람의 비밀번호를 바꾸게됩니다. (공격을 위해서는 첫 번째 줄 전에 파일을 작성하고 파일을 세계 기록 가능하게 만들어야한다고 생각합니다.)

Linux에서 Systemd를 사용하면 많은 시스템 서비스에 대해 / tmp를 격리하여 이러한 취약점을 완화 할 수 있습니다. ( "IPC 소켓 및 기타 통신 기본 요소의 위치로 / tmp를 오용하는"것 제외).

Fedora Linux에서-http: //fedoraproject.org/wiki/Features/ServicesPrivateTmp

체계적인 설명-http: //0pointer.de/blog/projects/security.html


"공격을하려면 첫 줄 전에 파일을 만들어야한다고 생각합니다."-실제로. 파일이 존재하지 않으면 첫 번째 줄은 실행중인 사용자 (아마도 루트)로 파일을 만들고 다른 악의적 인 사용자는 두 번째 줄 전에 파일을 바꿀 권한이 없습니다. 파일이 이미 존재하는 경우 파일을 fopen덮어 쓰지만 권한을 재설정하지 않으므로 악의적 인 사용자가 여전히 변경할 수 있습니다. 또한 악의적 인 사용자가 ln -s /bin/bash /tmp/shadow첫 번째 줄 이전 과 같은 작업을 수행 하여 필수 시스템 이진을 덮어 쓸 수 있습니다.
hvd

2

쓰기 가능한 세계 디렉토리를 찾으려면

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

파일의 유형을 f

심볼릭 링크의 경우 l

스티커 비트를 설정하려면

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.