대상 폴더 ACL을 따르도록 nagios 명령을 사용하여 무엇을 변경할 수 있습니까?

대상 폴더 ACL을 따르도록 nagios 명령을 사용하여 무엇을 변경할 수 있습니까?

다음과 같은 nagios 알림 명령이 있습니다.

/usr/bin/printf "%b" "NotificationType=$NOTIFICATIONTYPE$\nService=$SERVICEDESC$\nHost=$HOSTALIAS$\nAddress=$HOSTADDRESS$\nState=$SERVICESTATE$\nDateTime=$LONGDATETIME$\nAdditionalInfo=$SERVICEOUTPUT$\n" > $$(mktemp -p $CONTACTADDRESS1$ service.XXXXXXXX.alert)

가독성을 높이기 위해 줄 바꿈을 추가하세요.

/usr/bin/printf "%b" 
"NotificationType=$NOTIFICATIONTYPE$\nService=$SERVICEDESC$\nHost=$HOSTALIAS$\nAddress=$HOSTADDRESS$\nState=$SERVICESTATE$\nDateTime=$LONGDATETIME$\nAdditionalInfo=$SERVICEOUTPUT$\n" 
> $$(mktemp -p $CONTACTADDRESS1$ service.XXXXXXXX.alert)

이는 실제로 정의된 디렉터리에 새 파일을 생성하는데, $CONTACTADDRESS1$제 경우에는 /home/alert/NagiosAlerts. nagios 사용자는 이 디렉터리에 쓸 수 있고 내 경고 사용자는 여기에서 생성된 파일을 읽고 쓸 수 있습니다. 그래서 다음을 설정했습니다.

# setfacl -Rdm g:nagios:rw /home/alert/NagiosAlerts/
# setfacl -Rm g:nagios:rw /home/alert/NagiosAlerts/

이제 폴더 권한은 다음과 같습니다

[kanmonitor01]# pwd
/home/alert/NagiosAlerts
[kanmonitor01]# ll ..
total 4
drwxrws---+ 2 alert nagios 4096 Dec 21 14:27 NagiosAlerts
[kanmonitor01]# getfacl .
# file: .
# owner: alert
# group: nagios
# flags: -s-
user::rwx
group::rwx
group:nagios:rw-
mask::rwx
other::---
default:user::rwx
default:group::rw-
default:group:nagios:rw-
default:mask::rw-
default:other::---

그래서 nagios 사용자로서 새 파일을 만졌습니다 ...

[nagios@kanmonitor01]$ whoami
nagios
[nagios@kanmonitor01]$ touch file.bagel
[nagios@kanmonitor01]$ ll file.bagel
-rw-rw----+ 1 nagios nagios 0 Dec 21 14:57 file.bagel

내 생각엔 괜찮을 것 같아. 파일의 그룹 권한은 rw입니다. 이는 예상된 결과라고 생각합니다. 그러나 nagios 서비스가 질문 시작 부분에서 명령을 실행하면 다음과 같이 끝납니다.

[@kanmonitor01]# ll service.iCSThqzg.alert
-rw-------+ 1 nagios nagios 178 Dec 21 14:51 service.iCSThqzg.alert

[kanmonitor01]# getfacl service.iCSThqzg.alert
# file: service.iCSThqzg.alert
# owner: nagios
# group: nagios
user::rw-
group::rw-                      #effective:---
group:nagios:rw-                #effective:---
mask::---
other::---

따라서 ACL이 있지만 내가 원하는 것은 아닙니다. 나에게 이것은 예상되는 동작이 아닙니다. 기본 동작 등으로 인해 ACL을 존중하지 않는 특정 바이너리에 대한 많은 문제가 있습니다. 내 상황이 mktemp나에게 이 문제를 일으키는 것 같습니다 . 나는 chmod필요할 때마다 각 파일에 대해 뭔가를 해야 하는 것을 피하려고 노력하고 있습니다.

여기에 어떤 좋은 행동 방침이 있는지 잘 모르겠습니다. 궁극적으로 이 디렉터리에 파일을 쓸 수 있으려면 사용자 nagios가 필요하고 동일한 파일을 읽고 쓸 수 있으려면 사용자 경고가 필요합니다. ACL이 갈 길인 것 같습니다 ...

답변1

mktemp명시적으로 권한 0600을 사용하여 파일을 생성합니다.

$ strace -e open mktemp -p .
[...]
open("./tmp.EuTEGOcoEJ", O_RDWR|O_CREAT|O_EXCL, 0600) = 3

그러면 해당 기본 ACL이 재정의됩니다. mktemp그룹 및 기타 권한이 필요하지 않습니다. 그런 일이 일어나지 않도록 속이는 것은 잘못된 방법입니다.

chmod생성 후에 파일을 생성 할 수 있습니다 (나중에 mktemp의 의지에 반함).

file=$(mktemp....) && chmod g+r -- "$file" && ... > "$file"

또는 mktemp파일 이름을 생성하지 않고 찾기를 사용하고 쉘 리디렉션이 파일 이름을 생성하도록 합니다.

umask 077; ... > "$(mktemp -u ...)"

이 경우 ACL이 umask.

( 여기서 -uGNU mktemp)는안전하지 않음mktemp고유한 파일 이름을 찾으려고 시도하지만 파일을 출력할 때 파일이 생성되지 않을 것이라는 보장은 없습니다(아마도 다른 곳으로의 심볼릭 링크로, 이는 걱정해야 할 사항입니다) . 쉘은 시간을 엽니다. 경쟁 조건( 여기서 set -o clobber필요함)도 있기 때문에 이를 방지할 방법이 없습니다 .zshsysopen -o excl

관련 정보