Виконати програму щоразу, коли хтось увійде через SSH у вікно Linux


10

У мене невеликий сервер SSH, і я хотів би написати сценарій для запуску кожного разу, коли хтось увійде через SSH.

Тепер, як би я пішов про це?

Мені б хотілося, щоб сценарій запускався кожного разу, коли ВСЕ БУДЬ ЛЮБИМО, і мені потрібно мати принаймні ім’я користувача особи, яка ввійшла в систему, та IP-адресу, від якої людина ввійшов.

Я думав про використання /etc/bash.bashrc, але це хороше рішення? Наприклад, чи існує спосіб, яким користувач міг би відключити його використання, і таким чином відключити мій сценарій? Якщо так, то які інші мої варіанти?

Дякую.


Це буде працювати лише в тому випадку, якщо користувач, звичайно, використовує bash. Це не спрацює, якщо користувачі зможуть вибрати власну оболонку.
Paŭlo Ebermann

Відповіді:


12

Механізм використання залежить від ваших цілей.

Якщо ви хочете надати щось зручне або дружнє для своїх користувачів, тоді ви /etc/profileдостатньо розумні, якщо всі ваші користувачі використовують однакову оболонку. Якщо ви хочете, щоб команди виконувалися лише під час входу через ssh, розмістіть команди в /etc/ssh/sshrc. (Якщо ви не заперечуєте проти того, щоб користувачі перекреслили команди з власним ~/.ssh/rcфайлом.)

Якщо ви хочете змусити користувача виконати одну програму та лише одну програму , то ForceCommandваріант, описаний DigitalRoss, є хорошим підходом. (Я особисто хотів би обмежити користувача системою обов'язкового контролю доступу, таким як AppArmor , SELinux , TOMOYO або SMACK , щоб програма не могла дозволити користувачеві вийти з ладу . Я працював над AppArmor десять років, тому це Я б вибрав перший, але інші - це прекрасні інструменти, написані відмінними програмістами.)

Якщо ви просто хочете, щоб одна програма виконувалась і не турбувала користувача будь-яким способом , то найкращим підходом є використання pam_exec(8)модуля, який неможливо обійти, працює незалежно від оболонки і забезпечує легку можливість роботи як користувача чи як користувача рахунок програми, що виконує авторизацію. На сторінці вказується такий приклад:

   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.

Це може бути розширено для роботи на auth, account, passwordі sessionдії; мабуть session, найкраще було б виконати при вході в систему. Просто додайте рядок типу:

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

у ваш /etc/pam.d/sshdконтрольний файл.


Схоже, pam_execмодуль саме те, що я шукаю. Дякую!
houbysoft

2
ПОДЕРЖАЙТЕ, якщо команда, яку ви виконуєте, завершує роботу з ненульовим кодом виходу, ваш логін не вдасться, і ви можете бути заблоковані. Один із способів вирішити це - переконатися, що є ще один "необов'язковий сеанс", який називається з іншим модулем, який завжди вдається.
gflarity

4

Нові версії OpenSSH мають функцію сервера під назвою ForceCommand, яка дає контроль над сценарієм замість операції (scp, ssh, ...), яку призначено користувачем. Сценарій передається початковою командою, так що ви, ймовірно, можете скористатися ланцюжком після цього, зробивши все, що вам потрібно зробити.

Від sshd_config (5):

ForceCommand

Примушує виконання команди, визначеної ForceCommand, ігноруючи будь-яку команду, надану клієнтом, і ~ / .ssh / rc, якщо вона присутня. Команда викликається за допомогою оболонки для входу користувача з опцією -c. Це стосується виконання оболонки, командування чи підсистеми. Це найбільш корисно всередині блоку Match. Команда, спочатку надана клієнтом, доступна в змінній середовищі SSH_ORIGINAL_COMMAND. Визначення команди `` Internal-sftp '' змусить використовувати вбудований сервер sftp, який не потребує файлів підтримки при використанні з ChrootDirectory.

Я використовував це один раз, щоб переосмислити scp і забезпечити безпечне завантаження дорогоцінних каменів, не даючи кожному користувачеві, уповноваженому завантажувати дорогоцінні камені, інтерактивний доступ, який їм не потрібен і не хотів.


3

Одним із способів було б використання syslog-ng як демона syslog та налаштування його для запуску фону сценарію кожного разу, коли певна запис журналу (наприклад, вдалий вхід в ssh) збігається.


0

Заціни:

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

Я не вірю, що існує спосіб відключити це від запуску. Чи може хтось ще це перевірити?


Це ( /etc/profileабо ~/.profile) залежить від оболонки користувача, трохи менше, ніж bashrc. Якщо ваші користувачі використовують bash або подібне, це добре.
Paŭlo Ebermann
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.