루트가 스크립트를 실행하지 못하게하는 방법 스크립트를 실행 루트 사용자를 제한하고자하는 스크립트를

글래스 피시 응용 프로그램 서버는 응용 프로그램 서버를 관리하고 또한 시작을 중지하고 나는이 스크립트를 실행 루트 사용자를 제한하고자하는 스크립트를 제공합니다. 그 이유는 일부 주요 개발자가 서버를 권한이없는 사용자로 관리하는 것을 잊고 응용 프로그램 서버를 루트 사용자로 다시 시작하면 응용 프로그램 서버가 루트 사용자 [*]에 의해 실행되어야하기 때문입니다.

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

배쉬 쉘이 사용됩니다.

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



답변

다른 답변과 비슷하지만 원하는 방향으로.

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

잘만되면 당신은 아이디어를 얻는다. 스크립트의 모양이나 권한이없는 사용자의 이름을 잘 모르겠습니다.


답변

@Tshepang은 올바른 아이디어를 가지고 있습니다. 어느 것이 가장 이식 가능한지 모르겠지만 사용자가 루트인지 여부를 감지하는 다른 방법이 있습니다.

id -u
$UID

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

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