Chroot-Konfiguration

Chroot-Konfiguration

Ich möchte SFTP-Befehle in einer separaten Datei protokollieren, dies funktioniert jedoch nur für rootChroot-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 /sftpund 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: -

  1. Erzwingt, dass alle Benutzer, die sich über SSH auf Port 22 verbinden, nur SFTP verwenden.
  2. Führt ihre SFTP-Sitzung in einem Chroot-Jail im Verzeichnis aus/sftp/$USER
  3. Verhindert die TCP- oder X11-Weiterleitung von Verbindungen
  4. Führt den internen SFTP-Server aus und veranlasst die ausführliche Protokollierung und den Syslog-KanalnamenLOCAL6

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/logda 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 /sftphandelt es sich um ein separates SFTP-Dateisystem.

Für Redhat

Unter Redhat wird Syslog verwendet, daher habe ich /etc/sysconfif/syslogdie 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 LOCAL6die /var/log/sftp.logDatei 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.confFolgendes 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 deviceerstellt werden:

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

--Zitat Ende--

verwandte Informationen