ssh제한된 원격 액세스를 구성하려면

ssh제한된 원격 액세스를 구성하려면

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에서 작동합니다. 이러한 원칙과 대부분의 다른 규정은 상당히 일반적이어야 합니다. 이 구성을 사용하여 server2from 에서 스크립트를 실행 하려면 server1다음 명령을 실행합니다.

$ ssh -i ~/.ssh/script_identity.pub ruser@server2

위 명령은 추가 개입 이나 인증 server2없이 스크립트를 연결하고 실행합니다 . 공개 키 파일은 스크립트를 원격으로 실행할 수 있는 유일한 파일이므로 스크립트에 액세스할 수 있는 컴퓨터 및/또는 계정을 결정할 수 있습니다 .sshsudosshserver2ssh

다음 설명에서는 이러한 작업을 수행하는 코드를 보여줍니다.

이 구성에는 전용 계정이 필요합니다 server2. 여러 가지 이유가 있으며 이미 언급한 것 중 하나가 잠길 수 있으며 server2, 더 나쁜 경우에는 업무용 계정에서 잘못된 파일을 실수로 수정하는 것입니다.

ssh제한된 원격 액세스를 구성하려면

존재하다server1

  1. 스크립트를 실행할 계정에서 server1원격 스크립트를 실행하는 데만 사용할 새 SSH 키를 만듭니다.
  2. 실행을 하나의 명령으로만 제한하도록 새 SSH 공개 키를 수정합니다( command=맨페이지 참조 sshd).
  3. 사용자 ID와 날짜를 인쇄하는 테스트 스크립트를 만듭니다.

켜짐 server2(모든 작업이 원격으로 수행됨 server1)

  1. 에 새 계정을 만드세요 server2.
  2. 수정된 공개 ID 파일을 .ssh/authorized_keys새 사용자의 홈 디렉토리 에 복사합니다 server2.
  3. 테스트 스크립트를 새 사용자의 홈 디렉터리에 복사합니다 server2.
  4. 새 사용자 계정의 모든 파일에 대한 모든 권한과 소유권을 확인하세요.

암호

다음 스크립트를 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

축하합니다. 이제 비밀번호 sshsudo시스템 비밀번호 없이 원격으로 권한 있는 스크립트를 안전하게 실행할 수 있습니다.

관련 정보