사용자 공간 프로그램은 로그를 어디에 저장해야 합니까?

사용자 공간 프로그램은 로그를 어디에 저장해야 합니까?

권한 없이 실행하고 싶은 스크립트를 작성 중입니다. 스크립트에서 발생한 오류를 일부 로그 파일에 기록하고 싶습니다. 에게 편지를 쓸 권한이 없습니다 /var/log. 내 홈 디렉토리에 편지를 쓰고 싶지 않습니다.

런타임 정보가 어디에 있는지 기록할 수 있는 사용자 공간 스크립트가 있습니까? 잠재적인 보안 문제를 일으키지 않고 스크립트에 대한 정보를 기록하는 가장 좋은 방법은 무엇입니까 /var/log? 스크립트에 uid/gid를 설정하는 것이 망설여집니다.

답변1

일반 사용자로서 프로그램을 실행하기로 결정한 경우 해당 로그의 자연스러운 위치는 홈 디렉터리입니다. 홈 디렉터리는 실행하는 프로그램의 로그이든 다른 파일이든 상관없이 모든 파일을 저장하는 데 사용됩니다.

프로그램이 시스템의 일부로 실행되고 일반적인 전용 시스템 사용자로 실행되는 경우 해당 로그의 기본 위치는 입니다 /var/log. 하위 디렉터리를 만들고 /var/log/myapp애플리케이션이 여기에 쓸 수 있도록 적절한 권한을 부여합니다.

관련이 있고 운영 체제에서 허용하는 경우 로그 파일을 추가 전용으로 표시하십시오. 루트만이 이 작업을 수행할 수 있습니다. 이 방법의 장점은 애플리케이션이 손상된 경우 과거 로그를 삭제할 수 없다는 점이며 이는 손상에 대한 포렌식 분석에 매우 유용합니다. 로그를 회전하려면 루트의 개입이 필요합니다. chown그러면 응용 프로그램이 더 이상 로그 파일을 열 수 없고, rename파일을 기록하고, 적절한 소유권을 가진 새로운 추가 전용 파일을 만든 다음, 응용 프로그램에 새로운 빈 파일을 열도록 알릴 수 없습니다.

다음을 호출하여 모든 애플리케이션을 시스템 로그에 기록할 수 있습니다.logger(1)또는syslog(3).

답변2

일반 사용자는 /var/log에 쓸 수 없지만 요청하면 syslog 데몬이 대신 이 작업을 수행합니다. 예를 들어 표준 시스템 로그에 메시지를 기록하려면 시스템에서 /var/log/syslog4.4BSD 유틸리티를 사용할 수 있습니다. logger이는 Debian에 기본적으로 설치되며 bsdutilsDebian 파생 패키지에 포함되어 있습니다.

기존 로그 회전, 유지 관리 및 모니터링 도구의 이점을 얻을 수 있지만 권한이 필요하다는 단점이 있습니다.읽다시스템 로그 및 스크립트의 메시지와 다른 프로그램의 메시지 혼합.

$ logger Hello
$ echo Goodbye | logger
$ sudo tail -2 /var/log/syslog
Feb 19 21:16:15 debian-host jander: Hello
Feb 19 21:16:21 debian-host logger: Goodbye

선택할 수 있는 다양한 구성 옵션이 있습니다. 자세한 내용은 에서 확인할 수 있습니다 man logger.

답변3

root일반적으로 데몬을 사용하면 권한이 없는 사용자가 로그 파일에 쓸 수 있도록 로그 파일이 생성된 후 권한이 변경됩니다. logrotate그런 다음 순환 중에 권한을 유지하도록 설정합니다.

데몬이 아닌 명령인 경우 로그인 /tmp(사용 권장)하고 mktemp로그 위치를 통해 사용자에게 알립니다.STDOUT

답변4

애플리케이션(myapp)이 루트 권한으로 실행 중인 경우 로그를 /var/log/myapp에 저장하세요.

그렇지 않으면 $HOME/.local/myapp에 로그 파일을 저장하십시오.

관련 정보