CentOS 8의 권한 거부 오류로 인해 daemontools svscan이 감독을 시작할 수 없습니다.

CentOS 8의 권한 거부 오류로 인해 daemontools svscan이 감독을 시작할 수 없습니다.

공식 문서에 따라 CentOS 8 시스템에 daemontools-0.76을 설치했습니다.http://cr.yp.to/daemontools.html.

/service/test그런 다음 텍스트를 stdout으로 에코하는 간단한 파일로 심볼릭 링크된 테스트 서비스를 만들었습니다 run(기본적으로). 테스트 폴더와 실행 파일 모두 755 권한을 갖습니다.

run파일:

#!/bin/sh

echo "test"

물론 파일은 수동으로 잘 실행되며, 실행할 수도 있고 /command/supervise /service/test서비스도 예상대로 실행됩니다. svc -u/-d <service>감독자를 통해 시작/중지하는 데 사용할 수 있습니다 .

그러나 실행하면 /command/svscan /service다음 오류가 발생합니다.

svscan: warning: unable to start supervise test: permission denied

여기서 어떤 권한이 충돌하는지 나타내는 단서를 찾지 못했습니다. 내가 시도한 것들:

  • 폴더 test/supervise가 있는 경우( supervise수동으로 실행할 때 생성됨)와 이 폴더가 제거된 경우(즉, 서비스를 처음부터 시작하는 경우) 어느 쪽이든 동일한 결과(참고: supervise시작하려고 할 때 실행되지 않습니다 svscan. 그러나 동일한 오류로 백그라운드에서 실행하려고 시도했지만)
  • 명령 자체(아래 /package/admin/daemontools-0.76/command/) 에 대한 확인된 권한(755)
  • 모든 폴더(/command, /service, /package 및 서비스 폴더)에 대한 권한(755)이 확인되었습니다.
  • 아마도 이 디렉토리를 사용하려고 시도하는 경우 문제가 될 수 있는 /tmp마운트 이후가 문제가 될 수 있다고 생각했지만 마운트된 상태에서 다시 시도했지만 도움이 되지 않았습니다.noexecexec
  • 도움 이 될 수 있다고 생각했지만 strace, 훈련받지 않은 눈으로 볼 수 있는 문제는 없는 것 같습니다.
execve("/usr/local/bin/svscan", ["svscan", "/service"], 0x7ffc7385cfe8 /* 21 vars */) = 0
brk(NULL)                               = 0x1eab000
arch_prctl(0x3001 /* ARCH_??? */, 0x7fff479dd530) = -1 EINVAL (Invalid argument)
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=34379, ...}) = 0
mmap(NULL, 34379, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f7af1b35000
close(3)                                = 0
openat(AT_FDCWD, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\2607\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=4176104, ...}) = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f7af1b33000
mmap(NULL, 3938144, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f7af1554000
mprotect(0x7f7af170d000, 2093056, PROT_NONE) = 0
mmap(0x7f7af190c000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b8000) = 0x7f7af190c000 mmap(0x7f7af1912000, 14176, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f7af1912000
close(3)                                = 0
arch_prctl(ARCH_SET_FS, 0x7f7af1b34500) = 0
mprotect(0x7f7af190c000, 16384, PROT_READ) = 0
mprotect(0x603000, 4096, PROT_READ)     = 0
mprotect(0x7f7af1b3e000, 4096, PROT_READ) = 0
munmap(0x7f7af1b35000, 34379)           = 0
chdir("/service")                       = 0
wait4(-1, 0x7fff479dd4fc, WNOHANG, NULL) = -1 ECHILD (No child processes)
openat(AT_FDCWD, ".", O_RDONLY|O_NONBLOCK|O_CLOEXEC|O_DIRECTORY) = 3
fstat(3, {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
brk(NULL)                               = 0x1eab000
brk(0x1ecc000)                          = 0x1ecc000
brk(NULL)                               = 0x1ecc000
getdents64(3, /* 3 entries */, 32768)   = 72
stat("test", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
stat("test/log", 0x7fff479dd430)        = -1 ENOENT (No such file or directory)
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f7af1b347d0) = 2884
getdents64(3, /* 0 entries */, 32768)   = 0
close(3)                                = 0
nanosleep({tv_sec=5, tv_nsec=0}, svscan: warning: unable to start supervise test: permission denied

이견있는 사람?

편집: 방금 CentOS 7 시스템에서 이와 똑같은 단계를 시도했는데 올바르게 작동합니다. 어쩌면 최신 버전(2.17 대 2.28)과 호환되지 않는 코드베이스의 glibc 호출 문제일까요?

관련 정보