배경

배경

배경

여러 엔지니어가 공유하는 Linux를 실행하는 여러 개의 Raspberry PI 3 장치가 있습니다. 단순화를 위해 각 Linux 상자에는 우리가 개발하는 소프트웨어를 테스트하기 위해 동일한 기본 사용자 이름/비밀번호(즉, 모든 사람이 루트로 로그인함)가 있습니다. 이것은딱딱한요구 사항(즉, 변경할 수 없음)


질문

때때로 두 명의 사용자(보통 한 명은 사무실에서 일하고 다른 한 명은 VPN을 통해 원격으로 근무)가 동시에 동일한 장치에 로그인하고, 두 사용자가 모두 이득을 얻으려는 소프트웨어를 실행하는 경우 서로에게 문제를 일으킬 수 있습니다. 권한. 상자에 연결된 하드웨어에 대한 독점 액세스. 또한 때때로 사용자가 시스템을 재부팅하여 다른 개발자를 짜증나게 할 수도 있습니다. 우리는 독점 액세스 일정을 구현하려고 노력하지만 누군가 "단지 확인을 빨리 완료해야 하는 경우" 이러한 일정은 종종 무시됩니다.


질문

어떤 방법이 있나요?주문형(즉, 이 "기능"을 항상 활성화하고 싶지는 않습니다.) 사용자가 계정(예: 루트)을 사용하여 대화형/비대화형 SSH 로그인을 유지하도록 하여 계정(예: 루트) SSH_CLIENT과 연결된 IP 주소만 사용할 수 있도록 합니다. 개인? 예를 들어 Bob과 Alice가 모두 darkstar사용자 이름을 사용하여 호스트에 로그인 하기를 원한다고 가정합니다 root. Bob이 먼저 로그인하면 그의 IP 주소는 입니다 192.168.1.100. Bob은 10분 동안 단독 액세스를 원하므로 해당 10분 동안 darkstar특수 명령(예: )을 실행합니다 .bash /opt/mine_for_10_mins.sh

  • Bob은 동일한 소스 IP 주소 (또는 여기에 저장된 모든 것 ) 에서 오는 한 다른 대화형/비대화형 SSH 인스턴스(예: , , 등을 통한 로그인)를 생성할 sshscp있습니다 .sftp192.168.1.100SSH_CLIENT
  • 해당 IP에서 로그인을 시도하는 Alice가 10.10.0.20010분 이내에 로그인할 수 없거나 Bob이 로그아웃됩니다.이상적으로는 둘 다 갖고 싶고, Bob이 한 상자를 48시간 동안 보관하고 주말 동안 떠나서 사람들이 로그인할 수 없게 되는 일이 없도록 한도를 설정하고 싶습니다.Bob이 일찍 그만두면 좋겠지만 한 번에 10분(또는 12시간) 이상 약속을 잡을 수는 없습니다.

이상적으로는 타이머를 사용하여 이 작업을 수행하고 싶고, 너무 비실용적이거나 어려운 경우 Bob이 모든 로그인 세션을 종료할 때 "보류"가 끝나기를 원합니다 192.168.1.100.


지금까지 일하다

touch'ing'을 사용해 보았지만 /etc/nologin엔지니어가 원격으로 작업하는 경우(유연한 재택근무 설정) 자동 삭제를 보장할 수 있는 방법을 찾을 수 없으며 모든 사람이 상자 밖으로 잠기는 것을 원하지 않습니다. 누군가 원격으로 장치를 고치지 않는 한(우리는 이 문제를 고치기 위해 네트워크 지원 KVM을 개발하고 있습니다).

인스턴스를 종료하여 주기적으로(예: 5초마다) 다른 IP에서 다른 사용자를 자동으로 시작하는 스크립트를 실행할 수도 있지만 sshd, 사람들이 비대화형으로 실행하는 것이 매우 일반적이므로 로그인을 완전히 차단해 보고 싶습니다. 동일한 Linux 시스템의 다른 사용자를 방해할 수 있는 스크립트가 포함된 세션과 ssh폴링 기반 방법은 이를 방지할 수 없습니다.

감사해요.

답변1

귀하의 예를 사용하면 iptables를 사용하여 Alice의 SSH 액세스를 명시적으로 차단하고 Bob의 IP 주소에서 오는 SSH 트래픽을 허용합니다. 명령줄에서 다음과 같은 내용을 입력하거나 스크립트를 작성해야 합니다.

Bob의 IP(192.168.1.100)가 SSH를 통해 기본 포트(22)에 연결되도록 허용

$ sudo iptables -I INPUT -s 192.168.1.100 -p tcp -m tcp --dport 22 -m comment --comment "Allow Bob to SSH" -j ACCEPT

Alice의 SSH 액세스를 차단합니다.

$ sudo iptables -I INPUT -s 10.1.0.200 -p tcp -m tcp --dport 22 -m comment --comment "Block Alice from using SSH to login" -j DROP

Alice의 차단을 해제하려면 --list 및 --line-numbers 옵션과 함께 iptables 명령을 사용하여 Alice의 IP 주소가 포함된 줄을 찾은 다음 테이블에서 해당 줄을 삭제할 수 있습니다.

$sudo iptables -L --line-numbers | grep 10.1.0.200
num  target     prot opt source               destination
1    DROP       tcp  --  10.1.0.200           anywhere             tcp dpt:ssh /* Do not allow Alice to SSH in */

$ sudo iptables -D INPUT 1

또는 단일 명령으로 동일한 작업을 수행합니다.

$ sudo iptables -L --line-numbers | grep "10.1.0.200" | awk '{print $1}' | xargs -i iptables -D INPUT {} 

그리고 동일한 명령을 사용하여 Alice의 IP를 Bob의 IP로 바꿔 Bob의 IP에 대한 명시적인 "허용" 규칙을 제거합니다.

대본은 여러분께 맡기겠습니다. 10분 타이머를 활성화하는 가장 좋은 방법을 알고 싶으시면 알려주시기 바랍니다.

관련 정보