권한 없이 실행하고 싶은 스크립트를 작성 중입니다. 스크립트에서 발생한 오류를 일부 로그 파일에 기록하고 싶습니다. 에게 편지를 쓸 권한이 없습니다 /var/log
. 내 홈 디렉토리에 편지를 쓰고 싶지 않습니다.
런타임 정보가 어디에 있는지 기록할 수 있는 사용자 공간 스크립트가 있습니까? 잠재적인 보안 문제를 일으키지 않고 스크립트에 대한 정보를 기록하는 가장 좋은 방법은 무엇입니까 /var/log
? 스크립트에 uid/gid를 설정하는 것이 망설여집니다.
답변1
일반 사용자로서 프로그램을 실행하기로 결정한 경우 해당 로그의 자연스러운 위치는 홈 디렉터리입니다. 홈 디렉터리는 실행하는 프로그램의 로그이든 다른 파일이든 상관없이 모든 파일을 저장하는 데 사용됩니다.
프로그램이 시스템의 일부로 실행되고 일반적인 전용 시스템 사용자로 실행되는 경우 해당 로그의 기본 위치는 입니다 /var/log
. 하위 디렉터리를 만들고 /var/log/myapp
애플리케이션이 여기에 쓸 수 있도록 적절한 권한을 부여합니다.
관련이 있고 운영 체제에서 허용하는 경우 로그 파일을 추가 전용으로 표시하십시오. 루트만이 이 작업을 수행할 수 있습니다. 이 방법의 장점은 애플리케이션이 손상된 경우 과거 로그를 삭제할 수 없다는 점이며 이는 손상에 대한 포렌식 분석에 매우 유용합니다. 로그를 회전하려면 루트의 개입이 필요합니다. chown
그러면 응용 프로그램이 더 이상 로그 파일을 열 수 없고, rename
파일을 기록하고, 적절한 소유권을 가진 새로운 추가 전용 파일을 만든 다음, 응용 프로그램에 새로운 빈 파일을 열도록 알릴 수 없습니다.
다음을 호출하여 모든 애플리케이션을 시스템 로그에 기록할 수 있습니다.logger(1)
또는syslog(3)
.
답변2
일반 사용자는 /var/log에 쓸 수 없지만 요청하면 syslog 데몬이 대신 이 작업을 수행합니다. 예를 들어 표준 시스템 로그에 메시지를 기록하려면 시스템에서 /var/log/syslog
4.4BSD 유틸리티를 사용할 수 있습니다. logger
이는 Debian에 기본적으로 설치되며 bsdutils
Debian 파생 패키지에 포함되어 있습니다.
기존 로그 회전, 유지 관리 및 모니터링 도구의 이점을 얻을 수 있지만 권한이 필요하다는 단점이 있습니다.읽다시스템 로그 및 스크립트의 메시지와 다른 프로그램의 메시지 혼합.
$ 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에 로그 파일을 저장하십시오.