/ tmp에 대한 올바른 권한은 무엇입니까? 우연히 모든 것을 재귀 적으로 공개했습니다.


78

나는 학대했다 sudo.

몇 시간 동안 일부 사용자들과 공유하고 싶었던 정말 짧은 수명의 임시 디렉토리를 만들었습니다. /some/path/tmp

불행히도 나는 sudo chown 777 -R /tmp대신에 시작 sudo chown 777 -R tmp했기 때문에 /tmp이제 파일이 완전히 공개되었습니다.

나는 /tmp짧은 수명 파일, 스크립트, 많은 스크립트를 위해 개인적으로 자주 (매일, 거의 매시간) 개인적으로 사용합니다.

완전히 공개로 설정되었으므로 보안 문제입니까? 더 안전한 설정으로 다시 변경해야합니까, 아니면 데비안 또는 우분투 배포판의 일반적인 기본 설정과 같이 변경해야합니까? 올바른 사용 권한은 /tmp무엇입니까?


초기 답변에서 중요한 것을 잊어 버렸습니다 .X11 소켓은 공개적으로 액세스 할 수 있어야합니다. 그렇지 않으면 새 GUI 응용 프로그램을 시작할 수 없습니다. 내 답변을 업데이트했습니다.
Gilles

그 것이었다 chownchmod?
Melebius

@Melebius 나는 당신의 질문에 약간 당황합니다 : 나는 언급하지 않았습니다 chmod. chown (ch-own과 같은)은 파일의 소유권에 관한 것으로 사용자가 파일을 소유합니다. chmod (ch-modifify와 같은)는 누가 파일을 실행하거나 내부에 쓰거나 파일의 내용을 읽을 수 있는지에 관한 것입니다.
Stephane Rolland

2
@StephaneRolland 네, 저를 혼란스럽게했습니다. chown 777ID를 777로 사용자에게 파일 소유권을 설정하는을 사용할 수 있습니다. 그러나 허용 된 답변을 포함한 모든 답변은으로 작동합니다 chmod. 모든 사용자 (소유자, 그룹 및 기타)에 대해 모든 권한을 동일한 값으로 설정하므로 파일 소유권의 영향은 대부분 관련이 없습니다. 그러나 결과를 수정하기위한 올바른 명령은 sudo chown 777 -R /tmp이어야합니다 sudo chown root -R /tmp.
Melebius

답변:


117

의 일반 설정 /tmp은 1777이며로 ls표시됩니다 drwxrwxrwt. 즉, 파일 소유자 만 파일을 제거 할 수 있다는 점을 제외하고 크게 열었습니다 (이 여분의 t비트가 디렉토리에 대해 의미 하는 것임 ).

/tmpwith 모드 777 의 문제점 은 다른 사용자가 작성한 파일을 제거하고 선택한 컨텐츠를 대체 할 수 있다는 것입니다.

당신이 경우 /tmptmpfs 파일 시스템이며, 재부팅은 모두 복원됩니다. 그렇지 않으면을 실행하십시오 chmod 1777 /tmp.

또한 많은 파일 /tmp이 개인용이어야합니다. 그러나 적어도 하나의 디렉토리는 세계적으로 읽을 수 있어야합니다 : /tmp/.X11-unix및 기타 유사한 디렉토리 ( /tmp/.XIM-unix등). 다음 명령은 대부분 올바르게 설정해야합니다.

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +

즉, 모든 파일 및 디렉토리를 비공개로 설정하고 (그룹 및 기타에 대한 모든 권한을 제거) X11 소켓을 모두가 액세스 할 수 있도록합니다. 이러한 소켓에 대한 액세스 제어는 파일 권한이 아닌 서버에 의해 시행됩니다. 공개적으로 사용 가능한 다른 소켓이있을 수 있습니다. find /tmp -type s -user 0세계가 액세스 할 수있게하는 루트 소유 소켓을 발견하기 위해 실행하십시오 . 다른 시스템 사용자가 소유 한 소켓도있을 수 있습니다 (예 : 시스템 버스와 통신하기 위해). 로 탐색 하십시오 (사용자 ID는 find /tmp -type s ! -user $UID어디에 있습니까 $UID).


1
두 번째 chmod를 더 설명해 주시겠습니까?
Bartlomiej Lewandowski

@BartlomiejLewandowski go-rwx: 그룹 및 다른 사람에 대한 권한이 없습니다. 이렇게하면 권한이로 설정됩니다 rwx------( chmod예를 들어 생성 된 파일이 더 적은 권한으로 끝날 수 있음 rw-------). 즉, 파일은 소유자 만 액세스 할 수 있습니다. /tmp/.[!.]*에 일반적으로 존재하는 도트 파일을 포함하는 것입니다 /tmp.
Gilles

@BartlomiejLewandowski : chmod -go-rwx : "rwx"권한을 소유자 및 그룹으로 설정하십시오. r = 읽기, w = 쓰기, x = execute (파일의 경우) 또는 enter / traverse (디렉토리의 경우). 777 = rwxrwxrwx (오른쪽 부분은 "set 'r'set 'w'set 'x', 'r'set 'w'set 'x', 'r'set 'w'set 'x 이진에서 "111111111"(1에서 설정, 0에서 설정 해제)로 표시되는 ' "및 이진에서"111111111 "은 8 진에서"777 "(8 진 = 3 비트의 그룹, 각 그룹의 값은 0- 7) "rwxr-xr--"이면 8 진수로 "754"인 "111101100"
Olivier Dulac

2
+ t는 고정 비트라고합니다. 권한이 777 인 경우에도 소유자 이외의 사람이 파일을 제거 할 수 없도록하는 것입니다. 스티키 비트는 원래 커널이 종료 될 때 일반적으로 프로그램을 메모리에 남겨 두도록하여 다음에 실행될 때 디스크에서 가져올 필요가 없었습니다. 우리는 PDP11 일을 얘기하고 ...
kurtm

1
@GabrielFair 나는 와일드 카드를 사용하는 명령을 그 문제에 빠지지 않는 find를 사용하여 명령으로 대체했습니다.
Gilles

10

/tmp그리고 /var/tmp모든 권리를 작성하고 실행 읽은한다 그러나 일반적으로 고정 비트 ( o+t)를 추가하면 사용자가 다른 사용자에게 속한 파일 / 디렉토리를 제거하지 못하게됩니다. 그래서 chmod a=rwx,o+t /tmp작동합니다.

재귀 적으로 권한을 변경하는 경우 ... 소유자 / 그룹이 파일 및 디렉토리에 대한 상태를 유지하는 한 큰 문제는 아닙니다. 그러나 다른 사람과 그룹 /tmprx권한을 제거하여 사용자의 개인 정보를 보호하기 위해 / tmp 자체가 아닌 모든 권한을 변경할 수 있습니다 .

찾기는이 작업을 수행하는 좋은 방법입니다. 루트로서 다음을 수행하십시오.

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})

일반적인 데스크탑 시스템에서는 /tmp/.X11-unix/*세계를 읽을 수 있게 만들 거나 X 응용 프로그램을 더 이상 시작할 수 없습니다.
Gilles

chmod a=rwX,o+t /tmp -Rfind마술을 해야합니다 .
dhill

3
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

CentOS 5.9 시스템에서.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.