스티커 비트는 파일에 적용될 때 원래 무엇을 했습니까? 플래그. AskUbuntu 답변에서 응답자는 “스티커 비트가 일반적으로

그 기능과 같이 다양한 장소에서 하나, 요즘 완전한 잘못된 것을 비난은 “스티키 비트”를 볼 수있는 요즘 A와 디렉토리와 행동에 쓰기 권한에 영향을 줄 것입니다 제한 삭제 플래그.

AskUbuntu 답변에서 응답자는 “스티커 비트가 일반적으로 디렉토리에 적용됩니다”라고 썼습니다 . 실제로 현대 시스템은 실제로 파일에 파일을 적용하지 않는 것처럼 보였지만 오래 전에 일반적인 경우는 디렉토리가 아닌 (실행 가능한 프로그램 이미지) 파일에 적용되는 경우였습니다. (파일에 대한 현대적인 사용법이 부족한 경우 관련 파일이 현재 파일 시스템에서 사용되지 않습니다 .)에 관련 질문 이 있습니다 .

이것은 질문을 촉발했다 :

실행 파일에 적용된 고정 비트 무엇을 습니까? 그때 setuid 같았나요?

과거 시제에 주목하십시오. 이 아닌 끈적 끈적한 비트가 어떻게 작동합니까? 지금. 그것은 그때 일하는 방식입니다.



답변

아니요, 스티커 비트는 set-UID 또는 set-GID 플래그와 다릅니다. 자격 증명 처리에 대한 변경에는 영향을 미치지 않았습니다.

끈적 끈적한 비트는 프로그램 텍스트를 “끈적 끈적”하게 만들었습니다. 원래는 잘못된 이름이 아니 었습니다.

배경 : 프로그램 이미지 섹션 및 공유 텍스트

본질적으로, 실행 파일 형식 (책을 채울 수 있고 채울 수있는)의 세부 사항에 너무 깊이 들어 가지 않고 : 프로그램을 실행하기 위해 메모리에 직접로드되는 프로그램 이미지 파일의 부분은 기계 코드, 상수, 시작으로 구성됩니다 (0으로 초기화되지 않은) 변수의 값 및 0으로 초기화되고 초기화되지 않은 변수에 대한 빈 공간 (한 형태 또는 다른 형태).

이들은 “섹션”으로 알려진 모음으로 그룹화되며 일반적인 이름을 갖습니다. 기계 코드와 상수는 종종 프로그램 이미지의 “텍스트”섹션으로 알려진 것을 형성합니다. 0으로 초기화되지 않은 변수는 마찬가지로 “데이터”섹션입니다. 0으로 초기화되고 초기화되지 않은 변수는 “bss”(그 자체로 전체 민속 역사가있는 이름)입니다.

프로세스에 프로그램 실행 가능 이미지 파일이로드 된 경우 이미지 파일의 내용에서 다양한 부분 (텍스트, 데이터 및 bss)이 초기화됩니다.

“텍스트”섹션에서 특별한 점은 머신 코드 (및 상수)가 거의 항상 쓰여지지 않는다는 것입니다. 실행 가능한 이미지 파일이로드 된 모든 실행 프로세스의 가상 메모리 이미지에서 공유 될 가능성이 있습니다 . 프로그램 텍스트를 공유 할 수있는 정확한 시나리오는이 답변의 범위를 벗어 났으며 로더 수정 dem 등성 및 주소 공간 레이아웃 ID와 같은 것들을 포함합니다. 사람들은이 주제에 관한 책을 쓸 수도 있고 가질 수도 있습니다. ☺

공유 텍스트는 커널에서 사용하는 최적화입니다. 실행중인 단일 프로그램 이미지의 모든 인스턴스에 고유 한 개별 메모리 이미지가 없어도 동일한 머신 코드 (및 상수)의 여러 복사본으로 소중한 실제 메모리를 소비합니다.

스티커 텍스트

그러나 공유 텍스트보다 여전히 더 잘 할 수 있습니다. 분명히 특정 공유 텍스트 프로그램 이미지를 사용하는 프로세스가 항상 하나 이상 실행중인 경우 커널은 프로그램의 새 인스턴스가 실행될 때 새 프로세스의 가상 메모리 공간을 기존 공유 텍스트 세그먼트에 연결하기 만하면됩니다. 의 경우 (예를 들어) 거의 항상있다 /bin/login또는 /bin/sh실행 어딘가에 중간 크기의 시스템에서 로그인 프로그램하거나 커널이 이미 메모리에로드 된 자신의 텍스트 세그먼트의로드 사본에 부착 할 수있는 기본 쉘 너무 새로운 인스턴스.

스티커 텍스트는이 아이디어를 확장하여 현재 실행중인 프로세스가없는 이미지를 프로그래밍 합니다 . 실행 가능 이미지 파일이 고정 텍스트로 표시되면 커널은 마지막 프로세스 이후에 텍스트 세그먼트를 유지하여 종료합니다. 프로그램의 다른 인스턴스가 곧 실행되고 세그먼트에 다시 연결될 수 있기를 바랍니다.

초기 Unices에서는로드 된 고정 텍스트 세그먼트가 프로세스가 연결되지 않은 경우 스토리지를 교체하기 위해 교체됩니다. (나중 Unices는 이것을 위해 스왑 사용을 중지했습니다.) 또한 이름이 저장된 텍스트로 들었습니다 .

물론 프로그램 이미지에 고정 텍스트 비트를 설정하는 것은주의해서 수행해야합니다. 프로그램의 이점은 일반적으로 사용되는 시스템에 따라 다릅니다. 그리고 현재 첨부되지 않은 텍스트 세그먼트는 커널 리소스를 차지하므로 모든 시스템에서 보유 할 수있는 수에 대한 실질적인 제한이 있습니다. 따라서 일반적으로 수퍼 유저 권한이 필요한 작업입니다.

폐지

더 이상 사실이 아닌 스티커 텍스트의 작동을 기본으로하는 많은 가정이 있습니다. 스왑 스토리지에서 사전 작성된 세그먼트를 읽는 것이 실제 실행 가능 이미지 파일에서 요구되는 간단한 요구 페이징보다 빠를 필요는 없습니다. 파일 시스템 형식은 임의의 (순차가 아닌) 읽기 패턴에서 더 좋아졌습니다. 요구 페이징 자체의 출현은 통합 캐시, 공유 라이브러리 검색의 차이로 인한 비등 전성 외부 수정 및 주소 공간 레이아웃 무작위 화와 같은 사항을 변경합니다.

실행 가능한 프로그램 이미지를위한 끈적 끈적한 텍스트 비트는 오래 전부터 사라졌습니다. 예를 들어, 1980 년대 중반 4.3BSD의 작가들은 실행 가능한 프로그램 이미지에 대한 명시적인 고정 텍스트 마커 플래그를 쓸모없는 것으로 간주했습니다.

추가 자료

  • 모리스 제이 바흐 (1986). UNIX 운영 체제 설계 . 프렌 티스 홀. ISBN 9780132017992.

답변