내 상사는 프로덕션 Redhat 서버의 시스템 관리자로 자원했습니다. rm -f *
얼마 전 비슷한 사고가 발생 하지 않도록 보안을 강화해달라고 부탁했다 .
이제 53명의 사용자가 시스템에 sudo 작업을 하고 있는데, 이는 감사의 악몽입니다. 특정 요일에만 사용자의 접속을 허용하는 것이 가능한지 궁금합니다.
예를 들어, 사용자 "Joe"는 화요일과 목요일에만 로그인하고 "Jane"은 일요일에만 로그인하도록 허용할 수 있습니까? etc/sudoers
이를 허용하도록 사용자 정의할 수 있습니까 ?
sudoer를 사용하는 것보다 더 좋은 방법이 있습니까?
답변1
sudo
Linux 시스템의 다른 모든 것과 마찬가지로 PAM을 통해 인증합니다.
따라서 를 사용하여 이 작업을 수행할 수 있어야 합니다 pam_time.so
.
이 모듈은 적어도 데비안에서는 기본적으로 활성화되어 있지 않습니다. 다음과 같은 줄을 추가해야 합니다.
account requisite pam_time.so
/etc/pam.d/sudo
sudo 만 활성화하거나 /etc/pam.d/common-account
(pam-auth-update 블록 이후) 시스템의 모든 프로그램을 활성화합니다.
그런 다음 편집 /etc/security/time.conf
하여 한도를 설정하세요. 예를 들어 금요일 오후 3시부터 5시 사이에만 sudo
Fred를 허용하려면 서비스 이름이 이어야 합니다 .sudo
sudo;*;fred;Fr1500-1700
(참고: 아직 테스트해 보지 않았습니다.)
편집하다:분명히 말하면 루트로 너무 많은 명령을 실행하는 사람이 너무 많은 것 같아서 실제로 이 문제를 해결해야 한다는 다른 답변과 다양한 논평자에 동의합니다. 물론, 루트가 될 수 있다면 pam 구성을 편집할 수 있습니다...
답변2
53명의 사용자가 일상 업무를 수행하기 위해 왜 sudo가 필요한지 의문입니다. 대부분의 사용자(개발자 포함)에게 sudo는 누군가가 무작위 명령을 실행하는 루틴이 아니라 드문 예외여야 합니다 sudo rm -rf *
.
그룹 권한(또는 고급 ACL)을 사용하여 사람들에게 작업을 수행하는 데 필요한 파일에 대한 액세스 권한을 부여할 수 있습니까? setuid, sudo 스크립트 또는 바이너리를 사용하여 서비스 다시 시작과 같은 작업을 수행할 수 있습니까? (보안 setuid/sudo 스크립트를 작성하는 것은 어렵기 때문에 정직한 사람들을 정직하게 유지하는 것이 더 중요합니다.)
사람들이 sudo에 액세스할 수 있는 권한을 일주일에 하루로 제한할 수 있다고 해도 여전히 일주일에 sudo에 액세스할 수 있는 사람은 53명이므로 이는 핵심 문제를 해결하는 데 실제로 도움이 되지 않습니다.
그렇다면 많은 사용자가 프로덕션 서버에 액세스해야 하는지 궁금합니다. 필요한 로그나 데이터/파일을 비프로덕션 시스템으로 보낼 수 있습니까?
답변3
가장 쉬운 방법은 sudoers.d 디렉터리(includedir를 통해)를 사용하여 구성하는 것입니다. 그런 다음 cron 작업을 사용하여 필요에 따라 사용자별 규칙을 해당 디렉터리에 배치할 수 있습니다.
#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을 추가하여 사용자를 제거할 수 있습니다.