쉘 스크립트 : 내부에 sudo를 사용하고 sudo로 실행합니까? 첫 번째

쉘 스크립트를 작성할 때 일부 명령이 아닌 수퍼 유저 권한이 필요한 쉘 스크립트를 작성할 때

  • 수퍼 유저 권한이 필요한 명령에 sudo를 추가하고 sudo없이 쉘 스크립트를 실행하거나

  • 수퍼 유저 권한이 필요한 명령에 sudo를 추가하지 말고 sudo로 쉘 스크립트를 실행 하시겠습니까?

두 번째 방법으로 비밀번호를 한 번만 제공하면되지만 스크립트의 모든 명령은 필요하지 않은 명령을 포함하여 수퍼 유저 권한으로 실행됩니다.

첫 번째 방법으로 다른 sudo 명령에 대해 암호를 여러 번 제공해야하지만 수퍼 유저 권한은 필요한 명령에만 부여됩니다.

보안 문제에서 첫 번째 방법이 더 좋습니다. 편의상 두 번째 방법이 더 좋습니다.

  1. 나는 첫 번째 방법을 채택하려고 생각했습니다. 따라서 쉘 스크립트에서 여러 sudo 명령에 암호를 제공하는 불편 함처리해야합니다.

  2. 스티븐 해리스는 썼다 :

    잘 작성된 스크립트는 올바른 권한으로 실행되고 있는지 감지하고 전혀 sudo를 호출하지 않지만 잘못된 스크립트가 많이 있습니다.

    두 번째 방법을 사용해야합니까? 그렇다면,

    • “스크립트가 올바른 권한으로 실행되고 있는지 감지하고 sudo를 전혀 호출하지 않는지 여부”를 작성하려면 어떻게해야합니까?

    • sudo로 스크립트를 실행할 때 필요하지 않은 명령에 수퍼 유저 권한을 부여하는 문제를 피하기 위해 보안을 어떻게 향상시킬 수 있습니까?

  3. 이 간단한 접근 방식이 두 가지 방법 중 가장 좋은 방법이 있습니까? 필요한 명령에만 sudo를 추가하고 편의 또는 보안을 원하는지 여부에 따라 sudo를 사용하거나 사용하지 않고 스크립트를 실행합니까? 이 접근 방식에 문제가 있습니까?

감사.



답변

첫 번째 문제를 해결하려면

“스크립트가 올바른 권한으로 실행되고 있는지 감지하고 sudo를 전혀 호출하지 않는지 여부”를 작성하려면 어떻게해야합니까?

루트에 대한 간단하고 POSIX 검사가 있습니다.

#!/bin/sh
is_user_root ()
{
    [ "$(id -u)" -eq 0 ]
}

또는 Bash에서 더 많은 성능 중심 코더가 다음을 사용하려고 할 수 있습니다.

#!/bin/bash
is_user_root ()
{
    [ ${EUID:-$(id -u)} -eq 0 ]
}

재사용을 위해 의도적으로 코드를 함수에 래핑했습니다.

두 번째 문제를 해결하려면

sudo로 스크립트를 실행할 때 필요하지 않은 명령에 수퍼 유저 권한을 부여하는 문제를 피하기 위해 보안을 어떻게 향상시킬 수 있습니까?

당신은 이것에 대해 많은 것을 할 수 없습니다. 내 마음에는 최소한 아무것도 없습니다. 대본을 보면 제안이있을 수 있습니다. 당신이 당신의 질문에 포함되지 않았기 때문에 당신이 전체 스크립트를 실행하는 경우하지만 … sudo나 같은 root,이 제어 할 수있는 방법을 볼 수 없습니다.

주석을 해결하려면 :

“내에서 sudo를 사용하고 sudo로 실행”에 대해 어떻게 생각하십니까?

내 대본에서 나는 보통 후자의 접근법을 진행하지만 반드시 내가 당신에게 그것을 추천한다는 것을 의미하지는 않습니다. 스크립트가 누구를위한 것인지에 달려 있기 때문입니다 root. 일부 사용자에게는 sudo권리 가있는 경우를 제외하고는 대부분 사용자의 경우 어떤 값으로도 대답 할 수 있으려면 문자 그대로 질문에 스크립트를 포함시켜야합니다.


답변

나는 이것에 대답 할 수 있다고 생각한다.

두 번째 방법을 사용해야합니까?

여기에 문제가있는 이유는 없습니다. 이유가 있습니다.

루트로 실행해야 할 단 하나의 명령, 다음이 있다면 run프로그램이 아니라 rootsudo때문에 sudo스크립트가 긴 도로입니다 내부. 프로그래머가 게으른 것을 잊었습니까?

당신이 많은 명령을해야하는 경우 runroot다음과 같이 실행 rootsudo.

sudo로 스크립트를 실행할 때 필요하지 않은 명령에 수퍼 유저 권한을 부여하는 문제를 피하기 위해 보안을 어떻게 향상시킬 수 있습니까?

다른 사용자가 run프로그램에 필요한 경우 사용자 정의가 가능하고 사용자의 요구를 충족시킬 수 sudo있기 때문에 해당 sudo사용자를 위해 설정하십시오.

예를 들면 다음과 sudo같습니다.

visudosudoers 파일을 편집 할 때 항상 사용 하십시오 …..

kate ALL=(ALL) NOPASSWD: /usr/local/bin/script ARG1 ARG2

sudo 프로그램 / 스크립트 내에서 사용자를 변경하는데도 좋습니다. 여기 내 스크립트 중 하나가 있습니다.

sudo -i -u "$user" user="$user" CURRENTDIR="$CURRENTDIR" BASHRC="$BASHRC" bash <<'EOF'

“스크립트가 올바른 권한으로 실행되고 있는지 감지하고 sudo를 전혀 호출하지 않는지 여부”를 작성하려면 어떻게해야합니까?

https://www.cyberciti.biz/tips/shell-root-user-check-script.html
how-do-i-determine-if-a-shell-script-is-running-with-root-permissions

bash/sh:

#!/bin/bash
# (Use #!/bin/sh for sh)
if [ `id -u` = 0 ]
then
        echo "I AM ROOT, HEAR ME ROAR"
fi

csh:

#!/bin/csh
if ( `id -u` == "0" )
then
        echo "I AM ROOT, HEAR ME ROAR"
endif

#!/bin/bash
if [[ $EUID -ne 0 ]]; then
  echo "You must be a root user" 2>&1
  exit 1
else
  mount /dev/sdb1 /mnt/disk2
fi

신사 @terdon의 요청에 의해 편집 :

이런 식으로 스크립트를 생각하십시오 ….

공용 스크립트입니까 (사용하지 않는 다른 사람) 스크립트는 무엇을합니까? 그것은 당신에게 시간을 말합니까? 아니면 200 시스템에서 iptables를 업데이트합니까? 귀하 만 사용하는 경우, 업무 / 직업 관련입니까, 아니면 개인적인 용도입니까?

사용자 그룹이 무엇인지 사전에 알아야합니다.

그것이 written관리자에게 주거나 팔아야한다면, 왜 그렇게 script실행 하지 않아야합니까 root?? 어떤 해를 끼칠 수 있습니까?

실제 스크립트 / 프로그램은 권한이있는 사용자로 자주 실행되며 아무도 문제가 없다고 언급하지 않지만, 프로그래머와 같은 대부분의 초보자가 이러한 문제에 대해 이야기 할 때 실제 보안 위협이됩니다. 우아하지는 않지만 말하려고하는 것은 일부 사람들이 귀하가 가지고 있는 컨트롤system 과 코드를 살펴 보는 것입니다 …. 파일을 사용하려는 것보다 많은 권한으로 설정합니까? 논리 또는 재능있는 프로그래머가 코드에서 위험을 감수하고 있습니까?

귀하 의을code needs root 사용 sudo하고 많은 사람이있는 경우 그냥 실행하십시오 root.……… 내 대답은 여기에서 끝납니다