sudoers 파일을 올바르게 설정하려고 하는데 찾은 문서가 도움이 되지 않는 것 같습니다.
다음과 같은 사용자가 있습니다.사용자 1
두 대의 Debian 서버가 있습니다.서버 1그리고서버 2.
현재 SSH를 사용하여 Windows PC에서 두 서버 중 하나에 연결하고 sudo
필요한 경우 권한을 에스컬레이션할 수 있습니다.
이제부터 갈 수 있어야 해서버 1도착하다서버 2쉘 스크립트에서 파일을 실행하십시오.서버 2와 마찬가지로 sudo
비밀번호를 입력할 필요가 없습니다(스크립트 또는 수동으로).
이 파일을 사용하여 이 작업을 수행할 수 있다는 것을 알고 있습니다 sudoers
.
그런데 어떻게 해야 합니까?
내 sudoers
파일에 (서버 2)나는 가지고있다:
# User privilege specification
root ALL=(ALL:ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
%user1 ALL=(ALL:ALL) ALL
나는 다음과 같은 일을 할 수 있다는 것을 알고 있습니다.
%user1 ALL = NOPASSWD: /path/to/myscript
이렇게 하면사용자 1스크립트 실행/경로/to/mysqscript비밀번호가 필요하지 않습니다. 하지만 Windows PC에서 연결하면 스크립트 실행 이외의 다른 작업을 수행할 수 없게 됩니까?
NOPASSWD
이상적으로는 이 기능을 다음의 연결로 제한 하고 싶습니다 .서버 1.
여기서 뭔가 빠졌나요? 나는 나 자신을 완전히 잠그지 않도록 변경 사항을 "테스트"하는 것을 꺼려합니다.
답변1
실제 답변을 얻기 전에 한 가지 조정이 필요합니다. "%user1"을 사용하면 "그 사람은그룹user1"; 아마도 "user1"이 user1을 의미하기를 원할 것입니다.
둘째, sudo는 귀하가 어디에 로그인했는지 모릅니다.~에서-- 현재 sudo를 실행 중인 경우에만 해당됩니다.
셋째, "visudo"를 사용하여 변경해야 합니다. 그러면 구문 오류가 발생하는 것을 방지할 수 있습니다.
넷째, sudoers 행을 추가하면 현재 액세스 권한만 증가됩니다. 해당 스크립트에 sudo가 필요한 경우에는 더 많은 sudoers 항목이 필요합니다.
답변2
에서 연결하는 기능을 제한하는 방법에 대해 문의하셨습니다 server1
. 나는 이것을 할 것이다 ssh
. 수정된 사용자 코드는 Debian/Ubuntu에서 작동합니다. 이러한 원칙과 대부분의 다른 규정은 상당히 일반적이어야 합니다. 이 구성을 사용하여 server2
from 에서 스크립트를 실행 하려면 server1
다음 명령을 실행합니다.
$ ssh -i ~/.ssh/script_identity.pub ruser@server2
위 명령은 추가 개입 이나 인증 server2
없이 스크립트를 연결하고 실행합니다 . 공개 키 파일은 스크립트를 원격으로 실행할 수 있는 유일한 파일이므로 스크립트에 액세스할 수 있는 컴퓨터 및/또는 계정을 결정할 수 있습니다 .ssh
sudo
ssh
server2
ssh
다음 설명에서는 이러한 작업을 수행하는 코드를 보여줍니다.
이 구성에는 전용 계정이 필요합니다 server2
. 여러 가지 이유가 있으며 이미 언급한 것 중 하나가 잠길 수 있으며 server2
, 더 나쁜 경우에는 업무용 계정에서 잘못된 파일을 실수로 수정하는 것입니다.
ssh
제한된 원격 액세스를 구성하려면
존재하다server1
- 스크립트를 실행할 계정에서
server1
원격 스크립트를 실행하는 데만 사용할 새 SSH 키를 만듭니다. - 실행을 하나의 명령으로만 제한하도록 새 SSH 공개 키를 수정합니다(
command=
맨페이지 참조sshd
). - 사용자 ID와 날짜를 인쇄하는 테스트 스크립트를 만듭니다.
켜짐 server2
(모든 작업이 원격으로 수행됨 server1
)
- 에 새 계정을 만드세요
server2
. - 수정된 공개 ID 파일을
.ssh/authorized_keys
새 사용자의 홈 디렉토리 에 복사합니다server2
. - 테스트 스크립트를 새 사용자의 홈 디렉터리에 복사합니다
server2
. - 새 사용자 계정의 모든 파일에 대한 모든 권한과 소유권을 확인하세요.
암호
다음 스크립트를 ruser.sh
에 저장한 후 해당 스크립트 server1
의 기능을 이해한 후 다음 명령을 실행하여 실행하십시오.
$ sh ./ruser.sh ruser server2
이 스크립트를 ruser.sh
사용자 계정에 저장하십시오 system1
.
#!/bin/sh -e
#
# ruser.sh -- setup user on remote host for secure remote script execution
#
# This is for first time setup!
# Always use a new user on remote host.
#
USAGE="ERROR: Usage: sh $0 remote-username remote-hostname"
RUSER="${1:?$USAGE}"
RHOST="${2:?$USAGE}"
UNIQUE=$$
# build files that will be transferred to the remote host
# Make the new ssh key, and modify the public key so that
# it can only be used to execute "./rscript.sh"
ssh-keygen -N '' -f ~/.ssh/script_identity
sed -i '1 {
s,command="./rscript.sh",,
s,^,command="./rscript.sh" ,
}' ~/.ssh/script_identity.pub
# rscript.sh -- the only script that can be executed
# with the modified public key.
printf '%s' '(id;date) > rscript.out' > /tmp/rscript.sh.$$
# copy the new identity public key and rscript.sh to the remote host
scp ~/.ssh/script_identity.pub "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
scp /tmp/rscript.${UNIQUE} "${RHOST}":/tmp/script_identity.pub.${UNIQUE}
# setup remote user for script execution
# Create new user
# Move identity file and script to new user's home directory.
# Fix ownership and permissions
ssh -t ${RHOST} "sudo /bin/sh -cex '
adduser --system --shell=/bin/sh ${RUSER};
mkdir -m0700 ~${RUSER}/.ssh;
mv /tmp/script_identity.pub.${UNIQUE} ~${RUSER}/.ssh/authorized_keys;
mv /tmp/rscript.sh.${UNIQUE} ~${RUSER}/rscript.sh
chmod -R 0600 ~${RUSER}/.ssh/;
chmod 0700 ~${RUSER}/.ssh/;
chmod 0700 ~${RUSER}/rscript.sh;
chown -R ${RUSER}:nogroup ~${RUSER}/;
'
"
# remove temp files
rm -rf /tmp/rscript.sh.${UNIQUE}
다음 명령을 실행하여 위 구성을 테스트합니다 server1
.
$ ssh -i ~/.ssh/script_identity.pub ruser@server2
ruser
그런 다음 on의 홈 디렉토리를 확인하고 server2
파일이 rscript.out
실제로 생성되었는지 확인하여 모든 것이 올바르게 구성되었음을 나타냅니다.
그렇다면 sudoers 파일을 수정하기 전에 ssh 명령을 다시 실행하여 원격 스크립트를 다시 실행하여 출력 및 오류 출력 ruser@server2:rscript.sh
이 /path/to/myscript
원하는 방식으로 작동하는지 확인하십시오.
이제 새 사용자가 비밀번호 없이 루트로 하나의 스크립트만 실행할 server2
수 있도록 sudoers 파일을 구성하십시오.server2
ruser ALL = NOPASSWD: /path/to/myscript
축하합니다. 이제 비밀번호 ssh
나 sudo
시스템 비밀번호 없이 원격으로 권한 있는 스크립트를 안전하게 실행할 수 있습니다.