
감사 목적으로 각 사용자 세션의 명령 기록을 새 파일에 저장하는 해결 방법을 구현했습니다. 따라서 각 세션 파일은 시작 시간과 사용자 이름으로 식별됩니다.
질문:세션 사용자는 파일 소유자이므로 파일을 수정하거나 삭제할 수도 있습니다.
파일이 채워지면 파일이 변경되는 것을 방지할 수 있는 방법이 있습니까? 그것은 마치한번 써봐그리고 그것은 잠겨 있습니다.
답변1
당신이 제안한 것은 표준 도구를 사용하여 올바르게 수행하는 것이 거의 불가능합니다.
아시다시피 명령 기록 저장은 일반적으로 파일이 사용자의 소유이고 사용자가 마음대로 삭제, 지우기 또는 편집할 수 있기 때문에 작동하지 않습니다. 명령 기록 파일을 일부 신뢰할 수 있는 프로세스가 읽는 파이프로 만들어 이 문제를 해결할 수 있더라도 사용자가 기록 파일을 닫거나 다른 곳을 가리키는 것을 막을 수 있는 방법은 없습니다.
강제 명령 로깅(파이프, 소켓 또는 syslog를 통해 다른 프로세스에 로그 전송)을 사용하여 새 셸을 생성하면 이를 방지할 수 있지만 사용자는 여전히 일반 셸이나 Perl 또는 Python 인터프리터 등을 실행하여 문제를 해결할 수 있습니다. 로깅 문제. 하위 프로세스가 수행하는 작업을 로깅하려면 전체 세션을 래핑하거나 script
유사하게 사용자가 보는 모든 것을 로깅해야 합니다. 그래도 터미널에 인쇄하지 않고도 코드를 다운로드하고 실행하는 것이 가능합니다. 사용자가 임의의 프로그램을 실행하지 못하게 하면 그렇게 되지만 가장 유용한 작업도 수행하지 못하게 됩니다. 쉘이나 Perl 스크립트가 실행되지 않도록 하면 많은 일반 도구도 작동하지 않게 됩니다.
쉘과 기타 유틸리티가 도구라는 점을 고려하면 이 결과는 놀라운 일이 아닙니다.~을 위한대신 사용자반대하다그들을.
strace
사용자의 세션을 래퍼 또는 이와 유사한 것으로 예약하여 프로세스와 시스템의 모든 상호 작용을 볼 수 있지만 strace
더 긴 세션에서 로그를 읽는 것은 흥미롭지 않습니다.
또한 귀하의 사용자가 이러한 수준의 모니터링에 반대할 것이라고 생각합니다. 저도 그럴 것입니다.
답변2
설정에 대해 더 많이 알지 못하면 좋은 대답을 하기는 어렵지만 이를 지원하는 파일 시스템(예: ext3)을 사용한다고 가정하고 로그 파일을 "추가 전용"으로 표시하면 뭔가를 달성할 수 있는 방법처럼 들립니다. , 사용 chattr +a <file>
.
이 속성을 설정하거나 설정 해제하려면 특별한 권한이 필요하며, 그런 경우에는 파일만 첨부할 수 있습니다. 이렇게 하면 사용자가 파일에 임의의 데이터를 추가하는 것을 막을 수는 없지만 이미 있는 데이터를 삭제하는 것은 방지할 수 있습니다.