Назад | Перейти на главную страницу

SFTP: логировать в отдельный файл для пользователя с root-доступом

Я хотел бы записывать команды SFTP в отдельный файл, но он работает только для root но не для chrooted пользователя:

# cat /etc/ssh/sshd_config
...
Subsystem       sftp    internal-sftp -l INFO
Match Group user1
   ChrootDirectory /chroot
   ForceCommand internal-sftp -l INFO
   AllowTcpForwarding no
   X11Forwarding no

-

По умолчанию используется AUTH в соответствии с страница руководства

# cat /etc/rsyslog.d/sshd.conf
auth.* /var/log/sftp.log

-

tail -F /var/log/secure /var/log/sftp.log

==> /var/log/secure <==
Dec 27 12:35:09 lab sshd[43014]: Accepted publickey for root from 192.168.1.100 port 44706 ssh2
Dec 27 12:35:09 lab sshd[43014]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 27 12:35:09 lab sshd[43014]: subsystem request for sftp

==> /var/log/sftp.log <==
Dec 27 12:35:09 lab internal-sftp[43016]: session opened for local user root from [192.168.1.100]
Dec 27 12:35:10 lab internal-sftp[43016]: opendir "/root/"
Dec 27 12:35:10 lab internal-sftp[43016]: closedir "/root/"
Dec 27 12:35:27 lab internal-sftp[43016]: session closed for local user root from [192.168.1.100]

==> /var/log/secure <==
Dec 27 12:35:27 lab sshd[43014]: Received disconnect from 192.168.1.100: 11: disconnected by user
Dec 27 12:35:27 lab sshd[43014]: pam_unix(sshd:session): session closed for user root
Dec 27 12:35:31 lab sshd[43017]: Accepted password for user1 from 192.168.1.100 port 44708 ssh2
Dec 27 12:35:31 lab sshd[43017]: pam_unix(sshd:session): session opened for user user1 by (uid=0)
Dec 27 12:35:31 lab sshd[43019]: subsystem request for sftp
Dec 27 12:35:31 lab sshd[43020]: session opened for local user user1 from [192.168.1.100]
Dec 27 12:35:31 lab sshd[43020]: opendir "/"
Dec 27 12:35:31 lab sshd[43020]: closedir "/"

РЕДАКТИРОВАТЬ: Пн, 30 декабря, 11:40:18 по Гринвичу 2013 г.

Система: CentOS 6.5

Я добавил следующие параметры, однако события по-прежнему регистрируются в файле журнала / var / log / secure:

# id user1
uid=501(user1) gid=501(user1) groups=501(user1)
# mkdir /chroot/dev
# cat /etc/rsyslog.d/sshd.conf
$AddUnixListenSocket /chroot/dev/log
auth.* /chroot/dev/sftp.log
# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
# ll /chroot/dev/
total 0
srw-rw-rw- 1 root   root   0 Dec 30 11:44 log
-rw------- 1 nobody nobody 0 Dec 30 11:39 sftp.log

В соответствии с эта ссылка Я считаю, что вы соответствуете одному из трех критериев для ведения подробного журнала пользователей chrooted sftp:

  • подробное ведение журнала должно быть настроено в конфиге sftpd. Похоже, вы сделали это с помощью "ForceCommand internal-sftp -l INFO" директива.
  • файл журнала должен быть указан внутри chrooted каталога, так как chrooted пользователь не имеет разрешения на запись в каталог / var / log.
  • сокет журналирования должен быть добавлен в rsyslogd, чтобы облегчить запись в новый файл журнала.

Сравнение других ссылок, таких как эта общая инструкция и эта инструкция CentOS похоже, что точная конфигурация немного различается между дистрибутивами в отношении предпочтительных имен пользовательских каталогов для пути ведения журнала, точного файла, в котором следует разместить конфигурацию сокета регистрации и выражения конфигурации сокета регистрации.

[РЕДАКТИРОВАТЬ] Mon Dec 30 21:50:00 GMT 2013

В настоящее время у меня нет доступа к CentOS, но я нашел отличное руководство по ссылке на странице CentOS выше. Ссылка не работает, но я мог получить доступ к странице через Waybackmachine. Но поскольку руководство, похоже, может исчезнуть, я сейчас намеренно скопирую части, относящиеся к вашим вопросам, в великолепную цитату ниже. Надеюсь, это поможет вам, но, как было сказано, на данный момент у меня нет средств для тестирования используемого вами дистрибутива.

Похоже, что вы сделали некоторые вещи по-другому, поэтому скрестив пальцы, вы найдете золото ниже.

--Начать цитату из bigmite.com в Waybackmachine-


Конфигурация Chroot

В этом примере я собираюсь настроить группу пользователей, которым требуется только доступ по SFTP (без SSH), и которые будут копировать файлы в файловую систему на сервере SFTP. Расположение файловой системы будет /sftp и пользователи будут находиться в отдельных папках здесь.

Первоначально должна быть создана новая группа, здесь она называется “sftpuser”. Каждый пользователь, которому требуется доступ по SFTP, будет помещен в эту группу.

В sshd_config (на debian в /etc/ssh) следует отредактировать и добавить в конце следующее: -

Match group sftpuser
 ChrootDirectory /sftp/%u
 X11Forwarding no
 AllowTcpForwarding no
 ForceCommand internal-sftp -l VERBOSE -f LOCAL6

Это делает следующее: -

  1. Заставляет всех пользователей, подключающихся через ssh к порту 22, использовать только sftp
  2. Запускает сеанс sftp в chroot-тюрьме в каталоге /sftp/$USER
  3. Предотвращает их TCP из X11 пересылки соединений
  4. Запускает внутренний sftp-сервер, заставляя его вести подробный журнал и записывать имя канала syslog LOCAL6

Теперь пользователь должен быть создан без создания домашнего каталога и в группе по умолчанию. sftpuser. В Ubuntu вы можете ввести: -

(Разрыв строки добавлен мной для удобства чтения! / E)

adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1

Причина, по которой домашний каталог установлен на / в том, что sftp будет chroot для /sftp/testuser1. Затем необходимо создать домашний каталог пользователей: -

mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in

Обратите внимание, что структура каталогов и установленные вами разрешения могут отличаться в зависимости от ваших требований. Необходимо установить пароль пользователя и перезапустить sshd (в debian service ssh restart).

Теперь должна быть возможность отправлять sftp-файлы на хост с помощью инструмента sftp командной строки, но не должно быть возможности ssh на сервер как пользователь testuser1.

логирование

Вы увидите подробное ведение журнала sftp в /var/logmessages для каждого пользователя chroot, где по умолчанию это должно быть daemon.log. Причина этого в том, что chroot-процесс sftp не может открыться /dev/log так как это не в chrooted файловой системе.

В зависимости от конфигурации файловой системы есть два решения этой проблемы.

Если каталог sftp пользователя / sftp / user находится в корневой файловой системе

Вы можете создать жесткую ссылку для имитации устройства: -

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log

Если каталог sftp пользователя НЕ находится в корневой файловой системе

Для первого syslog или rsyslog потребуется дополнительный сокет журналирования в файловой системе пользователя. Для моего примера /sftp это отдельная файловая система sftp.

Для Redhat

На redhat используется системный журнал, поэтому я изменил /etc/sysconfif/syslog так что строка: -

SYSLOGD_OPTIONS="-m 0"

читает: -

SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket

Наконец, демону syslog нужно указать, чтобы он регистрировал сообщения для LOCAL6 к /var/log/sftp.log файл, поэтому в /etc/syslog.conf: -

# For SFTP logging
local6.*                        /var/log/sftp.log

и системный журнал был перезапущен.

Для Ubuntu Lucid

На Ubuntu lucid я создал /etc/rsyslog.d/sshd.conf содержащий: -

# Create an additional socket for some of the sshd chrooted users.
$AddUnixListenSocket /sftp/sftp.log.socket
# Log internal-sftp in a separate file
:programname, isequal, "internal-sftp" -/var/log/sftp.log
:programname, isequal, "internal-sftp" ~

… И перезапустил rsyslogd.

Создание устройств журналов для пользователей

Теперь для каждого пользователя /dev/log device необходимо создать: -

mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log

--Конец цитаты -