SSH 사용자가 로그인할 때 종료되는 것을 방지하는 방법은 무엇입니까?

SSH 사용자가 로그인할 때 종료되는 것을 방지하는 방법은 무엇입니까?

제가 네트워크 환경을 관리하고 있는데 어제 흥미로운 상황이 발생했습니다. 일반 사용자가 호스트에 종료를 요청하면 다른 사용자가 로컬로 로그인하면 호스트는 종료를 거부합니다. 단, 다른 사용자가 SSH를 통해 로그인하는 경우에는 그러하지 않습니다. 한 사용자가 로컬로 로그인하고 다른 사용자가 SSH를 통해 로그인한 경우 로컬로 로그인한 사용자가 종료를 시도하면 경고 없이 성공하고 다른 사용자의 SSH 연결이 갑자기 종료됩니다. 제 질문은 로컬 사용자를 위한 정책처럼 이를 방지할 수 있는 방법이 있습니까?입니다. 매뉴얼 페이지를 살펴봤지만 sshd_config관련성이 있는 것으로 보이는 항목을 찾을 수 없습니다.


편집(추가 정보):

네트워크에는 Mandriva 2009, Mandriva 2010.2, Mandriva 2011 및 Ubuntu 11.04의 4가지 운영 체제가 있습니다. 내가 언급하는 구체적인 사례는 Mandriva 2009 호스트의 SSH 사용자와 Mandriva 2011 호스트의 로컬 사용자입니다.

Mandriva 2009 호스트는 GNOME 2.28 환경을 사용하고, 2010.2 호스트는 GNOME 2.32를 사용하고, 2011 호스트는 KDE Plasma를 사용하고, Ubuntu 11.04 호스트는 Unity를 사용합니다.


고쳐 쓰다

내가 그랬던 것처럼이 문제polkit, 아래 작업을 살펴보고 /usr/share/polkit-1/actions/(파일에서 org.freedesktop.consolekit.policy) org.freedesktop.consolekit.system.stop-multiple-users메시지 던지기라는 작업을 발견했습니다.

System policy prevents stopping the system when other users are logged in

나는 (명명 규칙으로 인해 org.freedesktop.*) 이것이 D-BUS를 통해 DM으로 전송되는 일종의 신호라고 생각합니다. 이것을 촉발하는 신호를 알아낼 수 있다면 polkit그 행동을 수정할 수 있어야 한다고 생각합니다. 어떤 아이디어가 있나요?


업데이트 2

오늘 약간의 실험을 해봤는데 매우 이상한 결과가 나왔습니다. SSH를 통해 한 컴퓨터에 로그인을 시도하고 다른 사용자가 VT에 로그인하지 않았는지 확인했습니다. GDM의 작업 메뉴에서 선택하면 Shutdown다른 사용자가 로그인되어 있는 동안 인증 없이는 이 작업을 수행할 수 없다는 오랫동안 기다려온 정책 메시지가 표시됩니다.하지만, GDM을 사용하여 로컬로 로그인하고 GNOME 메뉴에서 상자를 닫으면 SSH 세션이 이전과 같이 삭제됩니다. 어떻게 이럴 수있어? 내 요청이 GDM에서 생성될 때 와 내부에서 생성될 때 shutdown다르게 작동합니까 gnome-session? 이 내용은 문제 해결에 도움을 줄 수 있는 사람에게 전달됩니까?

답변1

실제로 올바른 정보를 찾았습니다. 적어도 Ubuntu 13.04에서는 작동합니다.

다음 정책 항목은 다음과 같이 설정된 "auth_admin_keep"을 사용할 때 시스템 종료가 발생하는 것을 방지합니다.

<action id="org.freedesktop.consolekit.system.stop-multiple-users">
  <description>Stop the system when multiple users are logged in</description>
  <message>System policy prevents stopping the system when other users are logged in</message>
  <defaults>
    <allow_inactive>no</allow_inactive>
    <allow_active>auth_admin_keep</allow_active>
  </defaults>
</action>

그런데 어찌됐든 13.10부터 이 정책은 완전히 무시됐다. 지금까지 누구도 그것을 대체할 수 있는 것이 무엇인지 말해 줄 수 없었습니다.

또한 restart( )에 대해 이와 같은 항목이 있으며 org.freedesktop.consolekit.system.restart-multiple-users이 항목도 로 설정되어야 합니다 auth_admin_keep.

AskUbuntu에서 다음 질문/답변도 참조하세요.https://askubuntu.com/questions/1190/how-can-i-make-shutdown-not-require-admin-password

답변2

netstat및/또는 를 통한 활성 SSH 연결을 확인하는 작은 프로그램을 작성하겠습니다 ps. 명령이 있는 곳에 넣으세요 shutdown.

다른 사람이 기계를 사용하고 있지 않은 경우, shutdown사용자가 기계를 사용하려고 할 때 전화하십시오. 다른 사람이 컴퓨터를 사용하고 있다면 명령을 내린 사용자에게 경고하세요 shutdown.

Netstat는 이와 같은 출력을 제공하며 .ssh출력에서 ​​쉽게 찾을 수 있습니다.

netstat -a
Active Internet connections (including servers)
Proto Recv-Q Send-Q  Local Address          Foreign Address        State
tcp        0     52  10.5.6.xx.ssh          10.6.6.yy.51400        ESTABLISHED
tcp        0      0  *.ssh                  *.*                    LISTEN
udp        0      0  *.syslog               *.*

ps이와 같은 출력을 제공하지만 아웃바운드 연결에 대해 걱정하지 않아야 하기 때문에 약간 어렵습니다. Netstat아마도 그것은 올바른 접근 방식 일 것입니다.

  ps -e | grep ssh
      10084366 ?        00:00:07 /opt/sbin/sshd
        282647 ?        00:00:00 /opt/sbin/sshd

답변3

SSH 연결 수를 세고 연결 수가 더 많으면 닫습니다.

SSH_CONS=$(ps x | grep 'sshd:' | grep -v 'grep' | wc -l)

if [ "$SSH_CONS" -gt 1 ]
then
    echo "More than 1 SSH connection..."
else
    echo "Shutting down..."
    # halt
fi

이 같은?

일부 읽기 변수를 삽입하여 "아직 닫으시겠습니까?" 및 "닫으시겠습니까?"와 같은 메시지를 표시할 수 있습니다.

그런 다음 별칭이나 이와 유사한 것으로 사용할 수 있습니다.

관련 정보