일주일에 하루 동안 Sudoers?


10

상사로부터 프로덕션 레드햇 서버의 sysadmin으로 자원했습니다. 그는 rm -f *얼마 전에 발생한 사고를 피하기 위해 보안을 강화하도록 요청 했습니다.

현재 53 명의 사용자가 시스템에 sudo-ing하고 있으며 이는 감사의 악몽입니다. 특정 요일에만 사용자 액세스를 허용 할 수 있는지 궁금합니다.

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

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


10
매뉴얼 페이지를 읽지 않는 것이 좋습니다. xkcd # 1343 참조
— user60684

3
아니요, IMHO를 읽을 수 없기 때문에 설명서를 읽지 말라고 지시하고 있습니다. OP는 읽기 편한 경우 맨 페이지에서 답을 찾을 수 있습니다.
— user60684

10
이 작업을 수행 할 수 있지만 사용자는 루트가있는 날마다 항상 sudo 액세스 권한을 되돌릴 수 있습니다.
— Nick Matteo

2
@ Mark0978 회사의 이름을 알고 있다면 머릿속에서 웃으면 서 죽을 것입니다. 프로덕션 서버에서 허용되는 것은 수치입니다.
— Chris

3
이것은 어리석은 것 같습니다. 단지 Bill이 수요일 아침 시간대가 실행될 때까지 기다려야한다는 것을 의미합니다 rm -rf /.
— Michael Hampton

답변:


21

sudo Linux 박스의 다른 모든 것들과 마찬가지로 PAM을 통한 인증을 수행합니다.

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

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

account    requisite  pam_time.so

하나에 /etc/pam.d/sudo만 sudo를하거나 할 수 있도록 /etc/pam.d/common-account시스템의 모든 프로그램을 가능하게합니다 (PAM-인증 업데이트 블록 후).

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

sudo;*;fred;Fr1500-1700

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

편집 : 분명히, 나는 다른 대답과 다양한 의견에 동의합니다. 너무 많은 사람들이 루트로 너무 많은 명령을 실행하는 것처럼 보이므로 실제로 수정해야합니다. 물론 루트가 될 수 있다면 pam 설정을 편집 할 수 있습니다.


PAM은 구현하기가 복잡해 보이지만 누가 언제 무엇을하는지 더 엄격하게 제어 할 수 있습니다. 수락하고 투표했습니다. 감사합니다.
— Chris

2
나는 그를 격려하는 것이 정답이라고 생각하지 않습니다. IMAO이 질문에 대한 정답은 "HILL FOR THE HILLS !!!! 1! 1 !! 1! 1"
— o0 '입니다.

이것이 실제로 작동합니까? pam_time.so를 사용하여 "login", "ssh", "gdm", "su"와 같은 다양한 로그인 메커니즘을 제어 할 수 있지만 sudo에서는 작동하지 않습니다. 근무 시간 외의 일반적인 메커니즘으로 인해 누군가가 뿌리 내리는 것을 막고 싶습니다. (방탄이 아님을 미리 알고 누군가가 미리 setuid 쉘이나 백도어를 준비 할 수는 있지만 이런 상황에서는 그런 일이 일어날 것으로 예상하지 않습니다.)
— Sam Watkins

20

53 명의 사용자가 일상적인 작업을 수행하기 위해 sudo가 필요한 이유에 대해 의문을 제기합니다. 대부분의 사용자 (심지어 개발자)에게도 sudo는 일상적인 sudo rm -rf *명령 이 아닌 드문 예외가되어야합니다 .

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

사람들이 일주일에 하루에 sudo 액세스를 제한 할 수 있더라도, 여전히 일주일에 sudo 액세스 권한을 가진 53 명의 사람들이므로 핵심 문제에 실제로 도움이되지 않습니다.

그 문제에 대해 많은 사용자가 프로덕션 서버에 액세스해야하는지 여부에 대해 의문을 제기합니다.


또는 필요한 루트 파일 인 chroot jailed sftp 종류의 설정에 대한 액세스 권한을 게시 할 수 있습니다.
— boatcoder

@Johnny이 호스트에서 수행 한 대부분의 작업은 쉘 스크립트를 작성 / 편집하고 실행하는 것입니다. 사용자는 허용되지 않아야합니다 vi/cp/mv/rm. 만 cd하고 more. 다른 건 없어
— Chris

@Johnny 디렉토리에 ACL을 설정하면 해당 디렉토리 내의 파일이 기본적으로 ACL 속성을 상속합니까?
— Chris

@Chris 예, 디렉토리의 기본 ACL을 설정 한 경우
— Michael Hampton

이것은 답변이 아닌 의견이어야합니다. OP의 시나리오가 합리적인지 여부에 관계없이 다른 사람들은 특정 시간에 일부 사용자에 대해 "스도"를 잠글 필요가 있습니다.
— Sam Watkins

7

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

#includedir 지시문은 / etc / sudoers에서 sudo.d 디렉토리를 작성하여 규칙의 일부로 sudoers 규칙을 삭제할 수있는 sudo.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가 액세스하기를 원할 때 존재하며 단순히 파일을 제거하여 액세스를 제거 할 수 있습니다.


1
사용자 별 sudoers 파일 ( 'sudoers.user1'등)에 문제가있었습니다. '~'및 '.' 캐릭터가 내 문제를 해결했습니다. 나는 당신이 설명서를 읽어서 기쁘다! 감사합니다.
— Han

0

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.