예를 들어 / usr / sbin의 실행 파일이 루트로 쓰기 가능한 이유는 무엇입니까?


31

바이너리 컴파일 된 파일 (예 /usr/sbin:)이 root사용자에게 쓰기 권한을 갖는 이유를 설명해 주 시겠습니까?

나를 위해, 이것은 컴파일됩니다. 직접 쓰기를 사용하지 않고 파일을 보안 문제에 노출시킬 수 있음을 의미합니다.

스크립트 (예 : bash파일)는 기본적으로 텍스트 파일이기 때문에 쓰기 가능할 수 있지만, 내가 아는 한 실제로 쓸 필요가없는 컴파일 된 파일의 경우 왜 같은가요?

의견을 보내 주셔서 감사합니다.


6
명확히하기 위해 사용자 root가 왜 바이너리 파일에 대한 쓰기 권한을 가지고 있는지 궁금 하십니까? 그 외에는 패키지 업그레이드시 도움이되지 않습니다.
Eric Renouf

5
아이러니하게 바이너리 파일은 일반적으로 디스크에서 직접 쓰거나 편집하는 유일한 파일입니다. 텍스트 수정은 파일에 쓰지 않고 파일 중간에 여분의 바이트를 추가하거나 파일 중간에 바이트를 삭제하기 때문에 스크립트와 같은 텍스트 파일로는 그렇게 할 수 없습니다. fseek fwrite로는 불가능합니다. 따라서 텍스트 파일의 경우 일반적으로 RAM을 읽은 다음 이전 파일을 삭제하고 RAM의 내용을 디스크에 씁니다 (즉, 덮어 씁니다). 또한 실행 파일을 설치, 이동 또는 교체 할 때 디스크에 쓰고 있으므로 쓰기 권한이 필요합니다.
slebetman

1
@slebetman : 텍스트 파일을 직접 편집 할 수 있습니다. 예를 들어, 파일을 열고, 확장하고, 메모리에 매핑하고, memmove()마지막 부분을 끝으로 이동하고 구멍을 연 다음 구멍에 새 텍스트를 삽입하는 데 사용합니다. 또는 일련의 pread()/ pwrite()를 사용 하여 동일한 작업을 수행 할 수 있습니다 .
Zan Lynx

6
@EricRenouf 실제로 바이너리 파일에 대한 쓰기 권한은 파일이 포함 된 패키지를 업그레이드하는 데 필요 하지 않습니다 . 패키지 업그레이드시 이전 바이너리는 기록되지 않습니다. 실제로 바이너리가 현재 실행중인 경우 불가능합니다 (검색 ETXTBSY). 대신 이전 바이너리가 제거 되고 새 바이너리가 동일한 이름의 새 파일에 기록됩니다. 파일을 제거 할 때는 파일을 포함하는 디렉토리 (예 :)에 대한 쓰기 권한이 필요하지 않습니다 /usr/sbin/.
marcelm

1
@marcelm : 엄밀히 말하면 fseek 및 write를 사용하는 것이 아니라 나머지를 RAM에 버퍼링하는 것입니다. 나머지를 다른 파일로 버퍼링 할 수도 있습니다. 또는 새 컨텐츠를 새 파일에 쓸 수 있습니다. 어느 것도 큰 버퍼없이 텍스트 파일을 확장 할 수 없습니다.
slebetman

답변:


50

실제로 파일 /bin(또는 실행 파일이 보관 된 다른 표준 디렉토리)이 루트로 쓰기 가능한지 여부는 중요 하지 않습니다. 내가 사용하는 Linux 서버에서는 루트로 쓸 수 있지만 OpenBSD 컴퓨터에서는 그렇지 않습니다.

그룹이나 "다른 사람"이 쓸 수없는 한!

보안 문제가 없습니다. 예 :

-rwxr-xr-x 1 root root 126584 Feb 18  2016 /bin/ls

누군가 덮어 쓰기를 원했다면 루트 여야 root하고, 덮어 쓰면 둘 중 하나입니다.

  1. 새 버전을 설치하거나
  2. 서투른
  3. 공격자 이미 루트 권한 .

고려해야 할 또 다른 사항은 루트가 쓰기 보호 여부에 관계없이 루트가 파일에 쓸 수 있다는 것입니다. 왜냐하면 루트이기 때문입니다.

"스크립트"는 바이너리 파일만큼 실행 가능한 파일입니다. "텍스트 파일이기 때문에"스크립트는 쓰기 가능할 필요가 없습니다. 어떤 경우에는 같은 디렉토리에있는 다른 실행 파일과 동일한 권한을 가져야합니다.

지금 모든 것에 대한 권한을 변경하지 마십시오! 이로 인해 권한이 올바르게 설정되었는지 확인할 수있는 모든 종류의 혼란과 잠재적 인 혼란이 발생할 수 있습니다. 또한 보안이 중요한 응용 프로그램에서 실수로 권한을 잘못 변경하면 시스템이 취약해질 수 있습니다.

실제로 이상한 것으로 보이지 않는 한 실행 파일에 대한 권한이 올바르게 설정되었다고 가정하면, 변경 사항을 시작하기보다는 관련 패키지 관리자에게 문의해야합니다.


댓글 과 채팅 에서 일부 역사가 필요했습니다.

Linux 바이너리 대한 권한 기록은 내가 아는 것이 아닙니다. 디렉토리 또는 umaskLinux 의 기본 권한을 단순히 상속받은 것으로 추측 되지만 실제로는 모르겠습니다.

내가 아는 것은 OpenBSD가 기본 시스템 1에 바이너리를 기본적으로 권한 모드 555로 설치한다는 것입니다 ( -r-xr-xr-x). 이것은 메이크 조각에 지정된에 /usr/share/mk/bsd.own.mk있는 세트 BINMODE555 (그것은 이미 설정되어 제외). 동안 실행 파일을 설치할 때 나중에 사용됩니다 make build에서 /usr/src.

이 파일에 대한 주석달린 CVS 로그를 살펴본 결과 1995 년 NetBSD에서 가져온 이후 파일의이 행이 변경되지 않은 것으로 나타났습니다.

NetBSD에서 파일은 1993 년 CVS처음BINMODE 으로 555 로 설정되었습니다.

FreeBSD 프로젝트는 NetBSD에와 동일한 파일을 사용하는 것 같습니다 적어도 1994 년부터 , 그리고 A는 나중에 커밋하는 것은 (가) 기존 파일이 버클리 소프트웨어 배포의 4.4BSD의 릴리스라고 커밋 메시지에서 힌트를 추가합니다.

그 외에도 Berkeley의 CSRG 는 소스를 SCCS에 보관 했지만 저장소는 GitHub 2 에서 Git 형식으로 제공됩니다 . 우리가 여기에 forencic treatement을 제공하고 있다는 파일은 커밋 된 것으로 보인다 의해 키스 보 스틱 1990 년 (또는 그 가까이에있는 사람).

이것이 그 이야기입니다. 이유 를 원한다면 Keith에게 물어봐야 할 것 같습니다. 나는 " 이것은 555이기 때문에 ... " 라고 말하는 변경에 대한 커밋 메시지를보고 싶었지만 아니었다.

1 BSD 시스템은 Linux보다 "기본 시스템"과 "타사 패키지"(포트 / 패키지)로 엄격하게 구분됩니다. 기본 시스템은 운영 체제를 실행하기위한 완전한 기능 세트 를 제공하는 일관된 장치이며 포트 또는 패키지는 "로컬 소프트웨어"로 표시되며 아래에 설치됩니다 /usr/local.

2 70 년대 이후부터보다 포괄적 인 Unix 릴리스의 GitHub 리포지토리 도 사용할 수 있습니다 .


1
답변 주셔서 감사합니다. 쓰기 권한은 루트 사용자 인 것처럼 중요하지 않기 때문에 정상적인 것입니다 (아무것도 할 수 있음). 그러나 실제로 중요하지 않으므로 처음부터 동일한 경우 쓰기 권한을 부여하지 않는 이유는 무엇입니까? 자의적인 결정입니까?
t1m0th33

1
@ t1m0th33 누군가가 내린 결정은 자의적 일 수 있습니다. 내가 말했듯이, OpenBSD 시스템에서 해당 위치의 파일은 쓸 수 없습니다 root.
Kusalananda

1
나는 그것이 누군가에 의한 의식적인 결정이라고 생각하지 않습니다. 패키지 관리자는 기본적으로 빌드 프로세스 중에 종료 된 권한 비트로 파일을 설치합니다. 그건 당신이 777에서 umask를 뺄 때 무엇을 얻을, 그리고 (운영 체제 공급 업체의 빌드 머신에서) umask를 루트 때문에 링커를 구축하는 권한을 755으로 파일을 생성하는 동안 022의 기본 umask를하기 때문에 건물은 022 동안 한 사람 과 결정이 루트는 무의미한 추가 작업이기 때문에 222입니다.
Henning Makholm

8
"지금 모든 것에 대한 권한을 변경하지 마십시오!"+1 나는 사용자가 한 우분투 질문에 그 같은 많은 질문을 참조 chmod -R/usr또는 /var자신의 -과 놀라움을 sudo작동하지 않거나 다른 뭔가가 작동하지 않습니다.
Sergiy Kolodyazhnyy 2012 년

4
역사적으로 루트에 대한 쓰기 권한이 없으면 아무런 영향을 미치지 않습니다 (루트는 아무 것도 chmod 할 수 있으며, 루트는 절대 EPERM을 열거 나 쓰지 않기 때문에 필요하지 않습니다). 루트가 제한 될 수 있었기 때문에이 555 항목이 시작되었는지 궁금합니다 (4.4BSD 또는 초기 386BSD / NetBSD와 같은 시간에 보안 레벨이 처음 표시 될 때?)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.