sudo 명령에서 PATH가 재설정되는 이유는 무엇입니까? [복사]

sudo 명령에서 PATH가 재설정되는 이유는 무엇입니까? [복사]

벽돌 벽을 여러 번 접한 후 나는 다음과 같은 사실을 발견했습니다.

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/steve/bin

$ sudo bash
# echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin

하지만

$ sudo bash -c 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

$ sudo bash -Ec 'echo $PATH'
/sbin:/bin:/usr/sbin:/usr/bin

나는에서 수집했다다른 게시물경로는 sudo다음에서 읽혀집니다 /etc/sudoers. 그런데 왜 그럴까요? 설정이 $PATH의미가 있습니까 /root/.profile, 아니면 이것이 위의 혼란의 원인입니까(예: 실제 쉘을 생성하면 $PATH임시 명령 sudo에 사용된 것과 다른 결과가 발생합니다...)?

RHEL 6.4에서 bash를 사용하고 있습니다.

답변1

보호

sudo이러한 명령 중 몇 가지를 실행할 때 알 수 있는 보호 기능이 내장되어 있습니다. 이러한 보호는 보안 강화 등 다양한 작업을 수행할 수 있습니다 $PATH.

/etc/sudoers문서 에서 :

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

이는 명령을 실행할 때 표시되는 내용입니다 sudo -c ..... -E전환하여 이 동작을 비활성화 할 수 있습니다 sudo.

노트:일부 설정의 경우 이 -E스위치는 효과가 없습니다. 이를 "해결"하려면 을 사용할 수 있습니다 sudo env "PATH=$PATH" bash. 그러면 $PATH현재 전류가 sudo환경으로 전송됩니다.

상호작용 및 로그인

이 명령을 실행하면:

$ sudo bash

bash로그인 쉘과 대화형 쉘을 실행 중입니다 bash. 이는 bash구성 파일의 소스와 관련이 있습니다.

  • 대화형, 일명 bash또는bash -i, 원천$HOME/.bashrc
  • 로그인하세요.bash -l, 원천$HOME/.bash_profile

그렇다면 왜 작동하지 않습니까 -E?

이 질문에 대한 TylerRick의 답변(sudo는 경로를 변경합니다 - 왜?)많은 이유가 다뤄집니다. 주로 sudoUbuntu의 경우처럼 컴파일 타임에 하드코딩되어 이러한 스위치를 쓸모 없게 만듭니다. Launchpad에는 오랫동안 해결되지 않은 미해결 문제가 있어 왔으며, 이로 인해 Canonical은 이 동작을 기본값으로 두는 것이 가장 좋다고 생각했다는 것을 깨닫게 되었습니다.

답변2

규칙이 sudoers사용자에게 특정 명령을 실행할 수 있는 권한을 부여 하는 경우 wibble일반적으로 보안 값을 설정해야 합니다 PATH. 즉, 사용자가 자신의 프로그램을 심을 수 없는 디렉터리만 포함해야 합니다. wibble외부 명령이 호출되고 foo재설정 이 PATH없으면 사용자는 ~/bin명령 앞에 PATH링크를 /bin/sh놓은 ~/bin/foo다음 sudo wibble호출을 실행하여 ~/bin/foo임의의 쉘 명령을 입력할 수 있습니다.

따라서 PATH를 재설정하는 것이 안전한 기본값입니다. 모든 경우에 이것이 필요한 것은 아니지만 기본값으로 설정하는 것이 더 쉽고 안전합니다.

규칙에 sudoers따라 사용자에게 임의 명령을 실행할 수 있는 권한이 부여되는 경우 PATH를 재설정해도 직접적인 보안 이점은 없습니다. 또한 간접적인 이점도 있습니다. 즉, 사용자가 잠재적으로 원치 않는 프로그램이 포함된 PATH를 실수로 설정할 수 있으며 PATH를 재설정하면 이러한 프로그램이 실수로 호출되는 위험을 피할 수 있습니다. 기능적 이점도 있습니다. 루트로 명령을 실행하려면 일반적으로 /usr/local/sbin, /usr/sbin및 가 필요 /sbin하지만 일반 사용자로는 필요하지 않습니다.

런타임 시 경로가 재설정되는 것을 원하지 않으면 다음 위치 sudo에서 면역 그룹에 자신을 추가하세요 sudoers.

Defaults exempt_group+=stevebennet

로그인 쉘( sudo -I또는 sudo bash -l다른 방법)을 실행하는 경우 쉘은 일반적으로 .profile대상 사용자의 홈 디렉토리를 읽고 해당 파일이 PATH를 변경할 수 있습니다.

답변3

이는 보안상의 이유입니다. PATH는 원본 사용자가 가질 수 있는 해킹된 PATH가 아닌 명확하게 정의된 경로로 설정됩니다.

바라보다https://superuser.com/questions/98686/passing-path-through-sudo해결 방법으로.

관련 정보