쉘 스크립트: sudo를 사용하는 것과 sudo로 실행하는 것?

쉘 스크립트: sudo를 사용하는 것과 sudo로 실행하는 것?

전부는 아니지만 일부 명령에 슈퍼유저 권한이 필요한 쉘 스크립트를 작성할 때 다음을 수행해야 합니다.

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

  • 슈퍼유저 권한이 필요한 명령에 sudo를 추가하는 대신 sudo를 사용하여 쉘 스크립트를 실행하시겠습니까?

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

첫 번째 방법에서는 다양한 sudo 명령에 대해 암호를 여러 번 제공해야 할 수 있으며 수퍼유저 권한은 해당 명령이 필요한 명령에만 부여됩니다.

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

  1. 나는 첫 번째 옵션을 고려해 왔습니다. 그래서 난 해야 해쉘 스크립트에서 여러 sudo 명령에 비밀번호를 제공하는 불편함을 해결합니다.

  2. 스티븐 해리스의 글:

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

    그럼 두 번째 방법을 사용해야 할까요? 만일이 경우라면,

    • "스크립트가 올바른 권한으로 실행 중이고 sudo를 전혀 호출하지 않는지 감지합니다"라고 어떻게 쓸 수 있나요?

    • sudo를 사용하여 스크립트를 실행할 때 슈퍼유저 권한이 필요하지 않은 명령에 슈퍼유저 권한을 부여하는 문제를 방지하기 위해 보안을 향상하려면 어떻게 해야 합니까?

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

감사해요.

답변1

첫 번째 문제를 해결하려면:

"스크립트가 올바른 권한으로 실행 중이고 sudo를 전혀 호출하지 않는지 감지합니다"라고 어떻게 쓸 수 있나요?

루트에 대한 간단한 POSIX 검사가 있습니다:

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

또는 Bash에서 성능 중심의 코더는 다음을 사용할 수 있습니다.

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

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

두 번째 질문을 해결하려면:

sudo를 사용하여 스크립트를 실행할 때 슈퍼유저 권한이 필요하지 않은 명령에 슈퍼유저 권한을 부여하는 문제를 방지하기 위해 보안을 향상하려면 어떻게 해야 합니까?

당신이 할 수 있는 일은 아무것도 없습니다. 적어도 나는 아무것도 기대하지 않았습니다. 스크립트를 보면 제안 사항이 있을 수 있습니다. 그런데 질문에 포함하지 않았기 때문에 ... sudoor 를 사용하여 전체 스크립트를 실행 하면 root제어 할 방법이 없다고 생각합니다 .

의견에 대한 응답:

"에 sudo를 사용하는 것과 sudo를 사용하여 실행하는 것"에 대해 어떻게 생각하시나요?

내 스크립트에서는 일반적으로 후자의 접근 방식을 취하지만 이것이 반드시 여러분에게 권장한다는 의미는 아닙니다. 스크립트의 대상이 누구인지에 따라 다르므로 root대부분 사용자에게만 해당되지만 일부 사용자에게는 sudo권한이 있습니다. 어떤 값에든 대답하려면 스크립트를 질문에 그대로 포함해야 합니다.

답변2

이 질문에는 답할 수 있을 것 같아요.

그럼 두 번째 방법을 사용해야 할까요?

여기서 문제가 발생할 이유는 없으며 그 이유는 다음과 같습니다.

루트로 실행해야 하는 명령이 하나만 있는 경우 run프로그램은 스크립트에 들어가는 것이 더 긴 방법 입니다 root.sudosudo프로그래머가 게으르다는 사실을 잊으셨나요?

많은 명령이 필요한 경우 또는 로 실행 run하십시오 .rootrootsudo

sudo를 사용하여 스크립트를 실행할 때 슈퍼유저 권한이 필요하지 않은 명령에 슈퍼유저 권한을 부여하는 문제를 방지하기 위해 보안을 향상하려면 어떻게 해야 합니까?

다른 사용자가 귀하의 프로그램을 원할 경우 귀하의 필요에 맞게 크게 사용자 정의하고 조정할 수 있으므로 run이를 설정할 수 있습니다 .sudosudo

예는 다음과 같습니다 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
쉘 스크립트가 루트 권한으로 실행 중인지 확인하는 방법

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.. 내 대답은 여기서 끝납니다.요~

관련 정보