`sudo --preserve-env=MY_VAR` 및 `sudo env MY_VAR=$MY_VAR`

`sudo --preserve-env=MY_VAR` 및 `sudo env MY_VAR=$MY_VAR`

나는 man sudo다음을 읽었습니다.

--preserve-env

사용자가 기존 환경 변수를 유지하기를 원하는 보안 정책을 나타냅니다. 사용자에게 환경을 보호할 권한이 없으면 보안 정책에서 오류가 반환될 수 있습니다.

그런데 이 허가가 없어도 달리는 것을 방해하는 것이 무엇인지 알고 싶습니다.

sudo env MY_VAR=$MY_VAR <cmd>

?

답변1

흥미로운 질문입니다. 첫째, 환경을 수동으로 설정하는 것은 지루한 일이므로 --preserve-env분명히 더 좋습니다.

보안 측면에서 sudo 구성은 envsudo를 사용한 실행을 비활성화하거나 env.

나는 sudoer 구성이 전체 루트 액세스를 위한 제한된 명령 목록으로 제한된다고 생각하지 않습니다. 그것만이 아니다 env. 왜 하지 않겠습니까 sudo bash -c 'export MY_VAR="$MY_VAR"; exec <cmd>'? 이는 탈출해서는 안되는 제한된 쉘과 유사합니다. 달릴 수 있는 것을 엄격하게 제한하지 않으면 탈출 경로가 있을 수 있습니다.

나는 sudoer 매뉴얼 페이지의 이 섹션이 이것을 지원한다고 생각합니다:

SETENV 및 NOSETENV

이러한 레이블은 명령별로 setenv 옵션의 값을 재정의합니다. 명령에 SETENV가 설정된 경우 사용자는 -E 옵션을 통해 명령줄에서 env_reset 옵션을 비활성화할 수 있습니다. 또한 명령줄에 설정된 환경 변수에는 또는 에 의해 부과된 제한이 적용 env_check되지 env_delete않습니다 env_keep.따라서 신뢰할 수 있는 사용자만 이 방식으로 변수를 설정할 수 있습니다. 일치하는 명령이 ALL인 경우 해당 명령은 SETENV 플래그를 의미합니다.;이 기본값은 NOSETENV 태그를 사용하여 무시할 수 있습니다.

따라서 사용자가 모든 명령을 사용할 수 있도록 허용하면 env(기본적으로)도 사용할 수 있습니다 --preserve-env. 구성에서 특정 명령만 허용하는 경우 기본값은 NOSETENV이므로 사용자는 이를 우회 --preserve-env하거나 호출 할 수 없습니다.env

요약: 액세스 권한이 부족 --preserve-env하지만 그럴 수 있는 경우는 없습니다 env.

관련 정보