CentOS인데 이것 때문에 별 상관은 없을 것 같습니다.~해야 한다핵심 Linux 문제라고 생각합니다. CentOS 시스템에 Apache Kafka(Java 실행 파일)를 설치하고 실행하려고 할 때 일반적으로 Linux에 적용되는 질문이 생겼습니다.
쉘 스크립트 또는 기본 실행 파일(예: java
)을 실행할 때 스크립트/실행 파일은 실행 중인 사용자를 나타내나요, 아니면 운영 체제에서 스크립트/실행 파일이 실행 중인 사용자(예: 스크립트 실행 사용자)를 나타냅니까? )/실행 가능 파일)?
프로세스가 어떤 사용자로 실행되는지 결정하는 것이 가능하거나 일반적인가요? 중요성할 수 있는스크립트/응용 프로그램이 루트 또는 다른 특정 유형의 사용자로 실행되어야 한다고 지정합니까?
어쨌든 루트로 프로세스를 실행하는 것과 권한이 없는 사용자로 프로세스를 실행하는 것에 대한 일반적인 경고가 표시되는 이유는 무엇입니까?
답변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가 Stephen의 소유임을 알 수 있습니다.
도움이 되길 바랍니다.