Linux에서 권한이 없는 사용자가 환경 변수를 볼 수 있습니까?

Linux에서 권한이 없는 사용자가 환경 변수를 볼 수 있습니까?

Linux에서 루트가 아닌 다른 사용자가 프로세스의 환경 변수를 관찰할 수 있는지 확인하려고 합니다.

즉각적인 사용 사례는 비밀을 환경 변수에 넣는 것입니다. 이는 웹의 여러 곳에서 안전하지 않은 것으로 간주되지만 Linux의 정확한 노출 지점에 초점을 맞출 수는 없습니다.

참고해주세요 저는아니요일반 텍스트 비밀을 파일에 넣는 것에 대해 이야기하십시오. 또한 나는아니요루트 계정에 대한 노출에 대해 이야기해 보세요(루트를 사용하여 적으로부터 비밀을 숨기려는 시도는 불가능하다고 생각합니다).

이 문제내 문제를 해결하는 것처럼 보이는 주석은 환경 변수를 완전히 안전하지 않거나 단순히 난독화된 것으로 분류합니다. 그러나 해당 변수에 어떻게 액세스합니까?

테스트에서 권한이 없는 사용자는 프로세스 테이블("ps auxwwe")을 통해 다른 사용자의 환경 변수를 관찰할 수 없었습니다. 환경 변수(예: 내보내기)를 설정하는 명령은 셸에 내장되어 있으며 프로세스 테이블에 들어가지 않으며 확장 시 /proc/$pid/cmdline에 없습니다. /proc/$pid/environ은 프로세스 소유자의 UID로만 ​​읽을 수 있습니다.

어쩌면 서로 다른 운영 체제나 버전 사이에서 혼동이 발생할 수도 있습니다. 웹상의 다양한 (최근) 소스는 환경 변수의 불안정성을 비난했지만, 다른 Linux 버전에 대한 내 무작위 검사는 이것이 적어도 2007년(아마도 그 이상일 수 있지만 상자가 없습니다)으로 거슬러 올라갈 가능성이 없는 것으로 보입니다. 손으로) 테스트).

Linux에서 권한이 없는 사용자가 다른 프로세스의 환경 변수를 어떻게 관찰할 수 있습니까?

답변1

Giles가 매우 포괄적인 기사에서 설명했듯이답변security.stackexchange.com에 대한 유사한 질문과 관련하여 프로세스 환경은 프로세스(물론 루트)를 소유한 사용자만 액세스할 수 있습니다.

답변2

환경변수는 매우 안전합니다. 귀하가 연결한 질문에 따르면 구성 파일에 환경 변수를 사용하면 시스템이 손상된 경우 난독화되는 유일한 보안 이점이 있습니다. 이는 누군가 루트 액세스 권한을 얻으면 두 가지 모두에 액세스할 수 있음을 의미합니다.
환경 변수를 사용하여 비밀 데이터를 저장하는 것이 "모호한" 것으로 간주되는지 여부도 논쟁의 여지가 있습니다. 이것은 매우 일반적인 관행이므로 그렇지 않다고 생각합니다.

다음 두 위치에서만 환경 변수에 저장된 데이터에 액세스할 수 있습니다.

1. 프로세스의 실행 환경

프로세스가 실행 중일 때 프로세스의 환경 변수에 액세스할 수 있습니다 /proc/$PID/environ. 그러나 프로세스를 소유한 사용자, 즉 루트만 파일에 액세스할 수 있습니다.

2. 환경 변수의 출처

init 스크립트를 사용하고 변수가 init 스크립트에 저장되어 있는 경우 물론 스크립트를 읽어서 변수를 얻을 수 있습니다.

또는 환경 변수가 다른 곳에서 온 경우에는 그 위치가 어디든 됩니다.

3. "ps" 출력

예, 제가 2라고 말한 것을 압니다. 어느 괜찮은 시스템에서는 2가 될 것입니다. 그러나 관리자가 자신이 무엇을 하고 있는지 모른다면 세 번째 방법이 있습니다.

프로세스가 비슷한 방식으로 시작된 경우 sh -c 'cd /foo/bar; POP=tart /my/executable'해당 sh프로세스는 다음에서 볼 수 있습니다 ps.

$ sh -c 'cd /; POP=tart sleep 10' &
[1] 3085

$ ps ax | grep POP
phemmer   3085  14   5  0.0  0.0 SN         00:00 sh -c cd /; POP=tart sleep 10

관련 정보