루트가 아닌 사용자에게 루트가 소유한 파일에 대한 읽기 권한을 부여하시겠습니까?

루트가 아닌 사용자에게 루트가 소유한 파일에 대한 읽기 권한을 부여하시겠습니까?

루트가 아닌 사용자가 실행한 프로세스가 특정 루트 소유 파일을 읽을 수 있도록 허용하는 방법은 무엇입니까?

저는 Linux/Ubuntu에서 node.js를 실행하고 있습니다. 루트 권한으로 프로세스를 실행하고 싶지 않지만 일부 루트 소유 파일에 대한 읽기 전용 액세스 권한은 갖고 있습니다.

을 통과하지 않으면 현재 이러한 파일(인증서 키 파일)을 읽을 수 없습니다 sudo node .... 이러한 파일 외에는 자체 애플리케이션 사용자 ID로 실행될 때 프로세스가 제대로 작동하고 성공적으로 실행됩니다.

파일에 심볼릭 링크를 설정하고 애플리케이션 사용자 ID가 파일에 대한 인증을 읽을 수 있도록 권한을 설정하는 등의 작업을 수행할 수 있었으면 좋겠습니다. 인증서 파일은 별도의 프로세스를 통해 자동으로 유지되고 업데이트되기 때문에, 손대거나 복사하는 일은 가급적 하지 않는 편이 좋습니다.

...그러나 "루트로 실행되지 않음" 범주의 다른 솔루션도 환영합니다.

답변1

새 그룹인 그룹을 추가하고 nodeJS해당 그룹에 사용자를 추가한 다음 파일 그룹을 변경하고 마지막으로 파일을 읽을 수 있는 그룹의 권한을 변경할 수 있습니다.

groupadd nodeJS
usermod userName -g nodeJS
link -s rootOwnedFile linkToRootOwnedFile
chgrp nodeJS linkToRootOwnedFile
chmod g+r linkToRootOwneFile

답변2

이것은 실제로 다음을 통해 작동합니다.액세스 제어 목록. 이렇게 하면 파일이 변경되거나 새 파일이 추가되거나 파일 권한이 변경되더라도 Node.js 사용자를 사용하여 계속 액세스할 수 있습니다. 인증서의 상위 디렉터리에서 다음을 수행하세요.

setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /path/to/certificates

nodeJSUser실제 사용자를 대체합니다 . 옵션의 첫 번째 부분은 -m현재 ACL을 설정하고, 쉼표 뒤의 모든 부분은 새 파일의 기본값을 설정합니다. -R재귀적으로 만드세요.

인증서가 실행 액세스 권한 없이 루트 소유 디렉터리에 저장된 경우(예: ) 작동하지 않습니다 chmod 700. 예를 들어 인증서가 /root/certschmod 에 저장되어 /root있으면 700다른 사용자는 파일 자체에 대한 권한이 있더라도 해당 디렉터리 내의 어떤 항목에도 액세스할 수 없습니다. 이렇게 하려면 이 디렉터리를 다른 디렉터리에 바인드 마운트하고 거기에서 액세스할 수 있습니다.

mkdir /certs
mount --bind /certs /root/certs
setfacl -Rm u:nodeJSUser:rX,d:u:nodeJSUser:rX /certs

관련 정보