Я пытался регистрировать активность 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 /
, а также сокеты, определенные в rsyslog.conf
/ sftp.conf
Вопрос Я испробовал практически все найденные мной предложения. Что мне может не хватать в моих настройках для регистрации chrooted-пользователей?
Ваше предположение, что / 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
.
Если вы не используете 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