여러 Java 애플리케이션을 시작하기 위해 Python 스크립트를 작성했습니다. 나는 그들의 PID를 /var/run/coma
.777화권한은 먼저 테스트용으로만 제공됩니다.
-rwxrwxrwx 1 root root 3575 Feb 12 18:20 coma-startup.py
이 스크립트를 시작할 때다른 사용자언급된 디렉터리에 파일을 생성하는 코드를 실행합니다. 다음을 받습니다.
PermissionError: [Errno 13] Permission denied: '/var/run/coma/coma-system.pid'
나는 이것을 이해하지 못한다? 이 스크립트는 루트 권한으로 실행해야 한다고 생각합니다. 여기서 내가 이해하지 못하는 것은 무엇입니까?
답변1
권한 문제는 스크립트와 관련이 없지만 스크립트가 작동하는 파일과 관련이 있습니다.
/var/run/coma/coma-system.pid
노력하다chmod 777 /var/run/coma/coma-system.pid
답변2
스크립트의 소유자 및 그룹을 로 설정한다고 해서 사용자가 실행 파일을 실행할 때 UID() 비트가 활성화되지 않은 한 root
실행 컨텍스트 권한을 정의하는 데 사용되는 UID는 입니다 . 활성화된 실행 파일은 파일 소유자의 UID를 사용하여 실행됩니다.root
joe
joe
suid
suid
suid root
그러나 실행 파일에는 보안 위험이 있으므로 접근 방식을 매우 신중하게 고려해야 한다고 생각합니다 . 악의적인 사용자는 이를 악용하여 권한을 상승시키려고 시도할 수 있습니다. 이것이 처리해야 할 유일한 파일인 경우 대신 해당 권한을 처리하거나 사용자에게 실행 파일을 사용하도록 요구해야 합니다 sudo
. suid root
매우 특별한 경우에는 실행 파일을 최후의 수단으로 사용해야 합니다.
노트:@psusi가 댓글에 언급했듯이 suid
스크립트에서는 작동하지 않습니다. 이것답변스크립트 문제 suid
와 스크립트가 커널 3.x에서 작동하지 않는 이유에 대한 좋은 설명입니다. 따라서 특정 경우에는 처리해야 하는 파일/폴더의 권한을 변경하거나 사용하는 옵션만 있습니다 sudo
(첫 번째 옵션이 더 권장됨).