루트가 스크립트를 실행하는 것을 방지하는 방법

루트가 스크립트를 실행하는 것을 방지하는 방법

이것유리 물고기응용 프로그램 서버는 응용 프로그램 서버를 관리하고 시작 및 중지하는 스크립트를 제공합니다. 루트 사용자가 이 스크립트를 실행하지 못하도록 제한하고 싶습니다. 그 이유는 일부 주요 개발자가 권한이 없는 사용자로 서버를 관리하는 것을 잊어버리고, 루트로 응용 프로그램 서버를 다시 시작하면 응용 프로그램 서버를 루트[*]로 실행해야 하기 때문입니다.

루트 액세스 권한 부여를 피하는 것은 선택 사항이 아니지만 개발자는 로컬 컴퓨터에서 이 작업을 수행하는 데 익숙하기 때문에 이를 잊어버립니다. asadmin권한이 없는 사용자로 실행되도록 스크립트를 변경하거나 스크립트가 루트로 실행될 때마다 오류 메시지를 표시하는 옵션을 갖고 싶습니다 .

Bash 쉘을 사용하십시오.

[*]: 파일에 대한 권한을 수정하려고 시도했지만 루트가 소유한 많은 파일을 추적하고 chmoded했지만 앱에 여전히 이상한 오류가 발생하여 다시 루트로 실행해야 합니다.

답변1

다른 답변과 유사하지만 원하는 방향입니다.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

또는 sudo스크립트에서 이 플래그를 사용하여 -u실행할 사용자를 지정하기 위해 권한 없는 사용자로 강제 실행할 수 있습니다. 나는 Glassfish를 사용하지 않지만 여기에 의사 스크립트의 원시 예가 있습니다.

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

당신이 이해하길 바랍니다. 죄송합니다. 스크립트가 어떻게 생겼는지, 권한이 없는 사용자의 이름이 무엇인지 잘 모르겠습니다.

답변2

@Tshepang의 생각이 맞습니다. 어느 것이 가장 이식성이 좋은지는 모르겠지만 사용자가 루트인지 감지하는 다른 방법은 다음과 같습니다.

id -u
$UID

또는 동일한 매개변수를 사용하여 다른 사용자로 실행하도록 강제할 수도 있습니다.

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi

관련 정보