내 Debian Stretch 시스템에는
Defaults env_reset
내 시스템에서 /etc/sudoers
. 실행할 때 시스템을 설정하고 싶습니다.우주선, 통화 비밀번호를 입력할 필요가 없습니다
sudo PYTHONPATH=/usr/lib/python3/dist-packages -- /usr/bin/python3 \
/usr/bin/sshuttle --method auto --firewall
/etc/sudoers.d/sshuttle
그래서 내용이 담긴 파일을 만들었습니다.
username ALL=NOPASSWD: /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall
그러나 오류 메시지가 나타납니다.
sudo: 죄송합니다. 다음 환경 변수는 설정할 수 없습니다: PYTHONPATH
최적의 솔루션
PYTHONPATH
보안을 손상시키지 않고 설정을 통해 이 명령을 실행할 수 있어야 합니다.스도일반적인 설정은 이 제한이 내 파일sudoers
의 다른 항목 에 계속 적용되어야 한다는 것입니다.- 나한테 바꾸라고 하지 않을 거야우주선소스 코드, 즉 수정 없이 위에 지정된 정확한 명령에 대해 작동해야 합니다.
내가 지금까지 시도한 것 :
/etc/sudoers.d/sshuttle
파일을 읽도록 수정했지만username ALL=NOPASSWD: PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall
이는 유효한 구문이 아닌 것 같습니다.
노트:
- 나는 전체를 실행하고 싶지 않다우주선sudo 명령을 통해 a)우주선방화벽 부분(이 질문의 명령)을 제외하고는 루트 액세스가 필요하지 않습니다. b) 그런 다음 항상 SSH 키의 비밀번호를 입력해야 하기 때문입니다(일반적으로 다음을 통해 잠금 해제됨).gpg-에이전트내 사용자의 경우, 루트 사용자의 경우는 아님)
답변1
PYTHONPATH를 변경할 수 없게 하려면 다음을 사용할 수 있습니다 /usr/bin/env
(가장 과소평가된 유닉스 도구...).
username ALL=NOPASSWD: /usr/bin/env PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall
exec
또는 Python 스크립트를 호출하기 전에 환경을 설정하는 짧은 래퍼 스크립트를 작성하세요.
PYTHONPATH가 다음과 같은 경우아니요username ALL=NOPASSWD: ALL
사용자가 sshuttle에서 사용하는 Python 패키지를 재정의하고 그 안에 코드를 넣어 상상할 수 있는 모든 작업을 수행할 수 있으므로 상수를 사용할 수도 있습니다 .