Birisi SSH aracılığıyla bir Linux kutusuna her giriş yaptığında programı yürütün


10

Küçük bir SSH sunucum var ve birisi SSH yoluyla her oturum açtığında çalıştırmak için bir komut dosyası yazmak istiyorum.

Şimdi, bunu nasıl yapabilirim?

Komut dosyasının her oturum açtığında çalışmasını istiyorum ve en azından giriş yapan kullanıcının kullanıcı adına ve giriş yapan kişinin IP adresine erişmem gerekiyor.

Kullanmayı düşündüm /etc/bash.bashrc, ama bu iyi bir çözüm mü? Örneğin, bir kullanıcının kullanımını devre dışı bırakıp betiğimi devre dışı bırakmasının bir yolu var mı? Evet ise, diğer seçeneklerim nelerdir?

Teşekkürler.


Bu sadece kullanıcı elbette bash kullanıyorsa işe yarayacaktır. Kullanıcılar kendi kabuklarını seçebilirlerse çalışmazlar.
Paŭlo Ebermann

Yanıtlar:


12

Kullanılacak mekanizma hedeflerinize bağlıdır.

Kullanıcılarınız için uygun veya dostça bir şey sağlamak istiyorsanız /etc/profile, tüm kullanıcılarınız aynı kabuğu kullanıyorsa, yeterince makul. Komutların yalnızca üzerinden oturum açarken yürütülmesini istiyorsanız, sshkomutları içine yerleştirin /etc/ssh/sshrc. (Kullanıcıların komutları kendi ~/.ssh/rcdosyalarıyla geçersiz kılmalarına aldırmazsanız .)

Bir kullanıcıyı bir programı ve yalnızca bir programı yürütmeye zorlamak istiyorsanız , DigitalRoss tarafından açıklanan seçenek iyi bir yaklaşımdır. (Ben şahsen programın bir kullanıcının kaçmasına izin verememesini sağlamak için kullanıcıyı AppArmor , SELinux , TOMOYO veya SMACK gibi zorunlu bir erişim kontrol sistemi ile sınırlayacağım . On yıl boyunca AppArmor üzerinde çalıştım, bu yüzden önce seçerim, ama diğerleri mükemmel programcılar tarafından yazılmış iyi araçlardır.)ForceCommand

Sadece bir programın çalıştırılmasını ve kullanıcıyı herhangi bir şekilde rahatsız etmemesini istiyorsanız , en iyi yaklaşım, pam_exec(8)atlanamayan, kabuktan bağımsız olarak çalışan ve kullanıcı veya kullanıcı olarak kolayca çalışabilme modülünü kullanmaktır. yetkilendirme yapan programın hesabı. Manpage aşağıdaki örneği vermektedir:

   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.

Bu çalıştırmak için uzun olabilir auth, account, passwordve sessioneylemler; muhtemelen sessiongiriş yaptıktan sonra yürütmek için en iyi olurdu. Sadece şöyle bir satır ekleyin:

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

sizin için /etc/pam.d/sshdkontrol dosyası.


pam_execModül tam olarak aradığım şey gibi görünüyor . Teşekkürler!
houbysoft

2
WATCH OUT, yürüttüğünüz komut sıfır dışında bir çıkış koduyla çıkarsa, girişiniz başarısız olur ve kilitlenebilirsiniz. Bunu çözmenin bir yolu, her zaman başarılı olan farklı bir modülle çağrılan başka bir 'oturum isteğe bağlı' olduğundan emin olmaktır.
gflarity

4

Yeni OpenSSH sürümlerinde , kullanıcının istediği işlem (scp, ssh, ...) yerine komut dosyasına denetim sağlayan ForceCommand adlı bir sunucu özelliği bulunur . Komut dosyası orijinal komuttan geçirilir, böylece yapmanız gereken her şeyi yaptıktan sonra muhtemelen ona zincirleyebilirsiniz.

Sshd_config (5) sitesinden:

ForceCommand

ForceCommand tarafından belirtilen komutun yürütülmesini zorlayarak istemci tarafından sağlanan komutları ve varsa ~ / .ssh / rc'yi yok sayar. Komut, -c seçeneğiyle kullanıcının oturum açma kabuğu kullanılarak çağrılır. Bu kabuk, komut veya alt sistem yürütme için geçerlidir. Bir Match bloğu içinde en kullanışlıdır. Başlangıçta istemci tarafından sağlanan komut SSH_ORIGINAL_COMMAND ortam değişkeninde mevcuttur. `` Internal-sftp '' komutunun belirtilmesi, ChrootDirectory ile kullanıldığında destek dosyası gerektirmeyen işlem içi bir sftp sunucusunun kullanılmasını zorlar.

Bu bir kez scp geçersiz kılmak ve her kullanıcıya ihtiyaç duymadıkları veya istemiyordu etkileşimli erişim yüklemek için yetkili vermeden güvenli gem yükleme sağlamak için kullanılır.


3

Bunun bir yolu, syslog-ng'yi bir syslog arka plan programı olarak kullanmak ve belirli bir günlük girişi (başarılı bir ssh girişi gibi) her eşleştiğinde komut dosyası arka planını çalıştıracak şekilde yapılandırmak olacaktır.


0

Şuna bir bak:

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

Bunun çalışmasını devre dışı bırakmanın bir yolu olduğuna inanmıyorum. Başka kimse bunu doğrulayabilir mi?


Bu ( /etc/profileveya ~/.profile) kullanıcının kabuğuna bağlıdır, sadece biraz daha azdır bashrc. Kullanıcılarınız bir bash veya benzeri kullanıyorsa, sorun değil.
Paŭlo Ebermann
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.