
일반화하다
루트가 아닌 사용자 계정에서 루트가 아닌 다른 사용자 계정으로 비밀번호 없는 sudo를 허용하도록 sudo가 올바르게 구성되었는지 확인하는 비대화형(무인, ncurses 기반 제어 터미널이 필요하지 않음) 방법이 있습니까?
왜
다른 사용자 계정에서 일부 처리를 수행해야 하지만 사용 가능한 제어 터미널(예: 백그라운드 프로세스)이 없기 때문에 사용자 개입 없이 실행이 이루어져야 하는 시나리오가 있습니다.
세부 사항
이는 Linux(구체적으로 RHEL 5 또는 RHEL 6 또는 거의 동등한 CentOS 시스템)에서 실행됩니다. 이 문제와 관련된 다른 운영 체제나 Linux 변형은 없습니다.
설명을 위해 userA와 userB라는 두 개의 사용자 계정이 관련되어 있다고 가정합니다.
userB 계정에서 userA에서 userB로 비밀번호 없는 sudo를 수행할 수 있는지 확인하는 방법이 필요합니다.
해당 sudo 호출 내에서 userB 계정에서 실행되는 명령은 사용자 공간 프로그램 실행과 같은 작업에 사용됩니다(예: 와 같은 시스템 관리 명령을 실행하지 않음 fdisk
).
여기서 중요한 제한은 제어 터미널 없이 백그라운드 프로세스에서 userA 계정이 아닌 userB 계정에서 메서드가 완료될 수 있어야 한다는 것입니다.
이 접근 방식은 sed/awk/etc를 사용하는 Bash 스크립트에서 가능해야 합니다. 파일을 확인하는 명령입니다.
시스템 관리자는 이 방법에 참여할 필요가 없습니다(예: setuid 스크립트가 필요하지 않음).
그게 가능합니까? 그렇다면 어떻게 해야 할까요?
연구
sudoers 파일은 구문 분석하기 어려울 수 있다는 점을 고려하세요. 비슷한 질문을 보면비밀번호를 묻지 않고 루트로 특정 프로그램을 어떻게 실행할 수 있나요?visudo
옵션이 아닌 ncurses 활성화가 필요한 터미널 과 같은 일부 대화형 메커니즘을 사용하지 않고 루트가 아닌 스크립트가 sudoers 파일의 내용을 검사할 수 있는 방법은 확실하지 않습니다 .
반품https://unix.stackexchange.com/a/260739/21372userA에서 userB로 암호 없는 sudo를 나타내는 올바른 구문이지만 여기서 내 질문은 ncurses 제한된 응용 프로그램(예:)을 실행하지 않고 해당 구성을 보는 방법으로 요약될 수 있지만 visudo
그렇게 간단한지는 잘 모르겠습니다.
답변1
sudo 구성은 루트에서만 읽을 수 있으므로 sudo 구성 파일을 구문 분석하여 이를 수행할 수 없습니다. sudo 구성을 읽을 수 있더라도 안정적으로 구문 분석하기 어렵고(특히 LDAP 데이터베이스와 같은 로컬이 아닌 정보를 처리할 때) 전체 내용을 알려주지 않습니다(예: 다음을 통해 권한을 부여할 수 있음). 여러 떼).
유일한 실제 검사는 sudo
userA로 실행됩니다. 사용자 B로 실행되는 스크립트에서 이 검사를 수행해야 하므로 사용자 B가 사용자 A로 검사를 실행할 수 있는 방법이 필요합니다. 아니면 작은 프로그램을 작성하세요(스크립트가 아니다즉, setuid A 또는 사용자 B에게 sudo를 통해 사용자 A로 검사를 실행할 수 있는 권한을 부여합니다.
사용자 B가 A로 검사를 실행할 수 있도록 허용하는 sudo 규칙을 설정하는 데 관리자를 개입시킬 수 없는 경우 setuid 프로그램이 유일한 솔루션입니다. 이 프로그램은 A가 사용자 B로 실행될 sudo -u userB -b true
수 있는지 확인하기 위해 호출됩니다 . true
다음은 프로그램의 C 소스 코드입니다(경고: 테스트되지 않음!).
#include <unistd.h>
int main(void) {
execl("/usr/bin/sudo", "sudo", "-u", "userB", "-b", "/bin/true", (char*)NULL);
return 126;
}
이를 컴파일하고 결과 실행 파일 setuid를 A로 만듭니다(실행하기 전에 A에 속해야 함 chmod 4755 /path/to/executable
).
이 솔루션은 완전하지 않습니다. A가 사용자 A이기 때문에 B로 명령을 실행할 수 있는 경우에만 작동하며, A가 그룹에 속해 있기 때문에 이 권한이 있는 경우에만 작동합니다. 일하다. 그룹 멤버십을 확인해야 하는 경우 sg
사용자 A로 실행하여 이 그룹 멤버십을 얻은 다음 실행되도록 해야 합니다 sudo
.
답변2
이 질문에는 두 가지 다른 질문을 하셨습니다.
userA에 대한 sudo 권한을 허용/확인하는 방법
협회Sudo 프로젝트 홈페이지로 이동sudo 설정을 userB(루트 아님)로 보는 방법
#1이는 /etc/sudoers 문서와 관련 sudo 파일 및 명령을 자세히 조사하여 수행할 수 있습니다. 나는 한 사용자의 명령을 루트가 아닌 다른 사용자로 제한한 경험이 없기 때문에 그것이 가능하다는 것을 알지 않는 한 실제로 말할 수 없습니다.
#2이는 완전히 /etc/sudoers /etc/sudo.conf /etc/sudoers.d/* 등과 같은 sudo 구성 권한 문제입니다. 내 시스템에서 이러한 파일은 스키마이며 -r--r-----. root root
userB는 다음 없이는 해당 파일을 읽을 수 없습니다.
- 루트 그룹의 구성원이 되세요
- 이러한 권한을 변경하려면 시스템 관리자에게 문의하세요.
매우 간단합니다. 이 두 가지 중 하나라도 발생하지 않으면 userB는 파일을 읽거나 구문 분석할 수 없습니다.