/usr/bin에서 권한을 변경한 후 일부 응용 프로그램이 작동을 멈추는 이유는 무엇입니까?

/usr/bin에서 권한을 변경한 후 일부 응용 프로그램이 작동을 멈추는 이유는 무엇입니까?

OS X에서 내 친구가 /usr/bin모든 사람에게 쓰기 액세스 권한을 부여하기 위해 Finder에 대한 권한을 반복적으로 변경했습니다.

이는 다음과 같이 달성됩니다.

Finder 로 이동하여 /usr/bin정보 창 하단에서 권한을 변경하세요.

Finder 변경 권한

그 후에는 더 이상 실행할 수 없습니다 Terminal.app. 하지만 터미널 없이도 디스크 유틸리티를 실행하고 복구할 수 있습니다.

이 경우 발생하는 오류는 다음과 같습니다.

Last login: Fri Jul  4 15:39:24 on ttys001
login(27006,0x7fff78115310) malloc: *** error for object 0x7fceb3412cc0: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

다행히 이 문제를 언급하는 질문을 빨리 찾았습니다.여기.

내 첫 번째 생각은 이것이 하드웨어 문제(아마도 하드 드라이브/RAM/등의 임의의 손상)라는 것이었습니다.

이 오류는 의 잘못된 권한과 어떤 관련이 있습니까 /usr/bin?

명확한 차이점 목록을 얻기 위해 손상된 시스템에서 작업하려고 할 때 다음과 같은 결과를 얻었습니다.

$ sudo -s
sudo: effective uid is not 0, is sudo installed setuid root?

결과는 다음과 같습니다 diskutil verifyPermissions(그런데 문제가 해결되었습니다).

(너무 커서 여기에 게시할 수 없습니다)

각 줄의 형식은 다음과 같습니다.

Permissions differ on "usr/bin/sudo"; should be -r-s--x--x ; they are -rwxr-xrwx

하지만 파일 이름, 파일이 가져야 하는 권한, 현재 권한만 남았습니다.

http://pastie.org/9358204

Permissions differ on "usr/bin/login"; should be -r-sr-xr-x ; they are -rwxr-xrwx

답변1

문제는 실제로 Finder가 권한을 수정하는 방식이 상상할 수 있는 표시기 비트 이상의 영향을 미친다는 것입니다. 어떤 이유로 파일 모드의 첫 번째 옥텟을 지우고 실행 가능 비트를 변경하지 않은 채로 둡니다. 그 결과 일부 중요한 프로그램이setuid/setgid그리고sticky제거된 비트는 쓸모없거나 오작동하게 만듭니다.

/usr/bin/Windows의 일부 프로그램은 일반 프로그램보다 낮은 수준에서 시스템과 상호 작용해야 하기 때문에 setuid 비트가 필요합니다 . 예를 들어 , sudo, passwd또는 newgrplogin일반 사용자 권한 이상의 권한이 필요하므로 실행하려면 비밀번호가 필요합니다. 해당 setuid 비트가 제거되면 해당 작업을 수행할 수 없으므로 조기 종료되거나 충돌이 발생할 수 있습니다.

예를 들어 올바른 권한 /usr/bin/login4555또는 -r-sr-xr-x이고 친구의 작업 이후에는 0757또는 입니다 -rwxr-xrwx. 이것터미널 프로그램/usr/bin/login사용자를 tty 호출에 연결합니다(참조:man stty) setuid 비트가 누락되어 실패하게 됩니다. 할당되지 않은 포인터를 해제하는 것은 이와 관련된 버그일 수 있습니다. OS X 10.6.8에서는 이 포인터 오류가 발생하지 않지만터미널 프로그램시작하자마자 종료했는데 비슷한 login[6647]: pam_open_session(): system error항목을 발견했습니다 /var/log/system.log.

편집하다.Antoine Lecaille가 의견에서 언급했듯이 Terminal.app을 제대로 작동하지 않게 만드는 쉬운 방법은 $ sudo chmod -s /usr/bin/login로그인 호출에 의존하기 때문에 나중에 새 창을 열 수도 없다는 점에 유의하세요. 실행 취소하려면 를 실행하면 됩니다 $ sudo chmod +s /usr/bin/login.


다음과 같이 Finder가 권한에 미치는 영향을 테스트했습니다.

$ # create a directory with the same permissions as /usr/bin
$ mkdir -m 755 test
$ sudo chown root:wheel test
$ ls -l | grep test
drwxr-xr-x 2 root     wheel    68 Jul  6 15:01 test
$ # create 4096 empty files with all possible permissions
$ cd test
$ sudo touch file_{0..7}{0..7}{0..7}{0..7}
$ for perms in {0..7}{0..7}{0..7}{0..7}; do sudo chmod $perms file_$perms; done

속도가 느리기 때문에 루프를 for완료하는 데 1분 정도 걸릴 수 있습니다 chmod. 그 후에는 폴더에 file_wxyz권한이 있는 파일이 있습니다. 예를 들어wxyztest

$ ls -l file_4555
-r-sr-xr-x 1 root wheel 0 Jul  6 15:02 file_4555

$ open .이제 친구의 스턴트를 복사하고 Finder: 및 Cmd+를 사용하여 폴더와 모든 콘텐츠의 권한을 변경 I하고 게시물에서 설명한 대로 수행할 수 있습니다. 나는 그룹 휠 읽기 권한과 모든 사람에게 읽기+쓰기 권한을 부여하기로 결정했습니다.

이제 파일에 어떤 일이 발생하는지 살펴보겠습니다. 다음 파이프라인은 디렉터리를 나열하고, 권한이 포함된 열을 읽고, 이를 정렬하고 중복 행을 억제합니다.

$ ls -l | awk '{print $1}' | sort -u
-rw-r--rw-
-rw-r--rwx
-rw-r-xrw-
-rw-r-xrwx
-rwxr--rw-
-rwxr--rwx
-rwxr-xrw-
-rwxr-xrwx
total
$ ls -l file_4555
-rwxr-xrwx 1 root wheel 0 Jul  6 15:02 file_4555

보시다시피 setuid/setgid/sticky 비트는 더 이상 설정되지 않습니다. 모든 파일은 동일한 읽기 및 쓰기 권한을 가지며 이제 실행 비트에서만 권한이 다릅니다(이 중 8가지 가능한 조합이 있습니다).

답변2

짧은 답변

/usr/bin폴더의 권한을 변경하면 해당 권한이 수정되지 않으므로 /usr/bin심볼릭 링크에 대한 권한이 잘못 설정되어 포인터가 액세스할 수 없는 일부 메모리를 참조하게 됩니다(내가 아는 한 으로 인해 액세스할 수 없음).권한질문).

자세한 답변

/bin – 사용자 바이너리

  1. 바이너리 실행 파일이 포함되어 있습니다.
  2. 단일 사용자 모드에서 사용해야 하는 일반적인 Linux 명령은 이 디렉터리에 있습니다.
  3. 시스템의 모든 사용자가 사용하는 명령이 여기에 있습니다.
  4. 예: ps, ls, ping, grep, cp.

이제 권한을 변경했습니다 /usr/bin. 그럼 심볼릭 링크 권한이 어떻게 영향을 받는지 살펴보겠습니다.

~에서위키피디아 항목Symbolic link:

심볼릭 링크의 파일 시스템 권한은 일반적으로 링크 자체의 이름 바꾸기 또는 삭제 작업에만 관련되며 대상 파일 자체의 권한에 의해 제어되는 대상 파일의 액세스 모드와는 아무 관련이 없습니다.

이제 기본 파일의 권한을 변경해도 심볼릭 링크의 권한에는 영향을 미치지 않는다는 것이 분명해졌습니다.

그렇다면 이 오류는 정확히 무엇을 의미합니까?

이는 코드가 사용되지 않은 malloc/할당된 콘텐츠를 해제하려고 시도하고 있음을 의미합니다 realloc. 또한 데드 포인터를 해제된 메모리로 반환하는 이유는 무엇입니까?

위의 관찰을 바탕으로 권한을 변경한 후에는 심볼릭 링크를 참조할 수 없기 때문에 포인터가 유효하지 않은 것입니다(심볼릭 링크에 대한 적절한 권한이 없음). 따라서 위의 오류가 발생합니다.

인용하다

https://stackoverflow.com/questions/14575545/pointer-freed-not-allocation https://superuser.com/questions/303040/how-do-file-permissions-apply-to-symlinks https://superuser.com/questions/395035/are-world-read-writable-executable-links-in-usr-bin-security-holes

관련 정보