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
(예:sudo
sudo apt-get install
아니요 -i
)?
(운영 체제는 Ubuntu 14.04이지만 특정 Linux 배포판에만 해당되는 질문은 아닌 것 같습니다.)
답변1
답변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_reset
env_keep
어쩌면 다음과 같은 일부 환경 변수를 제거하고 싶을 수도 있습니다 DBUS_SESSION_BUS_ADDRESS
.
(제가 틀렸을 수도 있습니다. 시도해본 적이 없습니다.)