Bagaimana mencegah shutdown saat pengguna SSH masuk?


20

Saya mengelola lingkungan jaringan dan saya memiliki situasi yang menarik muncul kemarin. Ketika sebuah host diharuskan untuk dimatikan oleh pengguna biasa, ia menolak untuk melakukannya jika pengguna lain masuk secara lokal. Namun, ini tidak terjadi ketika pengguna lain masuk melalui SSH. Jika satu pengguna masuk secara lokal dan satu pengguna masuk melalui SSH dan pengguna yang masuk secara lokal mencoba mematikannya bahkan tanpa peringatan dan koneksi SSH pengguna lain tiba-tiba diakhiri. Pertanyaan saya adalah, adakah cara untuk mencegah hal ini seperti kebijakan yang dilakukan untuk pengguna lokal? Saya sudah melihat halaman manual sshd_configdan tidak dapat menemukan apa pun yang tampaknya terkait.


EDIT (Info tambahan.):

Ada 4 OS di jaringan: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 dan Ubuntu 11.04. Kasus spesifik yang saya maksudkan adalah memiliki pengguna SSH pada host Mandriva 2009 dan pengguna lokal pada host Mandriva 2011.

Mandriva 2009 host menggunakan lingkungan GNOME 2.28, host 2010.2 menggunakan GNOME 2.32, 2011 host menggunakan KDE Plasma dan host Ubuntu 11.04 menggunakan Unity.


Memperbarui

Seperti yang saya catat dalam pertanyaan ini , saya telah melihat polkittindakan di bawah /usr/share/polkit-1/actions/dan menemukan (dalam file org.freedesktop.consolekit.policy) tindakan yang disebut org.freedesktop.consolekit.system.stop-multiple-usersmelempar pesan

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

Saya berpikir (karena org.freedesktop.*konvensi penamaan) bahwa ini adalah semacam sinyal yang dikirim ke DM melalui D-BUS. Saya pikir jika saya dapat mengetahui sinyal apa yang memicu polkittindakan ini , saya harus dapat mengubah perilakunya. Ada ide?


Perbarui 2

Saya mencoba percobaan kecil hari ini dan itu memberi saya hasil yang sangat aneh. Saya mencoba masuk melalui SSH ke satu kotak dan memastikan tidak ada pengguna lain yang masuk di VT. Jika saya memilih Shutdowndari menu "Tindakan" GDM, saya mendapatkan pesan kebijakan yang telah lama ditunggu yang memberi tahu saya bahwa tidak mungkin untuk melakukannya tanpa otentikasi karena pengguna lain masuk. Namun , jika saya menggunakan GDM untuk masuk secara lokal dan memilih untuk mematikan kotak dari menu GNOME, sesi SSH musnah seperti sebelumnya. Bagaimana ini mungkin? Apakah perilaku berbeda ketika saya mengajukan shutdownpermintaan dari GDM dibandingkan ketika saya memulainya dari dalam gnome-session? Apakah itu memberi tahu siapa pun sesuatu yang dapat membantu saya memecahkan masalah?


Mungkin akan membantu jika Anda bisa memberikan petunjuk tentang OS apa yang Anda jalankan.
Jenny D

Ada 4 OS di jaringan: Mandriva 2009, Mandriva 2010.2, Mandriva 2011 dan Ubuntu 11.04. Saya tidak menyadari ini adalah OS-spesifik; mengedit pertanyaan saya ...
Joseph R.

2
Saya pikir ini lebih berkaitan dengan OS daripada dengan SSH. Itu bukan sesuatu yang saya jalankan melawan di Unixes saya jalankan; tapi sekali lagi, saya biasanya melakukan shutdown sebagai root.
Jenny D

@ JennyD: Sebuah solusi mungkin untuk mencegah pengguna mematikan melalui UI; tapi saya pikir itu akan mengganggu mereka.
Joseph R.

2
Alih-alih menjadi masalah dengan SSH, itu mungkin masalah dengan konfigurasi PAM (pada host yang dimatikan). Sudahkah Anda melihat bagaimana PAM dapat membantu shutdown menentukan pengguna yang masuk dan memberikan peringatan yang sama kepada pengguna yang ingin mematikan sistem?
Rob Gibson

Jawaban:


3

Saya akan menulis sebuah program kecil yang memeriksa koneksi SSH aktif melalui netstatdan / atau ps. Jatuhkan di tempat shutdownperintah.

Jika tidak ada orang lain yang menggunakan mesin, panggil shutdownketika pengguna mencoba. Jika seseorang menggunakan mesin, cukup peringatkan pengguna yang mengeluarkan shutdownperintah.

Netstat akan memberi Anda output seperti ini, dan cukup mudah untuk mencari .sshdi output.

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

psakan memberikan Anda output seperti ini, tetapi ini sedikit lebih sulit karena Anda harus memastikan tidak perlu khawatir tentang koneksi keluar. Netstatmungkin cara yang tepat untuk pergi.

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

Kedengarannya sangat bagus. Saya pikir cara yang lebih kuat adalah menambah sessionrantai PAM SSH dengan program yang menyentuh file ketika pengguna masuk melalui SSH dan menghapusnya ketika pengguna logout dan kemudian memiliki program yang Anda sarankan hanya memeriksa keberadaan file-file ini. Jika ini berhasil, saya menerima jawaban Anda.
Joseph R.

1
Itu seharusnya bekerja. Satu pemikiran: apa yang terjadi jika mereka memutuskan sambungan tanpa keluar? Apakah file tersentuh jika sesi SSH mati? Anda ingin memastikannya
kmort

Hmmm. Itu memang makanan untuk dipikirkan ...
Joseph R.

1
Mungkin pendekatan Anda dapat disederhanakan dengan mem-parsing output whosebagai gantinya. Ini menunjukkan pengguna mana yang terhubung atau dari host mana.
Joseph R.

1
Sangat mungkin. Pada shell yang saya gunakan kebanyakan whotidak memberikan banyak output, tetapi kebanyakan shell lain tidak. (Sistem tertanam konyol ...) Bagaimanapun, jika Anda ingin menggunakan netstat, cukup mudah untuk mendapatkan kolom yang Anda butuhkan awk. Sesuatu di sepanjang garis netstat -a | awk '{print $4}'(Setidaknya pada cangkang saya.)
kmort

2

Anda sebenarnya menemukan informasi yang tepat. Setidaknya itu bekerja di bawah Ubuntu hingga 13,04.

Entri kebijakan berikut, ketika disetel dengan "auth_admin_keep" seperti di bawah ini, akan lebih suka shutdown terjadi:

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

Namun entah bagaimana, sejak pukul 13.10, kebijakan ini benar-benar diabaikan. Sejauh ini tidak ada yang bisa memberi tahu saya apa yang akan menggantikannya (jika ada.)

Perhatikan bahwa Anda juga memiliki entri untuk memulai ulang (org.freedesktop.consolekit.system.restart-multiple-users) yang juga harus diatur ke auth_admin_keep.

Lihat pertanyaan / jawaban ini juga di AskUbuntu: /ubuntu/1190/how-can-i-make-shutdown-not-require-admin-password


0

Hitung koneksi SSH, dan jika lebih dari koneksi Anda, maka shutdown:

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

Sesuatu seperti ini?

Saya mungkin akan memasukkan beberapa variabel baca sehingga akan meminta saya, seperti "Apakah Anda ingin mematikan?" dan "Apakah Anda ingin mematikan?".

Maka Anda bisa menggunakannya sebagai alias atau serupa.


Ini memeriksa hanya koneksi masuk. Hanya menyebutkan.
jamadagni
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.