Это можно сделать с помощью PAM и модуля pam_exec.so
.
Вы просто добавляете строку в /etc/pam.d/sshd
в раздел «сеанс», например:
session optional pam_exec.so /usr/local/bin/ipset-ssh
Где ipset-ssh
- это какой-то скрипт вы создаете.
Скрипт будет запущен от имени пользователя root. Вы можете получить IP-адрес клиента с помощью переменной PAM_RHOST
. Вы также захотите проверить переменную PAM_TYPE
, поскольку ваш сценарий будет выполняться как при входе в систему, так и при выходе из системы. При входе в систему PAM_TYPE
будет установлен на open_session
. При выходе из системы устанавливается значение close_session
.
Вот полный список переменных, которые я получил в результате простого теста (я поместил env> / tmp / pamenv
в скрипт):
PAM_SERVICE=sshd
PAM_RHOST=127.0.0.1
GNOME_KEYRING_CONTROL=/home/phemmer/.cache/keyring-vJUUda
PAM_USER=phemmer
PWD=/
GNOME_KEYRING_PID=19742
SHLVL=1
PAM_TYPE=open_session
PAM_TTY=ssh
_=/usr/bin/env
Ваш скрипт может быть таким простым, как:
#!/bin/bash
[[ "$PAM_TYPE" == "open_session" ]] && ipset add whitelist $PAM_RHOST
Смонтируйте iso as loop, для этого в первую очередь включите модуль loop в вашей системе с помощью:
modprobe loop
После этого вам нужно будет смонтировать iso как цикл, используя этот синтаксис:
mount -o loop isoname.iso mountpoint
Пример:
mount -o loop isoname.iso /mnt
Вы уведомите, что iso-контент доступен только для чтения -, поэтому, если вы хотите иметь полный доступ к контенту, лучше всего скопировать его из точки монтирования с помощью rsync .
Пример:
rsync -a -H --exclude=TRANS.TBL /mnt /new_mount_point