끈적 끈적한 비트는 어떻게 작동합니까?


148

SUID

스티키 비트는 프로그램이 실행을 완료 한 후 메모리에 프로그램의 이미지를 유지하기 위해 시스템을 신고 실행 프로그램에 적용.

그러나 메모리에 저장된 것이 무엇인지 모르겠습니다. 이 경우 어떻게 볼 수 있습니까?


다음은 작동하는 예제와 설명이 포함 된 유용한 자습서입니다. 이것을 이해하는 열쇠는 관련된 8 진법입니다. 잘 작동하는 예제가있는 Linux 스티키 비트 튜토리얼 .
CMP

답변:


193

이것은 아마도 사람들이 항상 엉망으로 만드는 가장 짜증나는 일 중 하나 일 것입니다. SUID / GUID 비트와 스티키 비트는 완전히 다른 두 가지입니다.

당신이하는 경우 man chmodSUID 및 스티커 비트에 대해 읽을 수 있습니다. man 페이지는 여기에서 확인할 수 있습니다 뿐만 아니라.

배경

발췌

영향을받는 사용자에 대한 문자 rwxXst 선택 파일 모드 비트 : 읽기 (r), 쓰기 (w), 실행 (또는 디렉토리 검색) (x), 파일이 디렉토리이거나 일부에 대해 이미 실행 권한이있는 경우에만 실행 / 검색 user (X), 실행시 사용자 또는 그룹 ID , 제한된 삭제 플래그 또는 sticky bit (t)를 설정 합니다.

SUID / GUID

위의 맨 페이지에서 말하려는 것은 사용자 8 진 (rwx의 첫 번째 그룹) 및 8 진 그룹 (rwx의 두 번째 그룹)에 대해 x 비트가 rwxrwxrwx에서 취하는 위치는 x가되는 추가 상태를 취할 수 있다는 것입니다. s. 이 파일이 실행될 때이 파일이 실행될 때 (쉘 스크립트가 아닌 프로그램 인 경우) 소유자 또는 파일 그룹의 권한으로 실행됩니다.

따라서 파일이 루트가 소유하고 SUID 비트가 켜져 있으면 프로그램이 루트로 실행됩니다. 일반 사용자로 실행하더라도. GUID 비트에도 동일하게 적용됩니다.

발췌

SETUID 및 SETGID 비트

chmod는 파일의 그룹 ID가 사용자의 유효한 그룹 ID 또는 사용자의 보조 그룹 ID 중 하나와 일치하지 않으면 사용자에게 적절한 권한이없는 경우 일반 파일의 set-group-ID 비트를 지 웁니다. 추가 제한 사항으로 인해 MODE 또는 RFILE의 set-user-ID 및 set-group-ID 비트가 무시 될 수 있습니다. 이 동작은 기본 chmod 시스템 호출의 정책 및 기능에 따라 다릅니다. 확실하지 않은 경우 기본 시스템 동작을 확인하십시오.

chmod는 달리 지정하지 않으면 디렉토리의 set-user-ID 및 set-group-ID 비트를 유지합니다. u + s 및 gs와 같은 기호 모드를 사용하여 비트를 설정하거나 지울 수 있으며 숫자 모드를 사용하여 비트를 설정 (클리어하지는 않음) 할 수 있습니다.

SUID / GUID 예

suid / guid 없음 -비트 rwxr-xr-x 만 설정됩니다.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid & user 's executable bit enabled (소문자 s) -비트 rwsr-xrx 가 설정되었습니다.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid enabled 및 executable bit disabled (대문자 S) -비트 rwSr-xr-x 가 설정됩니다.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

guid & group의 실행 비트 활성화 (소문자 s) -비트 rwxr-sr-x 가 설정됩니다.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid 활성화 및 실행 비트 비활성화 (대문자 S) -비트 rwxr-Sr-x 가 설정됩니다.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

끈적 끈적한 비트

반면에 스티커 비트 t/tmp디렉토리 와 같이 로 표시됩니다 .

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

이 비트는 항상 "제한된 삭제 비트"라고 불려야합니다. 이 모드 비트가 활성화되면 사용자가 소유자 인 파일 및 디렉토리 내에서만 파일 및 디렉토리를 삭제할 수 있도록 디렉토리를 만듭니다.

발췌

제한된 삭제 플래그 또는 끈적한 비트

제한된 삭제 플래그 또는 고정 비트는 단일 비트이며 해석은 파일 유형에 따라 다릅니다. 디렉토리의 경우
권한이없는 사용자가 파일이나 디렉토리를 소유하지 않는 한 디렉토리에서 파일을 제거하거나 이름을 바꾸는 것을 방지합니다. 이것을 디렉토리의 제한된 삭제 플래그라고하며, 일반적으로 / tmp와 같은 쓰기 가능한 디렉토리에서 찾을 수 있습니다. 일부 구형 시스템의 일반 파일의 경우 비트는 프로그램의 텍스트 이미지를 스왑 장치에 저장하므로 실행시 더 빨리로드됩니다. 이것을 끈적 끈적한 비트라고합니다.


43
실제로 고정 비트는 이전에 실행 파일에 적용되어 처음로드 된 후에도 스왑 상태로 유지되었습니다. 이렇게하면 많이 사용 된 프로그램에 대해 불필요한 디스크 / 네트워크 (NFS) 및 CPU 사용량을 많이 절약 할 수 있습니다. 그러나 리눅스 나 대부분의 유닉스 시스템은 더 이상 이것을 지원하지 않습니다 (커널에서 제거되었습니다). 실행 파일이 스왑 상태에 빠졌기 때문에 "sticky"입니다. 또한 설명하는대로 디렉토리에 사용되었습니다.
Baard Kopperud 2016 년

4
실제로 "많이 사용되거나 매우 큰"것이 더 나은 설명입니다. 우리 대학은 1995 년에 HP-UX 컴퓨터에서 Netscape 웹 브라우저를 "고정"으로 사용했음을 기억하십시오. 매우 자주 사용되는 작은 프로그램 (예 : cron에서 자주 실행하는 시스템 명령)과 큰 프로그램 (예 : Netscape) "끈적 거리는"주요 후보였다. 두 경우 모두 디스크 / NFS에서 지속적으로 다시로드하면 낭비가됩니다.
Baard Kopperud 2016 년

8
스티키 비트 프로그램은 스왑이 아닌 RAM에 상주하기위한 것입니다 (스왑 파일에서 이미지를로드하는 것이 파일 시스템 디스크에서로드하는 것보다 그리 빠르지 않습니다). 이 같은 필수 OS 수준 명령을위한 것 ls입니다. 분명히 슈퍼 유저 만이 파일에 고정 비트를 설정할 수 있습니다. 가상 메모리와 공유 라이브러리가 도입 된 후, 특히 페이저가 더 똑똑해지고 어떤 페이지를 상주 시킬지 동적으로 결정할 수있게됨에 따라 그 중요성이 줄어 들었습니다.
Alexis

4
또한 sticky 특성이 디렉토리에 적합하지 않기 때문에 나중에 동일한 권한 마스크 비트가 디렉토리 의 기존 파일 작성 시맨틱을 수정하도록 해석되었습니다.
Alexis

5
@alexis : 원래, 고정 비트 프로그램은 스왑 공간에 보관되었습니다. 스왑 파일 이미지를 읽는 것은 연속적인 섹터이므로 대부분 비동기 적으로 읽을 수 있기 때문에 파일 시스템에서 읽는 것보다 훨씬 빠릅니다. 초기 파일 시스템에서는 섹터 "실행 길이"가 없었으며 대부분의 초기 파일 시스템 드라이버는 섹터가 연속적으로 발생하더라도 한 번에 한 섹터를 읽습니다. PDP-40의 결과는 끈적 끈적한 프로그램이 즉시로드되는 것처럼 보였지만 끈적 거리지 않은 프로그램은 보통 2 ~ 2 초가 걸렸습니다. 나는 우리가 ed끈적 끈적한 것 같아요 .
wallyk

8

"스티커 비트는 프로그램 실행이 완료된 후 프로그램 이미지를 메모리에 유지하기 위해 시스템에 플래그를 지정하는 실행 프로그램에 적용되었습니다."

나는 그것이 쓸모없는 정보라고 생각합니다. 오늘날 대부분의 현대 유닉스는 그것을 무시합니다. Linux에서 고정 비트는 디렉토리에만 관련됩니다. 참조 여기 와 매우 유익한 위키 백과 문서 .

어쨌든, 그 오래된 행동에서 이미지 (데이터가 아닌 "코드"만)는 가상 메모리에만 보관되었습니다. 일반적으로 실제 메모리가 아닌 스왑되어 다음에 더 빨리 실행합니다.


3

스티커 비트 란 무엇입니까?

고정 비트는 해당 디렉토리 내의 파일 소유자 또는 루트 사용자 만 파일을 삭제하거나 이름을 바꿀 수있는 디렉토리에 설정된 권한 비트입니다. 다른 사용자가 다른 사용자가 작성한 파일을 삭제하는 데 필요한 권한이 없습니다.

다른 사용자에게는 모든 권한이 있지만 중요한 폴더 및 해당 내용 (하위 디렉터리 및 파일)이 삭제되지 않도록하기위한 보안 조치입니다.


1
맞지 않습니다 : en.wikipedia.org/wiki/Sticky_bit
AB

7
@AB 그것은 당신이 인용 한 Wikpedia 기사의 시작 부분을 역설하는 시점까지 꽤 정확 해 보입니다. 무슨 일이야?
roaima

나는 대답이 불완전하다고 말한다. "Sticky"는 실행 파일이보다 빨리 실행되도록 스왑 공간에 유지됨을 나타냅니다. 이제는 오래된 역사이지만 오래된 파일 시스템에서는 섹터가 연속적 일지라도 한 번에 한 섹터를 읽는 데 사용되는 드라이버입니다. 이로 인해 스티커가 아닌 실행 파일이 느려졌으며 그 당시에는 끈적 거리는 것이 합리적이었습니다.
GhostCode
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.