요약: 한 폴더에서 다른 폴더로 파일을 이동하면 대상 폴더의 실행 가능 속성이 손실되어 해당 폴더와 해당 콘텐츠에 액세스할 수 없게 됩니다.
[원래 Stack Overflow에 게시되었지만 프로그래밍 질문이 아닌 Unix 및 Linux에 다시 게시되었습니다.]
하위 폴더가 있고 상위 폴더에서 문서를 처리한 후 내 애플리케이션(Laravel, 그러나 문제는 관련이 없는 것 같습니다)이 문서를 하위 폴더로 이동해야 합니다. 문서를 상위 폴더에서 하위 폴더로 이동한 후 하위 폴더는 "x" 실행 가능 속성을 잃어 "drwxrwx---"에서 "drw-rw----"로 변경됩니다. 이렇게 하면 콘텐츠에 액세스할 수 없게 되고 향후 어느 방향으로든 이동하지 못하게 됩니다. 하위 파일의 파일을 나열하려고 하면 각 파일에 대해 "ls: Access Denied"가 보고된 다음 해당 속성이 "-?????????"로 나열됩니다.
아래에는 전후의 소스 디렉터리와 대상 하위 디렉터리가 표시됩니다.
# Source Before
drwxrwx---. 3 openapp nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 4096 Apr 11 13:42 dmarc_reports
# Source After
drwxrwx---. 3 openapp nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 4096 Apr 11 13:42 dmarc_reports
# Destination Before
drwxrwx---. 2 openapp nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 6 Apr 11 07:56 processed
# Destination After
drw-rw----. 2 openapp nginx unconfined_u:object_r:httpd_sys_rw_content_t:s0 6 Apr 11 13:42 processed
"chmod ug+xfolder_name"을 사용하여 액세스 권한을 재설정하면 파일에 다시 액세스할 수 있지만 다른 파일 이동 작업을 수행하면 문제가 다시 발생합니다. 실행이 이동되는 방향, 코드에서 실행하는지 아니면 셸에서 mv를 사용하는지에 관계없이 문제가 발생합니다. 이는 SELinux를 비활성화하고(setenforce 0 사용) fapolicyd를 중지한 경우에도 발생합니다.
모든 파일과 폴더는 내 사용자와 응용 프로그램 및 사용자가 속한 nginx 그룹이 소유합니다. 대상은 소스의 하위 폴더이므로 동일한 파일 시스템에 있습니다.
이것은 나를 완전히 혼란스럽게 만들었습니다. CentOS Stream 9를 실행하고 있습니다. 앞서 언급한 대로 SELinux 문제를 해결했지만 참고로 모든 파일에는 'system_u:object_r:httpd_sys_rw_content_t:s0' 컨텍스트가 있고, 폴더에는 'unconfined_u:object_r:httpd_sys_rw_content_t:' 컨텍스트가 있습니다.
어떤 아이디어가 있나요?
관련된 경우 처음 이후(즉, 권한이 변경된 후) 실패한 코드/명령은 다음과 같습니다.
// Laravel Instruction
Storage::move($fileLocation, $dest)
// Native PHP Instruction
rename(Storage::path($fileLocation), Storage::path($dest))
## Bash Instruction
mv <<original path>>/<<filename>> <<destination path>>/
각 경우에 지시문은 한 번 작동한 후 chmod를 사용하여 디렉토리 권한을 수동으로 재설정할 때까지 다음 파일에서 실패합니다.
답변1
그래서 나는 문제를 해결했고 바보처럼 느껴졌습니다. 또한 처리를 위해 파일을 폴더로 전송하는 cron 작업을 매분 실행합니다. 이 작업은 대상 파일의 소유권과 권한을 설정하는데, 저는 파일뿐만 아니라 모든 것에 권한을 적용했습니다. 매 순간 일어나는 일이기 때문에 나의 행동에 의해 촉발되는 것 같습니다. 권한 상태를 자세히 살펴볼 수 있게 해준 @NasirRiley에게 감사드립니다. 이를 통해 제가 어떤 조치를 취하지 않고도 권한이 변경되었음을 확인할 수 있었습니다.