apt-get의 sudoers 파일에서 `-i` sudo 옵션을 지정하는 방법은 무엇입니까?

apt-get의 sudoers 파일에서 `-i` sudo 옵션을 지정하는 방법은 무엇입니까?

sudoers(5)내 단일 사용자 워크스테이션에서는 암호 없이 특정 명령을 실행할 수 있도록 구성했습니다 . 특히 항목의 예는 다음과 같습니다.

$ cat /etc/sudoers.d/apt-get 
my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get

하지만 이 명령을 실행해야 합니다 sudo -i apt-get install(예:그리고옵션 -i).

단순히 실행하더라도 -i(예:sudosudo apt-get install아니요 -i)?

(운영 체제는 Ubuntu 14.04이지만 특정 Linux 배포판에만 해당되는 질문은 아닌 것 같습니다.)

답변1

~처럼@murulu에서 지적했다논평sudo -i, 이 시나리오에서는 로그인 쉘(즉)이 필요하지 않습니다 sudo apt-get .... sudoers 파일 옵션 always_set_home이면 충분합니다(루트의 홈 디렉터리로 재설정됨 $HOME).

sudoers 파일 항목은 다음과 같아야 합니다.

$ sudo cat /etc/sudoers.d/apt-get
Defaults!/usr/bin/apt-get always_set_home
my_user_name ALL=(ALL) NOPASSWD: /usr/bin/apt-get

답변2

나는 귀하의 대화형 루트 셸이 다음과 같다고 가정합니다 /bin/bash(그러나 /etc/passwd예를 들어 다른 설정이 있을 수도 있습니다 /bin/dash).

그렇다면 정말로 원하는 것은 루트 로그인 쉘을 실행하는 것입니다 sudo. 내가 말했듯이 일반적으로 필요하지 않다고 생각합니다. 파일을 통해 일부 환경 변수를 설정 해제하거나 적절한 기본값으로 설정할 수도 있습니다 /etc/sudoers.d/apt-get.

하지만배쉬에게 전화하기설명하다

-l

쉘이 로그인을 통해 직접 호출된 것처럼 작동하도록 만듭니다. 이는 쉘이 대화형일 때 로그인 쉘 실행을 사용하는 것과 동일합니다 exec -l bash. 쉘이 비대화형이면 로그인 쉘 시작 파일이 실행됩니다. exec bash -l또는 exec bash --login현재 쉘이 Bash 로그인 쉘로 대체됩니다. 로그인 셸의 특수 동작에 대한 설명은 Bash 시작 파일을 참조하세요.

그 다음에

로그인 쉘에 대한 인수의 첫 번째 문자는 zero -이거나 --login이 옵션으로 호출됩니다.

따라서 bash또는 -l및 를 --login호출 하는 쉘 스크립트(또는 C의 래퍼)를 작성할 수 있습니다./etc/sudoers.d/apt-get

아마도 달리는 것만 /bin/bash -l -c "/usr/bin/apt-get $*"으로도 충분할 것입니다.

또한 sudoers(5)env_resetenv_keep

어쩌면 다음과 같은 일부 환경 변수를 제거하고 싶을 수도 있습니다 DBUS_SESSION_BUS_ADDRESS.

(제가 틀렸을 수도 있습니다. 시도해본 적이 없습니다.)

관련 정보