일주일에 하루 동안 Sudoers를 사용하시나요?

일주일에 하루 동안 Sudoers를 사용하시나요?

저는 상사로부터 프로덕션 Redhat 서버의 시스템 관리자로 자원 봉사했습니다. 같은 사고가 나지 않도록 보안을 강화해달라고 하더군요.rm -f * 얼마 전 이런

현재 53명의 사용자가 시스템에 sudo 작업을 하고 있는데 이는 감사의 악몽입니다. 특정 요일에만 사용자 접속을 허용할 수 있는지 궁금합니다.

예를 들어, 사용자 'Joe'는 화요일과 목요일에만 로그인하도록 허용하고 'Jane'은 일요일에만 로그인하도록 허용할 수 있습니까? etc/sudoers이를 허용하도록 사용자 정의할 수 있습니까 ?

sudoer를 사용하는 대신 더 좋은 방법이 있습니까?

답변1

sudoLinux 상자의 다른 모든 것과 마찬가지로 PAM을 통해 인증을 수행합니다.

따라서 이 작업을 수행하는 데 사용할 수 있어야 합니다 pam_time.so.

최소한 데비안에서는 기본적으로 해당 모듈이 활성화되어 있지 않습니다. 다음과 같은 줄을 추가해야 합니다.

account    requisite  pam_time.so

/etc/pam.d/sudosudo에 대해서만 활성화하거나 ( /etc/pam.d/common-accountpam-auth-update 블록 이후) 시스템의 모든 프로그램에 대해 활성화합니다.

그런 다음 편집 /etc/security/time.conf하여 제한 사항을 설정하세요. 서비스 이름은 이어야 합니다 sudo. 예를 들어 Fred가 sudo금요일 오후 3시부터 5시 사이에만 사용하도록 허용하려면 다음을 수행하세요 .

sudo;*;fred;Fr1500-1700

(참고: 나는 이것을 테스트하지 않았습니다.)

편집하다:분명히 말하면 다른 답변과 다양한 댓글 작성자의 의견에 동의합니다. 너무 많은 사람들이 루트로 너무 많은 명령을 실행하는 것으로 보이며 실제로 수정해야 합니다. 물론 루트가 될 수 있다면 pam 구성을 편집할 수도 있습니다...

답변2

53명의 사용자가 일상 업무를 수행하기 위해 왜 sudo가 필요한지 궁금합니다. 대부분의 사용자(개발자 포함)에게 sudo는 누군가가 우연히 명령을 실행할 정도로 일상적인 일이 아니라 드문 예외여야 합니다 sudo rm -rf *.

그룹 권한(또는 더 고급 ACL)을 사용하여 사람들에게 작업을 완료하는 데 필요한 파일에 대한 액세스 권한을 부여할 수 있습니까? setuid 또는 sudo'ed 스크립트나 바이너리를 사용하여 서비스 재시작과 같은 작업을 수행할 수 있습니까? (보안 setuid/sudo 스크립트를 작성하는 것은 어렵기 때문에 정직한 사람들을 정직하게 유지하는 것이 더 중요합니다).

사람들의 Sudo 액세스를 일주일에 하루로 제한할 수 있다고 해도 일주일 동안 Sudo 액세스 권한을 가진 사람은 여전히 ​​53명이므로 핵심 문제를 해결하는 데 실제로 도움이 되지 않습니다.

그렇다면 많은 사용자가 프로덕션 서버에 액세스해야 하는지 궁금합니다. 로그나 필요한 데이터/파일을 비프로덕션 시스템에 전달할 수 있습니까?

답변3

가장 간단한 방법은 구성에 sudoers.d 디렉터리(includedir을 통해)를 사용하는 것입니다. 그런 다음 원하는 시간 동안 해당 디렉터리에 각 사용자에 대한 규칙을 배치할 수 있는 크론 작업을 가질 수 있습니다.

#includedir 지시문을 /etc/sudoers에서 사용하여 sudoers 규칙을 규칙의 일부로 추가할 수 있는 sudoers.d 디렉터리를 만들 수 있습니다. 예를 들어, 다음과 같습니다.

#includedir /etc/sudoers.d

sudo는 /etc/sudoers.d의 각 파일을 읽고 '~'로 끝나거나 '.'를 포함하는 파일 이름을 건너뜁니다. 패키지 관리자 또는 편집기 임시/백업 파일에 문제가 발생하지 않도록 문자를 사용하세요. 파일은 정렬된 어휘 순서로 구문 분석됩니다. 즉, /etc/sudoers.d/01_first가 /etc/sudoers.d/10_second보다 먼저 구문 분석됩니다. 정렬은 숫자가 아닌 어휘이므로 /etc/sudoers.d/1_whoops는 /etc/sudoers.d/10_second 다음에 로드됩니다. 파일 이름에 앞에 0을 일관되게 사용하면 이러한 문제를 방지할 수 있습니다.

#include를 통해 포함된 파일과 달리 visudo는 구문 오류가 없는 한 #includedir 디렉터리의 파일을 편집하지 않습니다. 파일을 직접 편집하려면 ‑f 플래그와 함께 visudo를 실행하는 것이 여전히 가능합니다.

/etc/sudoers.d/joe는 joe에게 액세스 권한을 부여하고 파일을 제거하여 액세스 권한을 제거할 때 존재합니다.

답변4

crontab을 추가하여 사용자를 sudo 그룹에 넣은 다음 두 번째 crontab을 추가하여 해당 사용자를 제거할 수 있습니다.

관련 정보