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
사용할 수 없는 경우 오류를 발생시키는 것이 좋습니다 .