대화형 로그인용으로 설계되지 않은 사용자 계정이 있지만 루트로 단일 명령을 실행하도록 허용하고 싶습니다. 내가 지금 가지고 있는 것보다 이것을 달성할 수 있는 더 좋은 방법이 있습니까(의도한 것보다 더 많은 권리를 부여하지 않고):
- 쉘을 rbash로 변경하고 명령을 실행하려면 유효한 쉘이 필요하므로 경로에서 유일한 실행 파일로 sudo를 사용하십시오.
- "ALL=(root:root) NOPASSWD: /sbin/executable"을 사용하여 sudoers에 계정을 추가합니다.
- no-{X11,port}-forwarding,no-pty,command="sudoexecutable"을 사용하여 계정에 authenticate_keys 항목을 추가합니다.
맥락: 저는 *nix에 정통하지 않은 관리자에게 제가 없는 동안 인쇄 서버 문제를 해결할 수 있는 능력을 부여하려고 합니다. 분명히 첫 번째 호출 포트는 CUPS 웹 인터페이스이며 프린터를 직접 확인하기 위해 걸어가는 것입니다(그는 지금 할 수 있고 수행하고 있습니다). 그러나 그가 ssh를 통해 로그인하고 실패할 경우 적절한 서비스를 다시 시작할 것이라고는 기대할 수 없습니다. 방법에 관계없이 그가 무제한 sudo 액세스 권한을 가지고 있음을 신뢰합니다). 지금은 그에게 /sbin/reboot를 실행할 수 있는 권한을 부여할 뿐입니다. 이를 cup/samba/etc를 재부팅하는 스크립트로 변경하겠습니다. 대신 기회가 되면.
답변1
서버와의 다른 상호 작용을 피하려는 경우 한 가지 방법은 명령을 연결 셸로 사용하여 전용 계정을 만드는 것입니다. 예를 들어 사용자 "reboot"의 uid는 0이고 /sbin/reboot는 연결 셸입니다.
셸은 옵션 중에서 선택할 수 있는 권한을 부여하는 스크립트 메뉴일 수 있습니다. 이렇게 하면 sudo를 사용하고 계정 UID 0을 피할 수 있습니다.
1) Purge the print jobs
2) Restart cups
3) Reboot
4) Quit
Enter your choice:
메뉴 스크립트는 여기에 있습니다
StackOverflow의 bash 선택 기능을 사용하는 간단한 예
누가 서버를 다시 시작하는지 알 수 있도록 인증을 위해 개인 SSH 키를 사용하는 것이 더 좋습니다.
답변2
내가 하는 방법은 루트에 의해 실행되고 필요한 명령만 실행하는 웹 서버 스크립트*를 실행하는 것입니다(예: Emmanuel이 제안한 메뉴). 그런 다음 비밀번호나 방화벽으로 보호하여 액세스할 수 있는 사람을 제한할 수 있습니다.
*웹 서버 스크립트: 가능작은 Perl 스크립트(HTTP::Daemon 사용),작은 자바 웹 서버, 또는 비공통 포트(예: 1000보다 높음)에서 실행되는 기타 항목.