man bash
set
나는 내장 플래그를 설명하는 섹션을 읽었습니다 -p
. 이 섹션은 특권 모드가 Bash의 동작에 미치는 영향 중 일부를 알려주지만 충분히 깊이 설명하지 않습니다(또는 단지 충분한 컨텍스트/경험이 없습니다). ) 그것이 무엇을 위한 것인지, 어떤 상황에서 사용되는지 이해하기 위해서입니다.
내가 혼란스러워하는 부분은 내가 특권 모드에 대해 읽은 모든 내용이 "특혜가 없는"이라는 이름이 더 적절한 이름인 것처럼 들리기 때문입니다. 이것은 그 자체로 내가 잘못 이해했다는 것을 나타낼 수 있습니다.
나는 또한 setuid를 이해하고 있는지 잘 모르겠습니다. 나는 유효 사용자 ID와 실제 사용자 ID가 관련되어 있다는 사실에 익숙 sudo
하지만 setuid가 더 넓은 개념인 것처럼 들리므로 뭔가 빠졌을 수도 있습니다.
답변1
권한 모드는 쉘이 강화된 권한으로 실행될 때(예: setuid 프로그램에 의해 호출되는 경우) 보안을 강화하기 위해(잠재적으로 위험한 작업을 제한하여) 존재합니다.
예, "권한 부족"처럼 들린다는 점에서 맞습니다. 이 -p
옵션은 더 높은 권한이 있는 사용자 하에서 명령을 실행하도록 셸을 속임으로써 공격을 허용할 수 있는 것을 제한하는 것입니다. 이것이 바로 시작 스크립트를 제한하는 이유입니다. 예를 들어 이 경우 권한이 있는 사용자는 이러한 스크립트를 소유하거나 제어할 수 없습니다. 또한 환경에서 함수를 상속하는 것도 위험할 수 있습니다. cd
권한 있는 셸 중에 사용할 수 있는 기능이나 내보낸 ls
다음 공격에 사용할 수 있는 작업을 트리거할 수 있기 때문입니다.
"setuid"에 대해서도 질문하셨습니다. 이 맥락에서 "setuid"는 일반적으로 권한 (또는 출력 ) 04000
과 같이 해당 비트를 포함하는 바이너리의 권한을 나타냅니다 . 바이너리에서 "setuid" 비트를 활성화하면 항상 바이너리 소유자의 유효 uid 하에서 실행됩니다. 따라서 어떤 사용자라도 루트가 소유한 setuid 바이너리를 실행할 때마다 루트로 실행됩니다. 실제 uid는 이를 호출하는 사용자의 uid이므로 이 경우 확인이 일반적입니다. (그런데 파일 권한 에 있는 "setgid" 비트에서도 같은 일이 발생합니다 .)04711
-rws--x--x
ls
effective uid != real uid
02000
따라서 사용할 수 있는 한 가지 가능한 시나리오 bash -p
는 권한 있는 사용자(루트 또는 기타)로 실행되고 쉘을 생성하려는 setuid 바이너리입니다. bash -p
그러면 bash는 해당 시나리오에 사용할 수 있습니다.노력하다보다 안전한 상태를 유지하기 위해(위험할 수 있는 환경의 시작 스크립트 및 기능을 무시하여) 런타임 시 유효 uid의 권한이 보존됩니다. 옵션 없이 호출한다는 것은 -p
bash가 단순히 유효 uid를 무시하고(실제 uid로 재설정하여) 아무 일도 일어나지 않은 것처럼 행동한다는 것을 의미합니다.
여기에는 여전히 많은 보안 함정이 있습니다. 따라서 권한 있는 bash를 사용하려면 여전히 보안이 어떻게 영향을 받을 수 있는지에 대해 많은 생각이 필요합니다. 취해진 조치-p
가능한도움이 되지만 가능한 공격 시나리오의 전체 맥락에서 고려해야 합니다.