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


13

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

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

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

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

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

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

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

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

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

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

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

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

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

감사.


sudo기본 자격 증명 캐시가 있다고 생각했습니다 . 플랫폼에서이 기능이 비활성화되어 있습니까?
파이프

@pipe 그의 스크립트는 예를 들어 일정 시간 동안 잠자기 때문에 캐시가 작동하지 않을 수 있습니다.
LinuxSecurityFreak

답변:


15

첫 번째 문제를 해결하려면

"스크립트가 올바른 권한으로 실행되고 있는지 감지하고 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권리 가있는 경우를 제외하고는 대부분 사용자의 경우 어떤 값으로도 대답 할 수 있으려면 문자 그대로 질문에 스크립트를 포함시켜야합니다.


sudo -u "$SUDO_USER" command...?
Michael Homer

감사. "내에서 sudo를 사용하고 sudo로 실행"에 대해 어떻게 생각하십니까?
Tim

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

@MichaelHomer sudo -u "$SUDO_USER" command여기에 무슨 의미 가 있는지 궁금 합니다.
Tim

@Tim 비록 그 접근 방식에 문제가 없지만 누군가는 합리적인 논쟁에 반대 할 수 있습니다. 이것은 실제로 원래 질문의 범위를 벗어납니다. 지금 월간 M-Disc 백업을 수행해야하므로 아직 사용할 수 없다고 생각합니다. 죄송합니다. 나는 적어도 요점에 대답하기를 바랍니다. 내일 봐요.
LinuxSecurityFreak

-4

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

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

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

루트로 실행해야 할 단 하나의 명령, 다음이 있다면 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.......... 내 대답은 여기에서 끝납니다


2
@somethingSomething을 사용하면 루트 권한이 필요한 단일 명령 만있는 경우에도 항상 스크립트를 루트로 실행하도록 권장하는 이유를 설명 할 수 있습니까? 답에 두 가지 가능성 (루트 권한이 필요한 명령 하나 또는 여러 개)을 제공하지만 둘 다에 대해 동일한 것을 제안합니다.
terdon

2
나는이 문제에 대해 생각하고 다른 유사한 토론을 읽었습니다. 이 대답은 나를 혼란스럽게합니다. (그러나 이미 다운 투표권이 충분합니다.)
Joe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.