Bir SSH kullanıcısı oturum açtığında kapanma nasıl önlenir?


20

Ağa bağlı bir ortamı yönetiyorum ve dün ilginç bir durum ortaya çıktı. Bir ana bilgisayarın normal bir kullanıcı tarafından kapatılması gerektiğinde, diğer kullanıcılar yerel olarak oturum açtıysa bunu yapmayı reddeder. Ancak bu, diğer kullanıcıların SSH üzerinden oturum açtığı durumda geçerli değildir. Bir kullanıcı yerel olarak oturum açmışsa ve bir kullanıcı SSH üzerinden oturum açmışsa ve yerel olarak oturum açmış olan kullanıcı kapanmaya çalışırsa, uyarı yapmadan başarılı olur ve diğer kullanıcının SSH bağlantısı aniden sonlandırılır. Sorum şu: Politikanın yerel kullanıcılar için yaptığı gibi bunu önlemenin bir yolu var mı? Zaten adam sayfasına baktım sshd_configve ilgili görünen bir şey bulamadım.


DÜZENLE (Ek bilgi):

Ağda 4 işletim sistemi vardır: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 ve Ubuntu 11.04. SSH kullanıcısını bir Mandriva 2009 ana bilgisayarında ve yerel kullanıcıyı bir Mandriva 2011 ana bilgisayarında bulundurduğum özel durum

Mandriva 2009 ana bilgisayarları GNOME 2.28 ortamını, 2010.2 ana bilgisayarları GNOME 2.32, 2011 ana bilgisayarları KDE Plazma ve Ubuntu 11.04 ana bilgisayarları Unity kullanıyor.


Güncelleştirme

Bu soruda belirttiğim gibi , polkitaltındaki eylemlere baktım /usr/share/polkit-1/actions/ve (dosyada org.freedesktop.consolekit.policy) org.freedesktop.consolekit.system.stop-multiple-users, mesajı atan bir eylem buldum

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

Ben ( org.freedesktop.*adlandırma kuralı nedeniyle ) bu D-BUS aracılığıyla DM gönderilen bir tür sinyal olduğunu düşünüyorum . Bu polkiteylemi hangi sinyalin tetiklediğini öğrenirsem davranışını değiştirebilmeliyim diye düşünüyorum . Herhangi bir fikir?


Güncelleme 2

Bugün küçük bir deneme denedim ve bu bana çok garip sonuçlar verdi. Bir kutuya SSH ile giriş yapmayı denedim ve herhangi bir VT'de başka kullanıcıların giriş yapmadığından emin oldum. ShutdownGDM'nin "İşlemler" menüsünden seçim yaparsam, diğer kullanıcıların giriş yaptıkları gibi kimlik doğrulaması olmadan bunu yapmanın imkansız olduğunu bildiren uzun zamandır beklenen politika mesajını alırım. Ancak , yerel olarak giriş yapmak ve seçmek için GDM'yi kullanırsam GNOME'un menüsünden kutuyu kapatmak için SSH oturumu daha önce olduğu gibi gizlenir. Bu nasıl mümkün olabilir? GDM'den bir shutdownistek başlattığımda davranış, bir istek içinden başlattığımdan farklı mı gnome-session? Bu, kimseye sorunu çözmeme yardımcı olabilecek herhangi bir şey söylüyor mu?


Hangi işletim sistemini kullandığınıza dair bir ipucu verebilirseniz muhtemelen yardımcı olacaktır.
Jenny D

Ağda 4 işletim sistemi vardır: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 ve Ubuntu 11.04. Bunun işletim sistemine özgü olduğunu fark etmedim; sorumu düzenliyor ...
Joseph R.

2
Sanırım OS ile yapmak SSH'den çok. Bu, koştuğum Unix'lerde karşılaştığım bir şey değil; ama sonra tekrar, genelde root olarak kapanıyorum.
Jenny D

@JennyD: Kullanıcıların kullanıcı arayüzü üzerinden kapanmasını önlemek için bir çözüm olabilir; ama bence bu onlar için can sıkıcı olurdu.
Joseph R.

2
SSH ile ilgili bir sorun olmaktan ziyade, PAM yapılandırmasıyla ilgili bir sorun olabilir (ana bilgisayarda kapatılıyor). PAM'ın oturum açmış kullanıcıları belirlemeye ve sistemi kapatmak isteyen bir kullanıcıya aynı uyarıyı nasıl sağlamaya yardımcı olabileceğini incelediniz mi?
Rob Gibson

Yanıtlar:


3

Aktif SSH bağlantılarını netstatve / veya üzerinden kontrol eden küçük bir program yazardım ps. shutdownKomut yerine bırakın .

Makineyi başka kimse kullanmıyorsa shutdown, kullanıcı denediğinde arayın . Birisi makineyi kullanıyorsa, shutdownkomutu veren kullanıcıyı uyarmanız yeterlidir .

Netstat size bunun gibi çıktılar verecektir .sshve çıktıya bakmak oldukça kolaydır .

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               *.*

pssize bunun gibi çıktılar verecektir, ancak biraz daha zordur, çünkü giden bağlantılar hakkında endişelenmemeniz gerekir. Netstatmuhtemelen doğru yol.

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

Kulağa hoş geliyor. Daha sağlam bir yolun, SSH PAM sessionzincirini, kullanıcı SSH aracılığıyla oturum açtığında bir dosyaya dokunan ve kullanıcı oturumunu kapatıp daha sonra önerdiğiniz programı basitçe bu dosyalar. Bu işe yararsa, cevabınızı kabul ediyorum.
Joseph R.

1
Bu işe yaramalı. Bir düşünce: Oturumu kapatmadan kesilirse ne olur? SSH oturumu basitçe ölürse dosyaya dokunulur mu? Emin olmak istersiniz
kmort

Hmmm. Bu gerçekten düşünce için yiyecek ...
Joseph R.

1
Belki de yaklaşımınız whobunun çıktısını ayrıştırarak basitleştirilebilir . Hangi kullanıcıların bağlı olduğunu ve hangi ana bilgisayardan olduğunu gösterir.
Joseph R.Şubat

1
Büyük ihtimalle. En whoçok kullandığım kabukta çok fazla çıktı vermez, ama diğer kabukları da verir. (Aptalca gömülü sistem ...) Her durumda, kullanmak netstatistiyorsanız, ihtiyacınız olan sütunu almak oldukça basittir awk. netstat -a | awk '{print $4}'(En azından benim kabuğumda) hatları boyunca bir şey
kmort

2

Aslında doğru bilgiyi buldunuz. En azından Ubuntu altında 13.04'e kadar çalıştı.

Aşağıdaki politika girdisi, aşağıdaki gibi "auth_admin_keep" ile kurulum yapıldığında kapatmanın gerçekleşmesini tercih eder:

<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>

Ancak bir şekilde, 13.10'dan beri, bu politika tamamen göz ardı edilmektedir. Şimdiye kadar hiç kimse bana neyin yerini alacağını (herhangi bir şey varsa) söyleyemedi.

Ayrıca yeniden başlatılması için (org.freedesktop.consolekit.system.restart-multiple-users) böyle bir girişe sahip olduğunuzu unutmayın auth_admin_keep.

AskUbuntu'da da bu soruya / cevaba bakınız: /ubuntu/1190/how-can-i-make-shutdown-not-require-admin-password


0

SSH bağlantılarını sayın ve sizinkinden daha fazlaysa, kapatın:

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

Böyle bir şey mi?

Muhtemelen bazı okuma değişkenleri eklemek istiyorum, böylece bana "Yine de kapatmak istiyor musunuz?" ve "Kapatmak istiyor musunuz?".

Sonra bir takma ad veya benzeri olarak kullanabilirsiniz.


Bu yalnızca gelen bağlantıları kontrol eder. Sadece bahsediyordum.
jamadagni
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.