Linux 스크립트/앱은 어떤 사용자로 실행됩니까?

Linux 스크립트/앱은 어떤 사용자로 실행됩니까?

여기에 CentOS가 있지만 이것이 중요하지 않다고 생각합니다.~해야 한다핵심 Linux 질문이 되십시오 (생각합니다). CentOS 박스에 Apache Kafka(Java 실행 파일)를 설치하고 실행하려고 하던 중 Linux 전반에 적용되는 질문이 생각났습니다.

셸 스크립트나 기본 실행 파일(예: java)을 실행할 때 스크립트/실행 파일이 어떤 사용자로 실행되는지 지시합니까, 아니면 OS가 스크립트/실행 파일이 어떤 사용자로 실행되는지 지시합니까(즉, 어떤 사용자가 스크립트를 실행하고 있는지를 의미) /실행 가능)?

프로세스가 어떤 사용자로 실행되는지를 지정하는 것이 가능하거나 일반적인가요? 의미~할 수 있다스크립트/응용 프로그램이 루트 사용자로 실행되어야 한다고 지정합니까, 아니면 다른 특정 유형의 사용자로 실행되어야 합니까?

어느 쪽이든 프로세스를 루트로 실행하는 것과 권한이 없는 사용자로 실행하는 것에 대한 일반적인 경고가 있는 이유는 무엇입니까?

답변1

짧은 대답: 둘 다.

더 길고 훨씬 더 유용한 답변: 기본적으로 프로그램은 프로그램을 시작한 사용자로 실행됩니다. 그러나 프로그램을 작성하고 올바른 권한을 부여한 경우 루트 권한을 가정하거나 "시스템" 사용자로 돌아가서 자체적으로 실행할 수 있습니다. 하지만 이 기능은 패키징 및 설치 프로세스를 통해 또는 해당 시스템 관리자가 수행한 작업을 통해 프로그램에 명시적으로 부여되어야 합니다.

일반적인 경고가 있는 이유는 UNIX 및 Linux의 역사적 경험에 따르면 필요하지 않은 상승된(예: 루트) 권한을 사용하는 프로그램이 종종 시스템에 나쁜 영향을 미치는 것으로 나타났기 때문입니다. 이는 데이터 손상, 시스템의 나머지 부분을 사용할 수 없거나 응답하지 않게 만드는 런어웨이 프로세스, 무의식적으로 공격자가 원하지 않는 방식으로 시스템에 액세스하도록 허용하는 프로세스에 이르기까지 다양합니다.

답변2

'쉘 스크립트'가 실행되면 해당 스크립트를 실행한 사용자의 권한으로 실행됩니다. 패키지 관리자(yum, apt 등)를 사용하여 설치된 대부분의 서비스(kafka, redis, nginx 등)는 해당 서비스 제어를 용이하게 하기 위해 도우미 스크립트를 설치하고 해당 서비스(apache, redis, nginx, 등) 거의 모든 도우미 스크립트는 처음에는 루트로 실행된 다음 해당 서비스에 할당된 서비스 사용자에게 권한을 부여합니다. 이렇게 하면 승인된 사용자(즉, "sudo service kafka start"를 실행할 권한이 있는 사용자)만 해당 서비스를 효과적으로 제어할 수 있습니다. 이는 시스템 관리자 Sally가 kafka 및 nginx를 시작, 중지 및 다시 시작할 수 있는 반면, 개발자 Jim은 kafka(또는 그와 유사한 것)만 시작 및 중지하도록 제한될 수 있음을 의미합니다. Java 사용자는 관리자가 생성할 수 있지만 제가 설정한 것은 아닙니다. 실제로 보면 Ruby 사용자나 Python 사용자보다 더 많습니다. 오히려 서비스 소유권은 해당 특정 서비스와 관련된 서비스 사용자에게 고정되는 경우가 더 많습니다.

일부 프로세스는 루트로 실행되어야 합니다(보통 ssh 서버 데몬은 루트로 실행됩니다.). 다른 프로세스는 루트로 시작하는 것을 거부합니다(postgresql이 그 중 하나입니다.)

/etc/init.d/someservice(또는 /etc/init/someservice.conf)에서 서비스에 대한 도우미 스크립트를 검토하면 권한 상승 또는 삭제를 유발하는 실제 스크립트가 여기에 코딩되어 있습니다. 또는 stephan 사용자로 로그인하여 /usr/sbin/redis-server -c /etc/redis.conf와 같은 명령을 실행한 다음 다른 창에서 해당 프로세스를 확인하면 redis가 소유되어 있음을 알 수 있습니다. 스테판으로.

도움이 되길 바랍니다.

관련 정보