모든 Debian 기반 Linux 배포판은 시스템에서 모든 작업을 수행할 수 있는 사용자로 sudo를 사용합니까?

모든 Debian 기반 Linux 배포판은 시스템에서 모든 작업을 수행할 수 있는 사용자로 sudo를 사용합니까?

sudo특히 Debian 버전 9 또는 10용 Nodejs 스크립트를 만들고 있지만 루트와 동일한 권한을 가진 사용자로 실행 해야 합니다 . 샘플 코드는 다음과 같습니다.

exec('iptables -S',
    function (err, stdout, stderr) {
        resolve(stdout)
        if (err !== null) {
          reject(err.toString('utf8'));
        }
    })

그래서 우리의 질문은 모든 데비안 기반 Linux 배포판이 sudo를 사용하는가입니다. 그렇다면 케이스가 종료되었습니다. 그러나 대답이 '아니오'라면 데비안 배포판에 항상 존재하지만 사용되지 않는 다른 사용자 그룹이나 다른 사용자가 이 명령을 사용하고 실행할 수 있도록 하는 다른 옵션은 무엇입니까 sudo?

답변1

0이러한 유형의 문제를 처리하는 가장 일반적인 방법은 프로그램이 루트 사용자의 사용자 ID인 유효한 UID를 가진 사용자에 의해 실행되고 있는지 확인하는 것입니다 . 예를 들어, 루트로만 실행될 수 있는 쉘 스크립트를 작성한다면 다음과 같이 할 것입니다:

#!/bin/sh
uid=$(id -u)
if [ $uid != 0 ]; then
    echo "This must be run as root!"
    exit
else
    echo "You are root, proceed!"
fi

(실제로 쉘 스크립트를 작성한다면 해당 $UID변수만 사용하겠지만 Node.js에서는 해당 변수가 적용되지 않거나 복잡할 수 있으므로 id -u대신 사용하고 있습니다.)

이제 스크립트를 다르게 실행하면 다음이 표시됩니다.

$ foo.sh
This must be run as root!

$ sudo foo.sh
You are root, proceed!

$ sudo -i ## open a root shell
# ~terdon/scripts/foo.sh
You are root, proceed!

즉, 잊어버리십시오 sudo(아니요, 데비안 시스템에 항상 설치될 것이라고 100% 확신할 수는 없습니다.데비안에 sudo가 기본적으로 설치되지 않는 이유는 무엇입니까?) 간단히 사용자 ID를 확인하고 그렇지 않은 경우 종료하십시오 root. 루트로 실행해야 한다는 것을 사용자에게 알리는 오류 메시지를 작성하면 그게 전부입니다. 이를 자동화해야 하는 경우 sudo비밀번호를 수동으로 입력해야 하므로 작동하지 않습니다 .

답변2

짧은 대답: 네, 모두 그렇습니다할 수 있는Used sudo이지만 설치되었다고 가정할 수는 없습니다.

더 긴 답변: 데비안뿐만 아니라 모든 배포판할 수 있는사용 sudo. sudo시스템에서 루트(및 다른 사용자)로 작업을 수행하는 데 선호되는 방법입니다. 경험에 따르면 sudo보통아니요데비안에 의존하는 다른 패키지에서 가져오지 않는 한 데비안 설치에 기본적으로 설치됩니다. Debian에서 상속된 일부 배포판(예: Ubuntu)은 sudo사전 설치되어 제공됩니다. 애플리케이션을 루트로 실행해서는 안 되며 sudo이와 같은 명령을 사용하여 명령을 실행하는 것이 iptables좋은 계획입니다. 애플리케이션 초기화 단계에서 가용성을 확인하고, sudo사용할 수 없는 경우 오류를 발생시키는 것이 좋습니다 .

관련 정보