Jalankan program setiap kali seseorang masuk melalui SSH ke dalam kotak Linux

10

Saya memiliki server SSH kecil, dan saya ingin menulis skrip untuk menjalankan setiap kali seseorang masuk melalui SSH.

Sekarang, bagaimana saya akan melakukannya?

Saya ingin skrip dijalankan setiap kali SIAPA SAJA masuk, dan saya harus memiliki akses ke setidaknya nama pengguna orang yang masuk, dan alamat IP dari siapa orang tersebut masuk.

Saya berpikir untuk menggunakan /etc/bash.bashrc, tetapi apakah itu solusi yang baik? Misalnya, apakah ada cara pengguna dapat menonaktifkan penggunaannya, dan dengan demikian menonaktifkan skrip saya? Jika ya, apa pilihan saya yang lain?

Terima kasih.

houbysoft
sumber
Ini hanya akan berfungsi jika pengguna menggunakan bash, tentu saja. Ini tidak akan berfungsi jika pengguna dapat memilih shell mereka sendiri.
Paŭlo Ebermann

Jawaban:

12

Mekanisme untuk menggunakan tergantung pada tujuan Anda.

Jika Anda ingin memberikan sesuatu yang nyaman atau ramah untuk pengguna Anda, maka Anda /etc/profilecukup masuk akal jika semua pengguna Anda menggunakan shell yang sama. Jika Anda ingin agar perintah hanya dieksekusi saat masuk melalui ssh, tempatkan perintah /etc/ssh/sshrc. (Jika Anda tidak keberatan pengguna menimpa perintah dengan ~/.ssh/rcfile mereka sendiri .)

Jika Anda ingin memaksa pengguna untuk menjalankan satu program, dan hanya satu program , maka ForceCommandopsi seperti yang dijelaskan oleh DigitalRoss adalah pendekatan yang baik. (Saya pribadi lebih lanjut akan membatasi pengguna dengan kontrol akses mandatory sistem seperti AppArmor , SELinux , Tomoyo , atau SMACK , untuk memastikan program tidak dapat memungkinkan pengguna untuk melarikan diri. Saya telah bekerja di AppArmor selama bertahun-tahun sepuluh, jadi itulah alat saya akan memilih pertama, tetapi yang lain adalah alat yang baik ditulis oleh programmer yang sangat baik.)

Jika Anda hanya ingin satu program dijalankan dan tidak mengganggu pengguna dengan cara apa pun , maka pendekatan terbaik adalah dengan menggunakan pam_exec(8)modul, yang tidak dapat di-bypass, berfungsi terlepas dari shell, dan memberikan kemampuan yang mudah untuk dijalankan sebagai pengguna atau sebagai pengguna akun program yang melakukan otorisasi. Halaman manual memberikan contoh berikut:

   Add the following line to /etc/pam.d/passwd to rebuild the
   NIS database after each local password change:

               passwd optional pam_exec.so seteuid make -C /var/yp

   This will execute the command

       make -C /var/yp

   with effective user ID.

Ini bisa diperpanjang untuk berjalan pada auth, account, password, dan sessiontindakan; mungkin sessionakan lebih baik untuk dieksekusi saat login. Cukup tambahkan baris seperti:

session optional pam_exec.so log=/var/log/ssh_login_cmd /usr/local/bin/ssh_cmd

ke /etc/pam.d/sshdfile kontrol Anda .

sarnold
sumber
Sepertinya pam_execmodul persis apa yang saya cari. Terima kasih!
houbysoft
2
HATI-HATI, jika perintah yang Anda jalankan keluar dengan kode keluar bukan nol, login Anda akan gagal dan Anda bisa dikunci. Salah satu cara untuk mengatasi ini adalah dengan memastikan ada 'sesi opsional' lain yang dipanggil dengan modul berbeda yang selalu berhasil.
gflarity
4

Versi OpenSSH yang agak baru memiliki fitur server yang disebut ForceCommand yang memberikan kontrol pada skrip alih-alih operasi (scp, ssh, ...) yang dimaksudkan pengguna. Script dilewatkan dengan perintah asli, jadi Anda mungkin dapat berantai setelah melakukan apa pun yang perlu Anda lakukan.

Dari sshd_config (5):

Perintah Angkatan

Memaksa pelaksanaan perintah yang ditentukan oleh ForceCommand, mengabaikan perintah yang disediakan oleh klien dan ~ / .ssh / rc jika ada. Perintah dijalankan dengan menggunakan shell login pengguna dengan opsi -c. Ini berlaku untuk eksekusi shell, perintah, atau subsistem. Ini paling berguna di dalam blok Match. Perintah yang semula disediakan oleh klien tersedia di variabel lingkungan SSH_ORIGINAL_COMMAND. Menentukan perintah `` internal-sftp '' akan memaksa penggunaan server sftp dalam-proses yang tidak memerlukan file dukungan saat digunakan dengan ChrootDirectory.

Saya menggunakan ini sekali untuk mengesampingkan scp dan memberikan unggahan permata yang aman tanpa memberi setiap pengguna wewenang untuk mengunggah akses interaktif permata yang tidak mereka butuhkan atau inginkan.

DigitalRoss
sumber
3

Salah satu caranya adalah dengan menggunakan syslog-ng sebagai daemon syslog dan mengkonfigurasinya untuk menjalankan latar belakang skrip setiap kali entri log tertentu (seperti login ssh yang berhasil) cocok.

Janne Pikkarainen
sumber
0

Lihat ini:

http://ubuntuforums.org/showthread.php?p=9383927

Saya tidak percaya ada cara untuk menonaktifkan ini agar tidak berjalan. Adakah yang bisa memverifikasi ini?

Cepat
sumber
Itu ( /etc/profileatau ~/.profile) tergantung pada shell pengguna, hanya sedikit kurang dari bashrc. Jika pengguna Anda menggunakan bash atau sejenisnya, ini tidak masalah.
Paŭlo Ebermann