일반화하다

일반화하다

일반화하다

루트가 아닌 사용자 계정에서 루트가 아닌 다른 사용자 계정으로 비밀번호 없는 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 데이터베이스와 같은 로컬이 아닌 정보를 처리할 때) 전체 내용을 알려주지 않습니다(예: 다음을 통해 권한을 부여할 수 있음). 여러 떼).

유일한 실제 검사는 sudouserA로 실행됩니다. 사용자 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

이 질문에는 두 가지 다른 질문을 하셨습니다.

  1. userA에 대한 sudo 권한을 허용/확인하는 방법
    협회Sudo 프로젝트 홈페이지로 이동

  2. sudo 설정을 userB(루트 아님)로 보는 방법

#1이는 /etc/sudoers 문서와 관련 sudo 파일 및 명령을 자세히 조사하여 수행할 수 있습니다. 나는 한 사용자의 명령을 루트가 아닌 다른 사용자로 제한한 경험이 없기 때문에 그것이 가능하다는 것을 알지 않는 한 실제로 말할 수 없습니다.

#2이는 완전히 /etc/sudoers /etc/sudo.conf /etc/sudoers.d/* 등과 같은 sudo 구성 권한 문제입니다. 내 시스템에서 이러한 파일은 스키마이며 -r--r-----. root rootuserB는 다음 없이는 해당 파일을 읽을 수 없습니다.

  1. 루트 그룹의 구성원이 되세요
  2. 이러한 권한을 변경하려면 시스템 관리자에게 문의하세요.

매우 간단합니다. 이 두 가지 중 하나라도 발생하지 않으면 userB는 파일을 읽거나 구문 분석할 수 없습니다.

관련 정보