У меня есть небольшой SSH-сервер, и я хотел бы написать скрипт, который будет запускаться каждый раз, когда кто-нибудь входит в систему через SSH.
Теперь, как бы я поступил об этом?
Я бы хотел, чтобы скрипт запускался каждый раз, когда ЛЮБЫЙ пользователь входит в систему, и мне нужно иметь доступ как минимум к имени пользователя, который вошел в систему, и к IP-адресу, с которого он вошел в систему.
Я думал об использовании /etc/bash.bashrc
, но это хорошее решение? Например, есть ли способ, которым пользователь может отключить его использование и, таким образом, отключить мой скрипт? Если да, каковы мои другие варианты?
Спасибо.
Ответы:
Механизм использования зависит от ваших целей.
Если вы хотите предоставить что-то удобное или дружественное для ваших пользователей, то
/etc/profile
это достаточно разумно, если все ваши пользователи используют одну и ту же оболочку. Если вы хотите, чтобы команды выполнялись только при входе через системуssh
, поместите команды в/etc/ssh/sshrc
. (Если вы не возражаете, пользователи переопределяют команды своим собственным~/.ssh/rc
файлом.)Если вы хотите заставить пользователя выполнить одну программу и только одну программу , то
ForceCommand
вариант, описанный DigitalRoss, является хорошим подходом. (Лично я бы далее ограничил пользователя обязательной системой контроля доступа, такой как AppArmor , SELinux , TOMOYO или SMACK , чтобы гарантировать, что программа не может позволить пользователю сбежать. Я работал над AppArmor в течение десяти лет, так что это инструмент, который я бы выбрал первым, но остальные - прекрасные инструменты, написанные отличными программистами.)Если вы просто хотите, чтобы одна программа выполнялась и никоим образом не беспокоила пользователя , тогда лучше всего использовать
pam_exec(8)
модуль, который нельзя обойти, работает независимо от оболочки и обеспечивает простую возможность запуска от имени пользователя или пользователя учетная запись программы, выполняющей авторизацию. Страница man дает следующий пример:Это может быть расширено для работы на
auth
,account
,password
иsession
действия; вероятно,session
было бы лучше всего выполнить после входа в систему. Просто добавьте строку вроде:в ваш
/etc/pam.d/sshd
контрольный файл.источник
pam_exec
модуль именно то, что я ищу. Спасибо!Новые версии OpenSSH имеют серверную функцию ForceCommand, которая предоставляет управление сценарию, а не операции (scp, ssh, ...), которую предполагал пользователь. Сценарию передается исходная команда, так что вы, вероятно, можете подключиться к ней после выполнения всего, что вам нужно.
Из sshd_config (5):
Я использовал это один раз, чтобы переопределить scp и обеспечить безопасную загрузку драгоценных камней, не давая каждому пользователю, уполномоченному загружать драгоценные камни, интерактивный доступ, который им не нужен или не нужен.
источник
Один из способов - использовать syslog-ng в качестве демона syslog и настроить его на запуск фона сценария каждый раз, когда совпадает определенная запись в журнале (например, успешный вход в систему ssh).
источник
Проверь это:
Я не верю, что есть способ отключить это. Кто-нибудь еще может это проверить?
источник
/etc/profile
или~/.profile
) зависит от оболочки пользователя, чуть меньше, чемbashrc
. Если ваши пользователи используют bash или что-то подобное, это нормально.