
만약 내가:
[user@notebook ~] sudo echo 123456uu
123456uu
[user@notebook ~]
그러면 로그에서 다음을 볼 수 있습니다.
[root@notebook /var/log] grep 123456uu *
auth.log:Jan 9 17:01:51 notebook sudo: user : TTY=pts/3 ; PWD=/home/user ; USER=root ; COMMAND=/bin/echo 123456uu
[root@notebook /var/log]
하지만 만약 내가:
[user@notebook ~] sudo su -
[root@notebook ~] echo 1234567zz
1234567zz
[root@notebook ~]
로그에서 볼 수 없습니다.
[root@notebook /var/log] grep 1234567zz *
[root@notebook /var/log] echo $?
1
[root@notebook /var/log]
내 질문: "sudo su -" 내 명령에 대한 로깅을 어떻게 켤 수 있나요?
OS는 Ubuntu 12.04이지만 문제는 일반적입니다.
업데이트#1:
[user@notebook ~] sudo su -
[sudo] password for user:
[root@notebook ~] echo zizizi
zizizi
[root@notebook ~] cd /var/log
[root@notebook /var/log] grep -iIR 'zizizi' *
[root@notebook /var/log] grep 'COMMAND=/bin/su -' *
auth.log:Jan 10 15:42:42 notebook sudo: user : TTY=pts/1 ; PWD=/home/user ; USER=root ; COMMAND=/bin/su -
[root@notebook /var/log]
답변1
Ubuntu 12.04를 사용하고 있으므로 log_input
및 log_output
옵션을 통해 활성화된 I/O 로깅 기능을 살펴보세요.
log_input
설정된 경우
sudo
의사 tty에서 명령을 실행하고 모든 사용자 입력을 기록합니다. I/O 리디렉션으로 인해 또는 명령이 파이프라인의 일부이기 때문에 표준 입력이 사용자의 tty에 연결되지 않은 경우 해당 입력도 캡처되어 별도의 로그 파일에 저장됩니다.
iolog_dir
입력은 접두사가 붙은 일반 sudo 로그 줄에 포함된 고유 세션 ID를 사용하여 옵션(/var/log/sudo-io
기본값) 으로 지정된 디렉터리에 기록됩니다TSID=
. 이iolog_file
옵션은 세션 ID의 형식을 제어하는 데 사용될 수 있습니다.사용자 입력에는 암호(화면에 표시되지 않더라도)와 같은 민감한 정보가 포함될 수 있으며 이는 암호화되지 않은 채 로그 파일에 저장됩니다. 대부분의 경우 log_output을 통해 명령 출력을 기록하는 것만으로도 충분합니다.
log_output
설정된 경우,
sudo
script(1) 명령과 유사하게 의사 tty에서 명령을 실행하고 화면에 전송된 모든 출력을 기록합니다. I/O 리디렉션으로 인해 또는 명령이 파이프라인의 일부이기 때문에 표준 출력 또는 표준 오류가 사용자의 tty에 연결되지 않은 경우 해당 출력도 캡처되어 별도의 로그 파일에 저장됩니다.
iolog_dir
출력은 접두사가 붙은 일반 sudo 로그 줄에 포함된 고유 세션 ID를 사용하여 옵션(/var/log/sudo-io
기본값) 으로 지정된 디렉터리에 기록됩니다TSID=
. 이iolog_file
옵션은 세션 ID의 형식을 제어하는 데 사용될 수 있습니다.출력 로그는 sudoreplay(8) 유틸리티를 사용하여 볼 수 있으며, 사용 가능한 로그를 나열하거나 검색하는 데에도 사용할 수 있습니다.
구현: 최소 Sudo 버전: 1.7.4p4가 필요합니다.
/etc/sudoers
수정: 필요한 모든 sudoers 항목(명령 또는 별칭을 사용하여 "su"가 지정된 경우)에 두 개의 태그를 추가하기만 하면 됩니다. LOG_INPUT 및 LOG_OUTPUT.
예:
%admins ALL=(ALL) NOPASSWD: LOG_INPUT: LOG_OUTPUT: ALL
다음 기본 로그 디렉토리 구조를 다음에 추가하십시오 sudoers
.
Defaults iolog_dir=/var/log/sudo-io/%{user}
답변2
실행 중이 아니기 때문에 작업이 실패 하면 grep
실행 중이므로 쉘이 시작됩니다. 그러면 쉘이 .sudo su -
echo 1234567zz
su -
echo
이는 의도적인 것이며, 모든 단일 명령 실행을 기록하면 syslog에 쓸모없는 정보가 넘치게 됩니다(일반적으로 보이지 않는 뒤에서 실행되는 수많은 프로그램이 있습니다).
grep을 다음으로 변경하면 grep 'COMMAND=/bin/su -' *
표시됩니다.
sudo su -
의 쓸모없는 사용이기도 합니다 su
. sudo -i
같은 일을합니다.
답변3
복잡성이 증가함에 따라 "sudo su -" 내에서 실행된 명령을 기록하는 세 가지 방법이 있습니다.
- Bash 명령 기록에 의존
- execve 로깅 래퍼 설치
- SELinux의 auditd 사용
어느 것이 적합한지는 실제로 로깅을 통해 달성하려는 작업에 따라 다릅니다.
1) Bash 명령 내역
충분한 행을 유지하고, 다른 세션에서 덮어쓰지 않고, 명령을 무시하지 않고, 적절한 타임스탬프를 유지하도록 기록 기능을 구성하고 싶을 것입니다. (HIST* 변수를 참조하세요.배쉬 매뉴얼). 기록 파일을 편집하거나 환경을 조작하거나 다른 셸을 실행하면 쉽게 전복됩니다.
2) execve 래퍼
스누피 로거하나입니다. /etc/profile
로거 라이브러리가 프로세스의 메모리 맵( )에 있는지 확인하고 /proc/<pid>/maps
, 없으면 설정 LD_PRELOAD
하고 다시 시작합니다( exec $SHELL --login "$@"
). $LIB/snoopy.so
또는 또는를 사용하여 /etc/ld.so.preload에 항목을 추가할 수 있습니다.등가 경로snoopy.so의 32/64비트 버전으로.
더 어렵지만 LD_PRELOAD
위의 환경 변수 버전은 스누피 코드가 더 이상 실행되지 않도록 실행 환경을 조작하여 여전히 전복될 수 있습니다.
콘텐츠를 신뢰할 수 있으려면 Syslog를 오프박스로 전송해야 합니다.
3) 감사
execve 래퍼보다 구성이 약간 더 간단하지만 정보를 추출하기가 더 어렵습니다. 이것은 당신이 실제로 묻고 있는 질문에 대한 대답입니다: "사용자가 발행한 후 시스템에 어떤 영향을 미쳤는지 기록할 수 있는 방법이 있습니까 sudo su -
?" 콘텐츠를 신뢰할 수 있으려면 Syslog를 오프박스로 전송해야 합니다.
이것서버 결함 답변auditd와 함께 사용하기에 상당히 포괄적인 구성인 것 같습니다.
다른 제안이 있습니다.serverfault에 대한 비슷한 질문.
답변4
다른 사람들이 말했듯 sudo
이 이것은 할 수 없습니다.
대신 auditd
. 로그를 원하시면모든 것루트에 의해 수행됨(예: crontab에 의해 수행된 작업 포함), 다음을 사용하십시오.
sudo auditctl -a exit,always -F euid=0
ETA: 모든 것을 기록하면 성능에 영향을 미치므로 약간 제한하는 것이 좋습니다. 예를 보려면 참조하세요 man auditctl
.
원래 로그인 uid가 루트가 아닌 경우에만 syscall을 기록하려면 다음을 대신 사용하십시오.
sudo auditctl -a exit,always -F euid=0 -F auid!=0
로그는 일반적으로 /var/log/audit/audit.log에 저장됩니다. 로 검색할 수 있습니다 ausearch
.
및 auditctl
에 대한 자세한 내용은 매뉴얼 페이지에 있습니다 .audit.rules
ausearch