그래서 오늘 직장에서 경영진이 무작위로 나타나서 엔지니어 그룹에게 Linux 사용에 대한 단기 집중 강좌를 제공해달라고 요청했습니다. 분명히 그들은 (Win 10 개인 정보 보호 및 보안 문제로 인해) Microsoft와의 내 의견 차이를 눈치채고 이제는 *nix에 대한 상주 "전문가"가 되었습니다.
그룹에게 Linux 단순성의 아름다움을 설명한 후 파일 권한에 대한 질문이 있습니다. chmod
권한 할당을 위한 사용자-그룹-세계 8진수 구문을 설명합니다 .
그런 다음 setuid/setgid/sticky 비트로 이동합니다. 간단한 예를 통해 설명하고 chmod 2755 somefile.txt
setgid 비트가 이제 활성화되었음을 지적합니다. 해당 비트를 지우기 위해 발행했지만 chmod 0755
실망스럽게도 setgid 비트가 지속됩니다. 무엇?? 나는 이전에 (아마도 10년 전일지라도) 고정된 비트를 지우기 위해 해당 구문을 사용한 적이 있다는 것을 알고 있습니다. 디자인이 얼마나 우아하다고 말했는데 바로 작동하지 않는다는 사실이 꽤 당혹스러웠습니다.
어쨌든, 나는 또한 그들에게 대체 속기를 보여주었고 g+s
DID 가 작동한다는 g-s
것을 발견했습니다 g-s
.
프레젠테이션이 끝난 후 나는 에서 버그를 발견했다고 생각했지만 페이지 chmod
를 검토한 결과 고정 플래그를 설정하는 데 사용할 수 있지만 지우지는 않는다는 man
명시적인 메모가 있으므로 해당 동작이 "설계에 따른" 것임을 발견했습니다. chmod
.
chmod
8진수 표기법을 사용하여 고정 비트를 지우는 기능이 제거된 이유는 무엇입니까 ? 구글링을 해보니 앞의 0이 "혼란스럽기 때문에" 생략해야 한다고 말하는 사람들이 있었습니다. 정말? 이러한 논리에 따르면 바이트(예: ASCII 코드)에 선행 "0" 비트가 포함되는 것은 "혼란"하기 때문에 불법이라고 말할 수도 있습니다. 앞의 0이 혼란스럽다고 생각하는 사람들은 기호 표기법을 사용할 수 있습니다. 8진수 표기법을 사용하고 싶은 사람은 8진수 표기법을 사용할 수 있어야 합니다.
chmod
끈끈한 비트를 지우는 데 8진수 표기법을 지원하지 않아 장애가 발생한 이유는 무엇입니까 ?
답변1
문제는 끈적한 비트가 도입되기 전에 이미 8진수 3자리(또는 그 이하)만 사용하는 쉘 스크립트 등이 많이 있었다는 것입니다. 또한 어떤 숫자든 앞에 0을 붙일 수 있다는 관례는 상당히 굳건합니다.
따라서 고정 비트를 재설정하기 위해 앞에 0이 있는 8진수 형식을 허용했다면 많은 스크립트가 실수로 고정 비트를 재설정했을 것입니다. 디버깅은 악몽이었을 것이므로 대신 chmod
8진수 형식의 고정 비트를 재설정할 수 없다는 제한 사항이 적용되었습니다. 결국, 정말로 재설정하고 싶다면(거의 발생하지 않음) 언제든지 대체 형식을 사용할 수 있습니다.
따라서 많은 형태의 놀라운 복잡성과 마찬가지로 대답은 "역호환성"입니다.