직원들이 내가 만든 프로그램에 액세스할 수 있도록 숨겨진 "액세스 로그" 파일을 만들고 있는데 .txt
, 파일을 삭제할 수 없도록 만드는 방법을 알아야 합니다.
그 이유는 이 프로그램이 워크스테이션에서 수행하는 많은 작업을 자동화하는 데 도움이 되지만 많은 피해를 입힐 수도 있기 때문입니다. 따라서 문제가 발생할 경우를 대비해 누가 액세스하는지 추적해야 합니다.
질문을 다시 말하면, 파일에 쓸 수 있으면서도 다른 사람이 파일을 삭제하는 것을 방지하는 방법입니다.
답변1
나는 사용자가 응용 프로그램을 시작할 때마다 응용 프로그램이 모든 워크스테이션에서 액세스할 수 있는 Samba 공유의 파일에 일부 정보를 기록하여 누가 응용 프로그램을 시작했는지 추적한다고 추측합니다. "액세스 로그"를 언급하고 계시므로 내용을 수정하지 않고 파일에 추가하기만 하면 될 것으로 추측됩니다.
파일이 서버 측의 ext2/3/4 파일 시스템에 있는 경우 samba 사용자에게 해당 디렉토리에 대한 쓰기 권한이 없는지 확인하십시오. 이렇게 하면 우발적이거나 의도적인 삭제를 방지할 수 있습니다. 그런 다음 추가 전용 속성 활성화를 사용하면 chattr +a <filename>
정보는 추가만 가능하고 삭제/수정/잘림은 불가능합니다. 파일은 여전히 모든 사람에 대한 쓰기 권한을 가질 수 있으므로 응용 프로그램은 사용자 권한이 있는 경우에도 파일에 추가할 수 있습니다.
참고: chattr
다른 파일 시스템에서도 작동할 수 있습니다. xfs. 정확한 목록이 없습니다.
답변2
기본적으로 여기서 수행하는 작업은 로깅이므로 삼바 공유의 파일을 해킹하는 대신 rsyslogd와 같은 원격 로깅 데몬을 사용하여 로깅하는 것이 더 나을 수 있습니다.
즉, 파일을 삭제하는 것은 변경입니다.목차파일이 아닌 파일을 포함합니다. 따라서 디렉터리에 대한 사용자의 쓰기 권한을 제거하면 파일을 삭제할 수 없습니다. 물론 여전히 조작되거나 실수로 잘릴 수 있습니다.
답변3
파일에 쓸 수 있고 사용자 그룹에 읽기 전용 액세스를 허용한다는 목표는 파일 소유권 및 권한을 통해 달성할 수 있습니다. 그러한 접근이 필요한 모든 사용자는 다음과 같은 위치에 있다고 가정합니다."사용자"그룹과 귀하는 개별적으로 액세스할 수 있습니다.뿌리시스템에 계정을 추가합니다. 그런 다음 (예를 들어뿌리):
touch /var/log/AccessLog
chown root:users /var/log/AccessLog
chmod 640 /var/log/AccessLog
이제부터 루트만 파일을 수정할 수 있지만, 모든 사용자가 파일을 수정할 수 있습니다.사용자읽을 수 있을 것입니다.
반대로, 사용자가 파일에 쓸 수 있도록 허용하고 싶지만 누가(그리고 언제) 수정했는지 추적해야 하는 경우 FAM(파일 변경 모니터). 이 외에도 파일의 이전 버전을 모두 기록하기 위해 다음과 같은 버전 제어 시스템을 넣을 수 있습니다.위장관예를 들어)) - 모든 파일 수정이 로컬 저장소에 대한 커밋을 트리거하도록 FAM과 작동하도록 만들 수 있습니다. 이 작업을 수행하는 더 쉬운 방법이 있을 수 있지만 아직 생각해 본 적이 없습니다(적어도 파일 시스템 위에서 작동하는 방법은 없음).
답변4
crontab을 생성한 후 처음 몇 분 동안에만 파일이 수정된 경우:
find /somedir -type f -user sambauser -mtime +3m -exec chown root:users {} \; -exec chmod 640 {} \;
마지막으로 수정된 지 3분 이상 지난 모든 파일을 찾아 소유자/권한을 변경합니다.