향후 파일의 권한을 빼는 대신 강제로 설정하려면 어떻게 해야 합니까?

향후 파일의 권한을 빼는 대신 강제로 설정하려면 어떻게 해야 합니까?

logs/error.logUbuntu Linux에 권한 660( rw-rw----) 또는 640( )이 있는 파일을 생성하는 프로그램이 있습니다 rw-r-----. 하지만 파일 권한은 항상 666( rw-rw-rw-)(프로그램이 파일을 생성할 때 포함) 이기를 원합니다 .

한계:

  1. 프로그램을 수정할 수 없습니다. 따라서 660프로그램이 새 파일을 사용하는 모드를 변경할 수 없습니다.
  2. 프로그램은 언제든지 파일을 다시 생성할 수 있습니다. 따라서 수동으로 실행되는 단일 솔루션은 chmod적합하지 않습니다.
  3. 일부 권한을 추가해야 하지만 축소해서는 안 됩니다. 따라서 둘 umasksetfacl적합하지 않습니다.

답변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에게 감사드립니다!

관련 정보