Ведение журнала активности пользователя Chrooted SFTP

Я пытался регистрировать активность SFTP пользователем Chrooted. Мне пока не удалось зарегистрировать ни одной строчки ни для одного пользователя chrooted. Для обычных пользователей работает.

Мои текущие настройки:

/ etc / ssh / sshd_config:

Subsystem sftp internal-sftp -f AUTH -l VERBOSE

ClientAliveInterval 180
PasswordAuthentication no

Match Group sftpclients
ChrootDirectory /home/sftp/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp -f AUTH -l VERBOSE

/etc/rsyslog.conf:

$AddUnixListenSocket        /home/sftp.log.socket
$AddUnixListenSocket        /home/sftp/dev/log.socket
$AddUnixListenSocket        /home/sftp/user1/dev/log.socket
$AddUnixListenSocket        /home/sftp/user2/dev/log.socket

:programname, isequal, "internal-sftp" -/var/log/sftp2.log
:programname, isequal, "internal-sftp" ~

/etc/rsyslog.d/sftp.conf:

 input(type="imuxsock" Socket="/home/sftp/log2.socket" CreatePath="on")
 if $programname == 'internal-sftp' then /var/log/sftp3.log

У каждого пользователя есть свои // dev / каталог, связанный с / dev: mount --bind / dev / home / sftp / / dev , а также сокеты, определенные в rsyslog.conf / sftp.conf

Вопрос Я испробовал практически все найденные мной предложения. Что мне может не хватать в моих настройках для регистрации chrooted-пользователей?

1
задан 16 October 2017 в 10:24
2 ответа

Ваше предположение, что / dev / log - это файл, к которому можно предоставить общий доступ через привязку / dev , неверно для большинства современных дистрибутивов Linux, использующих systemd . Следовательно, монтирование ваших систем / dev в chroot не имеет большого значения.

$ file /dev/log
/dev/log: symbolic link to /run/systemd/journal/dev-log

Поскольку / run недоступен в этом качестве в chroot ( и не должен быть ), sftp-server попытка записи в / dev / log будет считать, что символическая ссылка сломана.

Вместо этого используйте вход (type = "imuxsock" Socket = "/ opt / bindmount / dev / log") для создания дополнительного сокета (который затем можно связать-монтировать так, чтобы все chroot видели его в / dev / log ).

Обычно вы не должны совместно использовать полный / dev в любом случае доступ к chroot, весь смысл chroot ограничивает поверхность атаки.


Бонус: вы можете написать свой /etc/rsyslog.d/10-sftp.conf конфиг следующим образом (фильтр по "имя хоста", которое вы можете выбрать произвольно)

input(type="imuxsock" Socket="/opt/bindmount/dev/log", HostName="sftp")
if $hostname == 'sftp' then /var/log/sftp.log
&stop

Это означает, что если вы развертываете другие chroot, ограниченные другими командами (например, git-shell ), вы все равно можете получать все сообщения от chroot в том же месте, даже если другие программы пишут t o / dev / log .

1
ответ дан 3 December 2019 в 23:25

Если вы не используете rsyslogd и используете только journald из systemd, вы можете сделать следующее (источник https://wiki.archlinux.org/index.php/SFTP_chroot#Logging )

(Замените на chroot-путь, настроенный в openssh, то есть: в вашем случае: / home / sftp /% u )

# mkdir /<OPENSSH_CHROOT_PATH>/dev
# chmod 755 /<OPENSSH_CHROOT_PATH>/dev
# touch /<OPENSSH_CHROOT_PATH>/dev/log

И подключите сокет journald с помощью:

# mount --bind /run/systemd/journal/dev-log /<OPENSSH_CHROOT_PATH>/dev/log

И если он вам нужен постоянно, не забудьте добавить это монтирование привязки в ваш / etc / fstab с помощью:

/ etc / fstab:

(…)
/run/systemd/journal/dev-log /<OPENSSH_CHROOT_PATH>/dev/log none bind   0   0
(…)

Теперь вы можете видеть ведение журнала внутреннего sftp с помощью journalctl:

# journalctl -f
2
ответ дан 19 March 2020 в 09:16

Теги

Похожие вопросы