기본적으로 sudo는 명령을 실행하는 데 사용됩니다.

기본적으로 sudo는 명령을 실행하는 데 사용됩니다.

루트 권한이 필요한 명령 목록을 실행할 수 있는 Linux 사용자("bob"이라고 함)가 필요합니다. 따라서 에 표시된 대로 루트 /sbin/firstcommand/sbin/secondcommand(악명 높은 bob-daemon의 일부) 로 실행하도록 요청하게 됩니다 sudo firstcommand. 비밀번호가 필요하지 않습니다.

/etc/sudoers지금까지 내가 한 일은 다음과 같습니다.

Cmnd_Alias BOBCOMMANDS = /sbin/firstcommand, /sbin/secondcommand
bob        ALL=(root) NOPASSWD:BOBCOMMANDS

결과적으로 bob$ sudo firstcommand루트 로 성공적으로 실행되지만 비밀번호가 제공되더라도 bob$ sudo secondcommand실행에 실패합니다. 이는 나에게 완벽하다고 느낍니다.bob$ sudo mount ... ...

bob이제 앞서 언급한 bob-daemon1을 사용자 로 실행하기를 원합니다 . 실제로 는 이 명령이 실행될 때 root마다 실행되기를 원합니다.BOBCOMMANDSbob$ firstcommandbob$ sudo firstcommand

별칭이 이 문제를 해결할 것 같습니다. bob$ alias firstcommand="sudo firstcommand"; alias secondcommand="sudo secondcommand"실제로는 작동하지만 Bob에게 홈 디렉토리가 없으면 별칭을 유지할 수 없습니다.

마지막으로 언급하고 싶은 점은 bob을 생성하고 sudoers.

해결책이 있나요?


1 내가 단순화한 것

답변1

사용자가 루트 권한으로 명령을 실행해야 한다고 말씀 하셨나요 /sbin/firstcommand?/sbin/secondcommand

이러한 명령이 실제로 에 있는 경우 /sbin일반 사용자에게는 해당 디렉토리가 기본적으로 포함되지 않습니다. PATH이를 활용하면 매우 간단한 두 개의 스크립트를 생성할 수 /usr/local/bin/firstcommand있으며 /usr/local/bin/secondcommand그 내용은 기본적 으로 각각 sudo /sbin/firstcommand및 입니다 sudo /sbin/secondcommand.

사용자의 셸은 일반적 으로 /usr/local/bin표준 및 셸 /usr/bin보다 먼저 나타나 므로 /bin시스템 관리자는 필요한 경우 표준 시스템 명령을 로컬 버전으로 재정의할 수 있습니다. 마찬가지로, 사용자가 를 실행하면 자신의 프로그램에서 처음으로 찾을 수 있는 버전이 무엇 firstcommand이든 실행하게 됩니다 firstcommand... PATH이는 선택한 스크립트일 수 있으며 /sbin/firstcommand접두사 sudo및/또는 일부 인수가 추가된 실제 버전을 실행할 수 있습니다. 필요한.

sudo실제 프로그램 파일과 기타 시스템 파일은 액세스하는 데 필요한 구성을 제외하고는 전혀 수정할 필요가 없습니다.

답변2

이것이 데몬 프로세스인 경우 표준 관행은 init 스크립트 파일에 다음과 같은 내용을 넣는 것입니다.

USER=bob
...
su -c '/command/to/start/actual/daemon' "$USER"

실행해야 하는 스크립트 파일에서 해당 명령어 앞에만 bob넣어주시면 됩니다 .sudo

또한 꼭 읽어보세요.이것비대화형 Bash 쉘(예: 스크립트 또는 데몬에 의해 시작된 쉘)에서 별칭 확장 활성화와 관련됩니다.

관련 정보