스틱 비트

Sticky bit

컴퓨팅에서 스틱비트Unix 계열 시스템의 파일 및 디렉토리할당할 수 있는 사용자 소유권 접근권 플래그입니다.

파일용과 디렉토리용 두 가지 정의가 있습니다.

파일, 특히 실행 파일의 경우, 슈퍼 유저는, 다른 요구가 발생했을 때에 발생하는 스왑을 최소한으로 억제하기 위해서, 이러한 파일을 메인 메모리에 보존하도록 태그를 붙일 수 있습니다.이러한 경우, 비교적 느린 secondary [1]메모리에서 파일을 새로고침해야 합니다.이 기능은 스왑 최적화로 인해 사용되지 않게 되었습니다.

디렉토리의 경우 디렉토리의 스틱비트가 설정되어 있는 경우, 파일시스템은 이러한 디렉토리의 파일을 특수한 방법으로 취급하기 때문에, 파일의 소유자, 디렉토리의 소유자, 또는 루트 유저만이 파일의 이름을 변경하거나 삭제할 수 있습니다.고정 비트가 설정되지 않은 경우 디렉토리에 대한 쓰기 및 실행 권한을 가진 사용자는 파일 소유자에 관계없이 포함된 파일의 이름을 바꾸거나 삭제할 수 있습니다.일반적으로 이것은 일반 사용자가 다른 사용자의 파일을 삭제하거나 이동하는 것을 방지하기 위해 디렉토리에 설정됩니다.

스틱 비트의 최신 기능은 디렉토리를 참조하고 디렉토리와 그 컨텐츠가 비소유자에게 납치되는 것을 방지합니다.이것은 대부분의 최신 Unix 계열 시스템에서 볼 수 있습니다.다음과 같은 공유 디렉토리에 있는 파일/tmp개별 소유자에게 속하며, 비소유자는 삭제, 덮어쓰기 또는 이름 변경을 할 수 없습니다.

역사

스틱 비트는 순수 실행 [2]파일용으로 Unix의 제5판(1974년)에 도입되었습니다.설정 시 운영체제프로세스가 종료된 후 프로그램의 텍스트 세그먼트를 스왑 공간에 유지하도록 지시했습니다.이를 통해 커널이 스왑에서 실제 메모리로 프로그램을 이동하는 단일 작업을 수행할 수 있으므로 이후 실행 속도가 빨라집니다.따라서 편집자처럼 자주 사용하는 프로그램은 눈에 띄게 빠르게 로딩됩니다."고정" 프로그램의 한 가지 주목할 만한 문제는 실행 파일을 교체하는 것입니다(예를 들어 패치 적용 중). 그렇게 하려면 실행 파일에서 스틱 비트를 제거하고 프로그램을 실행한 후 캐시 플러시를 위해 종료하고 바이너리 실행 파일을 교체한 다음 스틱 비트를 복원해야 합니다.

그 후 이 동작은 HP-UXUnixWare에서만 동작하게 되었습니다.Solaris는 2005년에 [citation needed]이를 포기한 것으로 보입니다.BSD의 4.4 Lite 릴리스에서는 오래된 스틱비트 동작이 유지되고 있습니다만, 그 후 OpenBSD(릴리스 3.7) 및 FreeBSD(릴리스 2.2.1)에서 폐기되었습니다.Linux 버전에서는 지금까지 이 기존 동작을 지원하지 않았습니다.Linux는 모든 파일과 동일한 방법으로 실행 파일의 캐시를 수행하므로 캐시를 플러시하기 위해 프로그램을 다시 실행할 필요가 없습니다.

사용.

스틱 비트의 가장 일반적인 용도는 Unix 계열 운영체제용 파일시스템 내에 있는 디렉토리입니다.디렉토리의 스틱비트가 설정되어 있는 경우, 파일 시스템은 이러한 디렉토리의 파일을 특수한 방법으로 취급하기 때문에, 파일의 소유자, 디렉토리의 소유자, 또는 루트만이 파일의 이름을 변경하거나 삭제할 수 있습니다.고정 비트가 설정되지 않은 경우 디렉토리에 대한 쓰기 및 실행 권한을 가진 사용자는 파일 소유자에 관계없이 포함된 파일의 이름을 바꾸거나 삭제할 수 있습니다.일반적으로 이것은 일반 사용자가 다른 사용자의 파일을 삭제하거나 이동하는 것을 방지하기 위해 디렉토리에 설정됩니다.이 기능은 4.3에서 도입되었습니다.1986년에 BSD가 출시되었으며, 오늘날에는 대부분의 현대 Unix 계열 시스템에서 볼 수 있습니다.

또한 Solaris(Solaris 2.5 이후)에서는 실행 불가능한 파일에 스틱비트가 설정되어 있는 경우의 특수한 동작이 정의되어 있습니다.이러한 파일에 액세스해도 커널에 의해 캐시되지 않습니다.일반적으로 이 설정은 스왑 파일에 대해 설정되며 파일 액세스가 시스템 캐시에서 더 중요한 데이터를 플러시하지 않도록 합니다.벤치마킹 [citation needed]테스트에도 가끔 사용됩니다.

스틱 비트도 파일이 아직 마운트되지 않았음을 나타내기 위해 오토마운터에 의해 설정됩니다.이를 통해 ls와 같은 프로그램은 마운트 해제된 원격 파일을 무시할 수 있습니다.

디렉토리 및 파일에 대한 스틱 비트의 영향에 대한 man 페이지 발췌
운영 체제 디렉토리 파일
AIX 5.2[3] 는 지정된 디렉토리의 파일을 링크 또는 링크 해제할 수 있는 것은 파일 소유자뿐임을 나타냅니다. save-text Atribut을 설정합니다.
Solaris 11[4] 디렉토리에 기입이 가능하고, S_ISVTX(스틱 비트)가 설정되어 있는 경우, 그 디렉토리내의 파일은 다음의 1개 또는 복수의 경우에 한해 삭제 또는 이름을 변경할 수 있습니다(unlink(2) 및 rename(2) 참조).사용자는 파일을 소유하며, 사용자는 디렉토리를 소유하며, 사용자는 파일을 쓸 수 있으며, 사용자는 특권 사용자입니다. 일반 파일을 실행할 수 없고 S_ISVTX가 설정되어 있는 경우 해당 파일은 스왑 파일로 간주됩니다.이 경우 시스템의 페이지 캐시는 파일의 데이터를 보관하는 데 사용되지 않습니다.다른 파일에 [...]을(를) 설정하면 결과가 지정되지 않습니다.
HP-UX[5] 디렉터리에 [...]를 설정한 경우 권한이 없는 사용자는 해당 디렉터리에 있는 다른 사용자의 파일을 삭제하거나 이름을 변경할 수 없습니다. [...] 를 사용하면 마지막 사용자가 종료할 때 파일의 프로그램 텍스트 부분의 스왑 공간 이미지가 시스템에서 폐기되지 않습니다.그 후 파일의 다음 사용자가 실행할 때 파일 시스템에서 텍스트를 읽을 필요가 없고 단순히 스왑 인할 수 있기 때문에 시간을 절약할 수 있습니다.
리눅스[6][7] 디렉터리에 [...]를 설정한 경우 해당 디렉터리의 파일은 루트, 디렉터리 소유자 또는 파일 소유자에 의해서만 연결을 해제하거나 이름을 바꿀 수 있습니다.fs.protected_fifos, fs.protected_regular 및 fs.protected_symlinks sysctls는 스틱비트가 설정된 디렉토리 내의 FIFO 작성, 일반 파일 작성 및 다음 심볼링크를 각각 제한합니다. Linux 커널은 파일의 스틱비트를 무시합니다
FreeBSD[8] 디렉터리에 [...]를 설정한 경우 권한이 없는 사용자는 해당 디렉터리에 있는 다른 사용자의 파일을 삭제하거나 이름을 변경할 수 없습니다. 프리비SD VM 시스템은 실행 파일의 스틱 비트(S_ISVTX)를 완전히 무시합니다.
IRIX[9] 디렉토리에 [...]가 설정되어 있는 경우, 그 디렉토리에 작성된 파일은 호출 프로세스의 그룹 ID가 아닌 디렉토리의 그룹 ID를 사용합니다.mount(1M)를 사용하여 디렉토리 모드에 관계없이 이 기능을 사용할 수 있습니다. 스틱 비트 S_ISVTX가 ELF 실행 파일의 다이내믹 로더인 파일에 설정되어 있는 경우 실행 파일이 실행되면 이전 프로세스의 읽기 전용 주소 공간이 새 프로세스에서 다이내믹 로더에 사용 가능하게 됩니다.이를 통해 프로그램 시작 시간을 크게 단축할 수 있습니다.다른 파일의 스틱비트 설정은 영향을 주지 않습니다.
Mac OS X (Leopard)[10] '스틱 비트'가 설정된 디렉터리는 파일 삭제가 제한된 추가 전용 디렉터리 [...]가 됩니다.스틱 디렉토리의 파일은 사용자가 디렉토리에 대한 쓰기 권한을 가지고 있고 사용자가 파일의 소유자, 디렉토리의 소유자 또는 슈퍼 사용자일 경우에만 삭제 또는 이름을 변경할 수 있습니다.이 기능은 /tmp 등의 디렉토리에 유용하게 적용됩니다.이 디렉토리는 공개적으로 쓰기 가능해야 하지만 사용자가 서로의 파일을 임의로 삭제하거나 이름을 변경할 수 있는 라이선스를 거부해야 합니다.모든 사용자가 스틱디렉토리를 작성할 수 있습니다. 스틱 비트는 실행 파일에는 영향을 주지 않습니다.텍스트 이미지가 메모리에 남아 있는지 여부에 대한 모든 최적화는 커널의 가상 메모리 시스템에 의해 처리됩니다.
넷BSD[11] 「스틱 비트」가 설정된 디렉토리는, 파일의 삭제가 제한되는 디렉토리가 된다.스틱 디렉토리의 파일은 사용자가 디렉토리에 대한 쓰기 권한을 가지고 있고 사용자가 파일의 소유자, 디렉토리의 소유자 또는 슈퍼 사용자일 경우에만 삭제 또는 이름을 변경할 수 있습니다.이 기능은 /tmp 등의 디렉토리에 유용하게 적용됩니다.이 디렉토리는 공개적으로 쓰기 가능해야 하지만 사용자가 서로의 파일을 임의로 삭제하거나 이름을 변경할 수 있는 라이선스를 거부해야 합니다. NetBSD는 현재 스틱비트가 특별히 설정된 일반 파일을 취급하지 않지만, 이 동작은 향후 변경될 수 있습니다.
오픈BSD[12] 「스틱 비트」가 설정된 디렉토리에서는, 파일 삭제에 제한이 있습니다.스틱 디렉토리내의 파일은, 유저가 디렉토리에의 기입 권한을 가지고 있고, 유저가 파일의 소유자, 디렉토리의 소유자, 또는 슈퍼 유저인 경우에만 삭제 또는 이름을 변경할 수 있습니다.이 기능은 /tmp 등의 디렉토리에 유용하게 적용됩니다.이 디렉토리는 공개적으로 쓰기 가능해야 하지만 사용자가 서로의 파일을 임의로 삭제하거나 이름을 변경할 수 있는 라이선스를 거부해야 합니다.

모든 사용자가 스틱디렉토리를 작성할 수 있습니다.파일 모드 변경에 대한 자세한 내용은 chmod(1)를 참조하십시오.

지금까지 스틱 비트가 설정된 실행 가능 공유 파일은 실행 후 스왑 공간에서 즉시 폐기되지 않았습니다.커널은 나중에 재사용할 수 있도록 파일의 텍스트 세그먼트를 저장하여 프로그램을 다시 로드할 필요가 없습니다.이는 최신 시스템에서는 더 이상 해당되지 않습니다. 현재의 가상 메모리 시스템은 최근에 사용된 실행 파일을 추적하여 파일용 스틱 비트를 장황하게 만듭니다.스틱 비트는 파일에 계속 설정할 수 있지만 영향은 없습니다.

파일에 스틱비트를 설정할 수 있는 것은 슈퍼 유저뿐입니다만, 파일의 소유자가 스틱비트를 클리어 할 수 있습니다.

SCO UnixWare[13] 디렉토리에 기입이 가능하고, 그 디렉토리에 스틱비트 S_ISVTX 가 설정되어 있는 경우는, 다음의 몇개의 조건이 만족하는 경우에 한정해, 그 디렉토리내의 파일을 삭제하거나 이름을 변경할 수 있습니다.
  • 프로세스의 유효한 사용자 ID는 파일의 소유자 ID와 동일합니다.
  • 프로세스의 유효 사용자 ID는 디렉토리의 소유자 ID와 동일합니다.
  • 프로세스에 파일에 대한 쓰기 권한이 있습니다.
  • 프로세스에는 P_OWNER 권한이 있습니다.
0410 a.out 실행 가능 파일에 스틱비트(모드비트 01000)가 설정되어 있는 경우 마지막 사용자 프로세스가 종료될 때 OS는 스왑 영역에서 프로그램 텍스트를 삭제하지 않습니다.0413 a.out 또는 ELF 실행 파일에 스틱비트가 설정되어 있는 경우 운영체제는 마지막 사용자 프로세스가 종료될 때 프로그램텍스트를 메모리에서 삭제하지 않습니다.어느 경우든 스틱비트가 설정되어 있는 경우 파일의 다음 사용자가 실행할 때 텍스트는 이미 (스왑 영역 또는 메모리 중 하나로) 사용할 수 있으므로 실행 속도가 빨라집니다.

스틱 비트는 chmod 명령을 사용하여 설정할 수 있습니다.또한 8진수 모드1000 또는 그 기호t로 설정할 수 있습니다(s는 이미 setuid 비트에서 사용되고 있습니다).예를 들어 디렉터리에 비트를 추가하려면/usr/local/tmp를 입력합니다.또는, 그 디렉토리가 표준인 것을 확인합니다.tmppermissions, 라고 입력할 수도 있습니다.

클리어 하려면 , 또는 를 사용합니다(후자에서도,tmp디렉토리에서 표준 권한으로).

Unix 심볼 파일 시스템 허가 표기법에서 스틱비트는 다른 카테고리의 실행비트가 각각 설정되어 있는지 또는 설정되어 있지 않은지에 따라 마지막 문자 자리에서의 문자 t 또는 T로 표시됩니다.예를 들어 Solaris 8에서는/tmp디폴트로는 다른 디렉토리는 모두 실행 비트와 스틱비트가 설정되어 있습니다.디렉토리는 다음과 같이 표시됩니다.

$ ls - ld / tmp drwxrwt 4 root sys 485 11월 10일 06:01 / tmp

기타 카테고리(사용자 소유자가 아닌 경우 및 그룹 소유자가 아닌 경우)에 대해 실행 비트가 설정되어 있지 않은 파일 또는 디렉토리에 스틱 비트가 설정되어 있는 경우, 이 비트는 대문자 T로 표시됩니다(그렇지 않은 경우 - 대체).

# ls - l test - rw - r -- 1 root anygroup 0 11월 10일 12:57 test # chmod + test; ls - l test - rw - r -- r - T1 root anygroup 0 11월 10일 12:57 test

「 」를 참조해 주세요.

레퍼런스

  1. ^ Zintz, Walter (February 1984). "The Unix Connection: What is a sticky bit?". HARDCOPY. p. 130.
  2. ^ Steinhauser, Martin Oliver (2012). Computer Simulation in Physics and Engineering. ISBN 978-3-1102-5590-4.
  3. ^ "Archived copy of chmod man page under AIX 5.2". Archived from the original on 2005-01-18. Retrieved 2009-01-19.
  4. ^ "Synopsis - man pages section 2: System Calls". Docs.oracle.com. 2011-11-01. Retrieved 2014-04-10.
  5. ^ HPUX chmod[2] Wayback Machine (2007년 11월 20일 아카이브 완료)
  6. ^ "chmod(1) - Linux manual page". Man7.org. Retrieved 2014-04-10.
  7. ^ "proc(5) - Linux manual page". Man7.org. Retrieved 2022-03-04.
  8. ^ "chmod - FreeBSD". Nixdoc.net. 1993-06-04. Retrieved 2014-04-10.
  9. ^ "chmod - IRIX/standard/". Nixdoc.net. Retrieved 2014-04-10.
  10. ^ "Mac Developer Library". Developer.apple.com. Retrieved 2014-04-10.
  11. ^ "sticky.7 - NetBSD Manual Pages". Netbsd.gw.com. 2021-05-16. Retrieved 2021-05-16.
  12. ^ "Manual Pages: sticky". Openbsd.org. 2014-02-14. Retrieved 2018-02-04.
  13. ^ "chmod(2)". Uw714doc.sco.com. 2004-04-25. Retrieved 2014-04-10.

외부 링크