우리는 소수의 사람들만이 SSH를 통해 서버에 접근할 수 있도록 보안 플랫폼을 구축하고 있지만, SSH를 통해 서버에 접근하지 않고도 애플리케이션을 시작하거나 중지하고 필요할 경우 서버를 다시 시작할 수 있도록 지원이 필요합니다.
답변1
실제 요구 사항이 지원 직원이 할 수 없는 경우명령줄에 액세스, 그런 다음 지원이 허용하는 고정 작업 메뉴를 표시하는 스크립트를 작성한 다음 chsh
명령을 사용할 수 있습니다이 스크립트를 지원 계정의 로그인 셸로 설정.
좀 더 확실하게 하려면 전용 바이너리 실행 파일을 빌드하여 메뉴를 표시하고 이를 스크립트 대신 로그인 셸로 사용할 수 있습니다. 하지만 프로토타입 단계에서는 스크립트를 사용하는 것이 더 쉬울 수도 있습니다.
메뉴 스크립트/바이너리가 사용자의 로그인 셸로 사용되면 메뉴 스크립트/바이너리를 중단하여 셸에 더 이상 액세스할 수 없습니다. 메뉴 스크립트/바이너리가 종료되면어떤 이유로, 시스템에서는 이를 로그아웃으로 간주하므로 세션이 즉시 종료됩니다.
이 작업이 완료되면 계정 로그인이 지원될 때마다(로컬 및 SSH 모두) 메뉴가 나타납니다. 메뉴 종료를 시도하면 세션이 종료됩니다.
또는 sshd
의 authorized_keys
파일을 사용하여 정의할 수 있습니다.필수 주문: 키 인증을 사용하여 SSH 세션이 시작되고 해당 키에 필수 명령이 연결되어 있을 때 sshd
실행됩니다 .명령만 지정완료되면 세션이 종료됩니다.
기본적으로 사용자를 위한 SSH 키 쌍을 생성합니다 support
(예 ssh-keygen -f rebootkey_ed25519 -t ed25519
: 공개 키(의 내용 )rebootkey_ed25519.pub
를 접두사로 사용하여 키 행이 다음과 같이 표시되도록 합니다 .~support/.ssh/authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/sudo /sbin/reboot"
authorized_keys
no-port-forwarding,no-X11-forwarding,no-agent-forwarding,command="/usr/bin/sudo /sbin/reboot" ssh-ed25519 <public_key_alphabet_soup_here> [optional comment]
그런 다음 visudo
구성을 사용하여 /etc/sudoers
사용자가 비밀번호 프롬프트 유무에 관계없이 support
실행할 수 있도록 허용합니다./sbin/reboot
support ALL=(root) /sbin/reboot
또는
support ALL=(root) NOPASSWD: /sbin/reboot
그런 다음 지원을 위해 개인 키 파일을 제공하고 rebootkey_ed25519
서버를 다시 시작해야 하는 경우 해당 파일을 실행하도록 지시할 수 있습니다.ssh -i rebootkey_ed25519 support@hostname_or_ip
이제 rebootkey_ed25519
개인 키를 사용하여 사용자로 로그인 support
하면 sshd
명령줄에 지정된 모든 원격 명령이 무시되고 해당 사용자로 실행됩니다 ssh
. 사용된 구성 버전에 따라 사용자 비밀번호가 필요할 수도 있고 필요하지 않을 수도 있습니다. 어떤 이유로든 명령이 종료되면 SSH 세션이 종료됩니다.sudo reboot
support
sudo
sudo
support
sudo reboot
실행하려는 각 명령에 대해 고유한 SSH 키를 사용하여 특정 명령을 사용하여 여러 SSH 키를 정의할 수 있습니다.
지원팀에서 SSH를 전혀 사용할 수 없는 경우 CGI 스크립트를 실행할 수 있는 웹 서버를 설정하고 지원팀에서 수행할 수 있도록 하려는 각 작업에 대한 스크립트를 작성할 수 있습니다( 필수 명령을 실행하는 스크립트를 사용하여 필요에 따라 사용자에게 권한 sudo
부여 ). NOPASSWD:
그리고 해당 스크립트에 대한 링크로 작업 메뉴를 포함하는 간단한 웹 페이지를 작성합니다.
이렇게 하려면 반드시 IP 주소로 페이지에 대한 액세스를 제한하거나 인증 + HTTPS를 요구해야 합니다.