logs/error.log
Ubuntu Linux에 권한 660
( rw-rw----
) 또는 640
( )이 있는 파일을 생성하는 프로그램이 있습니다 rw-r-----
. 하지만 파일 권한은 항상 666
( rw-rw-rw-
)(프로그램이 파일을 생성할 때 포함) 이기를 원합니다 .
한계:
- 프로그램을 수정할 수 없습니다. 따라서
660
프로그램이 새 파일을 사용하는 모드를 변경할 수 없습니다. - 프로그램은 언제든지 파일을 다시 생성할 수 있습니다. 따라서 수동으로 실행되는 단일 솔루션은
chmod
적합하지 않습니다. - 일부 권한을 추가해야 하지만 축소해서는 안 됩니다. 따라서 둘
umask
다setfacl
적합하지 않습니다.
답변1
이를 사용하여 inotify
파일이나 디렉터리가 생성되는 위치를 추적하여 생성 시 해당 권한을 업데이트할 수 있습니다.
답변2
다른 모든 정상적인 옵션이 실패하는 경우(예: Docker 호스트에서 수행하려는 모든 작업과 호환되는 신비한 로그 생성 프로그램에 적합한 사용자/그룹을 선택하거나 올바른 권한을 사용하도록 프로그램 구성을 수정하는 등) 이 트릭을 사용할 수 있습니다 LD_PRELOAD
.
미스터리 프로그램이 파일을 생성하는 데 사용하는 시스템 호출을 후크합니다( creat
또는 일 수 있음 open
, 확인 strace
). 그런 다음 파일 이름을 비교하고 mode
로그 파일만 수정합니다.
이를 위해서는 C 언어로 프로그래밍하는 방법을 알아야 합니다.
답변3
마지막 해결책Docker 컨테이너 내부에서 실행합니다.
#!/bin/bash
cd logs
umask 0
find . -type f -not -name ".gitignore" -exec chmod 666 \{\} \;
inotifywait -rmq -e attrib -e create -e moved_to --format "%w%f" --exclude "/\.gitignore" . | xargs -n1 -d"\n" chmod 666
이 솔루션은 누구나 쓰기 가능한 권한을 설정하므로 그대로 사용하지 않는 것이 좋습니다. 보다 안전한 권한을 사용하는 다른 방법을 찾아보세요.
팁을 주신 AlexD에게 감사드립니다!