루트가 아닌 사용자의 메일 로그에 대한 Grep 액세스

루트가 아닌 사용자의 메일 로그에 대한 Grep 액세스

grep내 메일로그( )에 대한 특정(일반) 사용자 액세스 권한을 부여하고 싶습니다 /var/log/maillog*.

로그 권한은 -only로 유지되어야 하기 때문에 변경할 준비가 되어 있지 않으므로 root선호하는 솔루션은 sudoers.

또한: 가능한 한 적은 다른 권한만 부여하고 싶습니다. 이상적으로는 사용자가 메일 로그(및 회전된 파일)에만 액세스할 수 있습니다.

예:

username ALL= NOPASSWD: /bin/grep 

해당 사용자가 기본적으로 grep시스템의 모든 파일에 액세스할 수 있도록 허용하는데, 이는 제가 피하고 싶은 것입니다.

여기서 가장 좋은 해결책은 무엇입니까?
참고: 그 자체로 그럴 필요는 없습니다 grep. 사용자는 메일 로그에 대한 읽기 액세스만 필요하며 아마도 메일 로그에 grep액세스하는 데에만 사용할 것입니다.

답변1

파일에 acl을 사용하여 사용자에게 읽기 권한을 부여할 수 있습니다.

setfacl -m user:grepuser:r /var/log/maillog*

이는 사용자가 원하는 도구를 사용할 수 있다는 장점이 있습니다.

이것은 또한 maillog에 대해 안전한 logrotate입니다*

답변2

사용자가 검색할 특정 문자열과 사용하여 확인할 특정 파일을 알지 못하는 한 sudo이에 대한 좋은 해결책은 아닙니다. 다음과 같은 규칙을 생성하면:

blizz ALL=root NOPASSWD: /bin/grep * /var/log/maillog*

사용자는 다음과 같은 명령을 실행할 수 있습니다.

grep root /etc/shadow /var/log/maillog
grep = /root/my.cnf /var/log/maillog

그들은 시스템의 모든 파일을 읽을 수 있습니다. 이 문제에 대한 자세한 내용은 여기에서 확인할 수 있습니다.

http://blog.csnc.ch/2012/10/dangerous-sudoers-entries-part-4-wildcards/

사용자가 확인할 문자열과 파일을 알고 있다면 각 시나리오에 대해 별도의 규칙을 정의할 수 있습니다. 예를 들어:

Cmnd_Alias  MAILLOGA = /bin/grep 'Connection refused' /var/log/maillog
Cmnd_Alias  MAILLOGB = /bin/grep 'Connection refused' /var/log/maillog.1
Cmnd_Alias  MAILLOGC = /bin/grep 'imap-login' /var/log/maillog
Cmnd_Alias  MAILLOGD = /bin/grep 'imap-login' /var/log/maillog.1
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD

그러나 이는 번거로울 수 있으며 sudo 구성이 지나치게 커질 수 있습니다.

또는 명령 grep을 통해 파일에 대한 액세스 권한을 부여하는 대신 more대화형으로 파일을 검색할 수 있습니다.

Cmnd_Alias  MAILLOG = /bin/more /var/log/mailllog
Cmnd_Alias  MAILLOG1 = /bin/more /var/log/mailllog.1
Cmnd_Alias  MAILLOG2 = /bin/more /var/log/mailllog.2
Cmnd_Alias  MAILLOG3 = /bin/more /var/log/mailllog.3
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD

그러나 이는 사용자가 검색 기록(예: .bash_history)을 유지하거나 검색을 위한 자체 스크립트 또는 별칭을 생성하는 것을 허용하지 않습니다. 또한 로그 회전이 있는 경우 압축된 로그를 구문 분석할 수 없습니다.

메모:하지 마라명령 에 sudo 액세스 권한을 부여합니다 less. 사용자는 프로세스에서 벗어날 수 있습니다. 예를 들어 실행 !/bin/bash하면 less시스템에 대한 루트 액세스 권한이 부여됩니다.

또 다른 옵션은 파일에 대한 규칙을 마련하여 마음에 드는 대로 cat파이프할 수 있도록 하는 것입니다 . grep예를 들어:

sudo cat /var/log/maillog | grep "anything can go here"

결국 가장 간단하고 최선의 해결책은 로그 파일에 대한 권한을 변경하여 로그에 대한 읽기 액세스 권한을 부여하는 것입니다. 다음과 같이 할 수 있습니다.

groupadd logcheck
chgrp logcheck /var/log/maillog*
chmod g+r /var/log/maillog*
useradd -G logcheck blizz

그런 다음 파일을 분석하려는 도구(예 grep: zgrep, less, more, view, 등)를 사용할 수 있습니다.

답변3

이는 예상대로 작동합니다sudoers파일:

%users  ALL= /bin/cat /var/log/mail.log
%users  ALL= /bin/cat /var/log/mail.err

(Ubuntu의 로그 경로, 필요한 경우 변경)

다음과 같은 일반적인 출력 전용 도구 사용고양이간단하고 안전합니다. 다음과 같이 특정 옵션을 허용하거나 제한할 필요가 없습니다.grepsudoers에서 직접. 또한 로그를 필터링할 수 있습니다.grep 여부도구, 즉.,sed.

방법을 잘 모르겠습니다sudoCentOS에 구성되어 있지만 비밀번호를 묻는 메시지가 표시되는 경우부름사용자(다음에 속하지 않음표적사용자), 나는 사용을 피하고 싶습니다NOPASSWD. 이는 적대적인 당사자가 사용자의 비밀번호를 모르고 사용자의 계정에 액세스할 경우 보안상의 이점이 될 수 있습니다.

관련 정보