Ich möchte SFTP-Befehle in einer separaten Datei protokollieren, dies funktioniert jedoch nur für root
Chroot-Benutzer, nicht jedoch für solche:
# 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
-
Die Standardeinrichtung ist AUTH gemäßmanpage
# 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 "/"
BEARBEITEN: Montag, 30. Dezember 2013, 11:40:18 GMT
System: CentOS 6.5
Ich habe die folgenden Optionen hinzugefügt, Ereignisse werden jedoch weiterhin in der Protokolldatei /var/log/secure protokolliert:
# 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
Antwort1
Entsprechenddieser LinkIch glaube, Sie erfüllen eines der drei Kriterien für eine detaillierte Protokollierung von Chroot-SFTP-Benutzern:
- detaillierte Protokollierung muss in der sftpd-Konfiguration konfiguriert werden. Sie scheinen dies mithilfe der„ForceCommand internal-sftp -l INFO“Richtlinie.
- Innerhalb des Chroot-Verzeichnisses muss eine Protokolldatei angegeben werden, da ein Chroot-Benutzer keine Schreibberechtigung für das Verzeichnis /var/log hat.
- Um die Protokollierung in die neue Protokolldatei zu erleichtern, muss rsyslogd ein Protokollierungssocket hinzugefügt werden.
Vergleichen Sie andere Links wiediese allgemeine AnweisungUnddiese CentOS-Anweisunges scheint, dass die genaue Konfiguration hinsichtlich der bevorzugten benutzerdefinierten Verzeichnisnamen für den Protokollierungspfad, der genauen Datei, in der die Protokollierungs-Socket-Konfiguration abgelegt werden soll, und des Ausdrucks der Protokollierungs-Socket-Konfiguration zwischen den Distributionen leicht variiert.
[BEARBEITEN] Mon Dec 30 21:50:00 GMT 2013
Ich habe im Moment keinen Zugriff auf ein CentOS, habe aber in einem Link auf der CentOS-Seite oben eine anscheinend hervorragende Anleitung gefunden. Der Link ist defekt, aber ich konnte die Seite über denWaybackmachine. Da die Anleitung aber Gefahr läuft, zu verschwinden, kopiere ich jetzt einfach die für Ihre Fragen relevanten Teile in einem großartigen Zitat unten. Hoffentlich hilft es Ihnen, aber wie gesagt, im Moment habe ich keine Möglichkeit, es auf der von Ihnen verwendeten Distribution zu testen.
Es scheint, als hätten Sie einige Dinge anders gemacht, also drücken wir die Daumen, dass Sie unten fündig werden.
--Zitat beginnen vonbigmite.com in der Waybackmachine--
Chroot-Konfiguration
In diesem Beispiel werde ich eine Gruppe von Benutzern einrichten, die nur SFTP-Zugriff benötigen (kein SSH) und Dateien in ein Dateisystem auf einem SFTP-Server kopieren. Der Speicherort des Dateisystems wird sein /sftp
und die Benutzer werden in separaten Ordnern darunter untergebracht.
Zunächst sollte eine neue Gruppe erstellt werden, hier genannt “sftpuser”
. Jeder Benutzer, der SFTP-Zugriff benötigt, wird dieser Gruppe zugeordnet.
Das sshd_config
(unter Debian in /etc/ssh
) sollte bearbeitet und am Ende Folgendes hinzugefügt werden: -
Match group sftpuser
ChrootDirectory /sftp/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp -l VERBOSE -f LOCAL6
Dies bewirkt Folgendes: -
- Erzwingt, dass alle Benutzer, die sich über SSH auf Port 22 verbinden, nur SFTP verwenden.
- Führt ihre SFTP-Sitzung in einem Chroot-Jail im Verzeichnis aus
/sftp/$USER
- Verhindert die TCP- oder X11-Weiterleitung von Verbindungen
- Führt den internen SFTP-Server aus und veranlasst die ausführliche Protokollierung und den Syslog-Kanalnamen
LOCAL6
Jetzt sollte ein Benutzer erstellt werden, ohne ein Home-Verzeichnis zu erstellen und in der Standardgruppe sftpuser
. Unter Ubuntu können Sie Folgendes eingeben: -
(Zeilenumbruch von mir zur besseren Lesbarkeit hinzugefügt! /E)
adduser --home / --gecos "First Test SFTP User" --group sftpuser --no-create-home
--shell /bin/false testuser1
Der Grund, warum das Home-Verzeichnis auf eingestellt ist, /
ist, dass das SFTP auf chrootet /sftp/testuser1
. Als nächstes muss das Home-Verzeichnis des Benutzers erstellt werden: -
mkdir /sftp/testuser1
chmod 755 /sftp/testuser1
mkdir /sftp/tstuser1/in
mkdir /sftp/testuser1/out
chown testuser1 /sftp/testuse1/in
Beachten Sie, dass die Verzeichnisstruktur und die Berechtigungen, die Sie festlegen, je nach Ihren Anforderungen unterschiedlich sein können. Das Benutzerkennwort sollte festgelegt und SSHD neu gestartet werden (unter Debian service ssh restart
).
Jetzt sollte es möglich sein, Dateien mithilfe des SFTP-Befehlszeilentools per SFTP auf den Host zu übertragen, es sollte jedoch nicht möglich sein, als Benutzer per SSH auf den Server zuzugreifen testuser1
.
Protokollierung
Sie werden sehen, dass für jeden chroot-Benutzer eine ausführliche SFTP-Protokollierung erstellt wird /var/logmessages
, die standardmäßig an gehen sollte daemon.log
. Der Grund dafür ist, dass der chroot-SFTP-Prozess nicht geöffnet werden kann, /dev/log
da er sich nicht innerhalb des chroot-Dateisystems befindet.
Für dieses Problem gibt es, abhängig von der Dateisystemkonfiguration, zwei Lösungen.
Wenn sich das SFTP-Verzeichnis des Benutzers /sftp/user im Stammdateisystem befindet
Sie können einen Hardlink erstellen, um das Gerät zu imitieren: -
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /dev/log /sftp/testuser1/dev/log
Wenn sich das SFTP-Verzeichnis des Benutzers NICHT im Stammdateisystem befindet
Zunächst muss syslog oder rsyslog einen zusätzlichen Logging-Socket im Dateisystem des Benutzers verwenden. In meinem Beispiel /sftp
handelt es sich um ein separates SFTP-Dateisystem.
Für Redhat
Unter Redhat wird Syslog verwendet, daher habe ich /etc/sysconfif/syslog
die folgende Zeile geändert: -
SYSLOGD_OPTIONS="-m 0"
lautet:-
SYSLOGD_OPTIONS="-m 0 -a /sftp/sftp.log.socket
Schließlich muss dem Syslog-Daemon mitgeteilt werden, dass er Nachrichten in LOCAL6
die /var/log/sftp.log
Datei protokollieren soll. Daher wurde Folgendes hinzugefügt /etc/syslog.conf
: -
# For SFTP logging
local6.* /var/log/sftp.log
und Syslog wurde neu gestartet.
Für Ubuntu Lucid
Auf Ubuntu Lucid habe ich /etc/rsyslog.d/sshd.conf
Folgendes erstellt:
# 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" ~
… und rsyslogd neu gestartet.
Erstellen von Protokollgeräten für Benutzer
Jetzt muss für jeden Benutzer Folgendes /dev/log device
erstellt werden:
mkdir /sftp/testuser1/dev
chmod 755 /sftp/testuser1/dev
ln /sftp/sftp.log.socket /sftp/testuser1/dev/log
--Zitat Ende--