2013-08-13 5 views
10

Ich versuche einen SSHFTP-Server einzurichten, und bei Verbindung über apache @ localhost werde ich sofort mit einem "Write Failed: Broken Pipe" getrennt Fehlermeldung. Ich kann gut mit [email protected] verbinden, aber nicht der Benutzer apache. "Write Failed: Broken Pipe" beim Versuch, mich über ssh mit einem bestimmten Benutzer anzumelden

Dies sind die einzigen Einstellungen, die ich hinzugefügt sshd_config (Ich will nur Apache erlauben, wenn ich es in Betrieb):

Match User apache 
    ChrootDirectory /apache 
    AllowTCPForwarding no 
    X11Forwarding no 
    ForceCommand /usr/lib/openssh/sftp-server 
Match 
#AllowUsers apache 

Und das ist, was ich ssh_config hinzugefügt:

ServerAliveInterval 120 
TCPKeepAlive no 

Ich stellte sicher, dass der Benutzer-Apache volle Berechtigungen für den/apache-Ordner hatte, und ich kann mich als dieser Benutzer fein anmelden und Elemente in Terminal ändern. Der Ordner hat nur 2 Dateien: index.html und test.php

Ich ging auch zu einem anderen Computer im Netzwerk und verwendete FileZilla als Benutzer jack anmelden. Es hat gut funktioniert.

Dies ist das Protokoll des Terminals, wenn ich versuche, eine Verbindung herzustellen.

[email protected]:~$ ssh -v [email protected] 
OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012 
debug1: Reading configuration data /etc/ssh/ssh_config 
debug1: /etc/ssh/ssh_config line 19: Applying options for * 
debug1: Connecting to localhost [127.0.0.1] port 22. 
debug1: Connection established. 
debug1: identity file /home/jack/.ssh/id_rsa type -1 
debug1: identity file /home/jack/.ssh/id_rsa-cert type -1 
debug1: identity file /home/jack/.ssh/id_dsa type -1 
debug1: identity file /home/jack/.ssh/id_dsa-cert type -1 
debug1: identity file /home/jack/.ssh/id_ecdsa type -1 
debug1: identity file /home/jack/.ssh/id_ecdsa-cert type -1 
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.9p1 Debian-5ubuntu1.1 
debug1: match: OpenSSH_5.9p1 Debian-5ubuntu1.1 pat OpenSSH* 
debug1: Enabling compatibility mode for protocol 2.0 
debug1: Local version string SSH-2.0-OpenSSH_5.9p1 Debian-5ubuntu1.1 
debug1: SSH2_MSG_KEXINIT sent 
debug1: SSH2_MSG_KEXINIT received 
debug1: kex: server->client aes128-ctr hmac-md5 none 
debug1: kex: client->server aes128-ctr hmac-md5 none 
debug1: sending SSH2_MSG_KEX_ECDH_INIT 
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY 
debug1: Server host key: ECDSA bb:f3:74:9d:97:80:89:dc:d9:68:53:5c:f7:25:19:4e 
debug1: Host 'localhost' is known and matches the ECDSA host key. 
debug1: Found key in /home/jack/.ssh/known_hosts:1 
debug1: ssh_ecdsa_verify: signature correct 
debug1: SSH2_MSG_NEWKEYS sent 
debug1: expecting SSH2_MSG_NEWKEYS 
debug1: SSH2_MSG_NEWKEYS received 
debug1: Roaming not allowed by server 
debug1: SSH2_MSG_SERVICE_REQUEST sent 
debug1: SSH2_MSG_SERVICE_ACCEPT received 
debug1: Authentications that can continue: publickey,password 
debug1: Next authentication method: publickey 
debug1: Trying private key: /home/jack/.ssh/id_rsa 
debug1: Trying private key: /home/jack/.ssh/id_dsa 
debug1: Trying private key: /home/jack/.ssh/id_ecdsa 
debug1: Next authentication method: password 
[email protected]'s password: 
debug1: Authentication succeeded (password). 
Authenticated to localhost ([127.0.0.1]:22). 
debug1: channel 0: new [client-session] 
debug1: Requesting [email protected] 
debug1: Entering interactive session. 
Write failed: Broken pipe 
[email protected]:~$ 

Ubuntu Version Info:

Distributor ID: Ubuntu 
Description: Ubuntu 12.04.2 LTS 
Release: 12.04 
Codename: precise 

Edit:

ich den Befehl sudo grep -ir ssh /var/log/* und bekam das lief:

/var/log/auth.log~:Aug 13 16:08:15 JacksServer sshd[32292]: fatal: bad ownership or modes for chroot directory "/apache" 
/var/log/auth.log~:Aug 13 16:08:15 JacksServer sshd[32156]: pam_unix(sshd:session): session closed for user apache 

ich chmod 755 /apache tun versucht, wie einige Websites vorgeschlagen haben, und Besitzerwechsel, aber ich bekomme immer noch diesen Fehler. Der Ordner gehört derzeit dem Benutzer apache.

Einige weitere Informationen über die Apache-Benutzer:

[email protected]:/apache# ls -la /apache 
total 24 
drwxr-xr-x 4 apache root 4096 Aug 13 15:49 . 
drwxr-xr-x 29 root root 4096 Aug 13 03:06 .. 
drwxr-xr-x 2 apache nogroup 4096 Aug 13 13:57 .cache 
-rw-r--r-- 1 apache root  5 Aug 13 03:56 index.html 
-rw-r--r-- 1 apache root  0 Aug 13 03:56 index.html~ 
drwxr-xr-x 8 apache root 4096 Aug 13 15:51 .ssh 
-rw-r--r-- 1 apache root  20 Aug 13 03:59 test.php 
-rw-r--r-- 1 apache root  0 Aug 13 03:59 test.php~ 
[email protected]:/apache# ls -la /apache/.ssh 
total 92 
drwxr-xr-x 8 apache root 4096 Aug 13 15:51 . 
drwxr-xr-x 4 apache root 4096 Aug 13 15:49 .. 
-rw-r--r-- 1 apache jack 220 Jun 6 20:08 .bash_logout 
drwxr-xr-x 19 apache jack 4096 Aug 13 15:04 .cache 
drwxr-xr-x 3 apache jack 4096 Jun 6 20:49 .compiz-1 
drwxr-xr-x 3 apache jack 4096 Jun 6 20:22 .dbus 
drwxr-xr-x 5 apache jack 4096 Aug 13 05:37 .gconf 
-rw-r----- 1 apache jack  0 Aug 13 15:47 .gksu.lock 
drwxr-xr-x 3 apache jack 4096 Jun 6 20:22 .local 
-rw-r--r-- 1 apache jack 675 Jun 6 20:08 .profile 
-rw------- 1 apache jack 256 Jun 6 20:22 .pulse-cookie 
drwxr-xr-x 2 apache jack 4096 Aug 13 14:20 .ssh 
-rw------- 1 apache jack 56 Aug 13 04:45 .Xauthority 
-rw------- 1 apache jack 44215 Aug 13 13:54 .xsession-errors 
+1

Zeigen Sie uns 'ls -la/apache'' ls -la/apache/.ssh' (beide vorausgesetzt, dass '/ apache' das Home-Verzeichnis für diesen Benutzer ist und der Eintrag '/ etc/passwd' für Apache. – mnagel

+1

Ich habe die Ergebnisse dieser Befehle zum ursprünglichen Beitrag hinzugefügt./Apache ist das Home-Verzeichnis des Benutzer-Apache. –

+1

OK nach dem Spielen mit den Berechtigungen, machte ich den Ordner von root gesteuert und chmoded es 755. Jetzt bekomme ich die Fehler '/ bin/false: Keine solche Datei oder Verzeichnis' –

Antwort

23

Die Antworten sowohl in diesem Thread sind: https://askubuntu.com/questions/134425/how-can-i-chroot-sftp-only-ssh-users-into-their-homes

„Grundsätzlich ist das chroot Verzeichnis hat im Besitz von root werden und nicht sein kann Gruppenschreibzugriff. "

Das würde bedeuten, dass Sie sicherstellen müssen, dass Ihr ChrootDirectory (/apache) im Besitz von root ist und nicht von irgendeiner Gruppe/anderen beschreibbar ist. Dies liegt an einigen obskuren Sicherheitsrisiken, die mit setuid in Zusammenhang stehen outlined here.

Auch, um die Frage zu /bin/false: No such file or directory zu beantworten: Verwenden Sie stattdessen /sbin/nologin.

+0

Ja, ich hätte meine eigene Frage beantworten sollen So stelle ich es mit Apache und sftp ein:/apache ist 755,/apache/www ist 775 und/apache/www/public_html ist die oberste Ebene der Website set/apache rekursiv von 'root: website-apache' zu ​​besitzen (website-apache enthält nur den Benutzer apache). –

+0

Du bist der Gott !! Danke, dass du mein Leben gerettet hast – chuyik

1

als eine andere Antwort Posted aufgrund zu lang:

In meinen Erkenntnissen ist diese Forderung von ChrootDirectory es ziemlich nutzlos macht. Warum sollte das Home-Verzeichnis von jemandem für diesen Benutzer nicht schreibbar sein? Lame. Symlinks sind auch in Chroot Dirs nicht zugänglich.

Allerdings - ich fand eine nette Problemumgehung. Ich habe ein /home/chroot/outsource Verzeichnis erstellt, und darin habe ich mount --bind verwendet, um ein anderes Verzeichnis im System /var/www/clients/theclient zu /home/chroot/outsource/theclient zu mounten.

Als mount --bind bis zum Neustart nur vorübergehend ist, habe ich diese Zeile in /etc/fstab:

/var/www/clients/theclient /home/chroot/outsource/theclient none bind,auto,user,noexec 0 0

2

Ich habe mein Problem in Mac OS X zu lösen, ich habe die

geändert
#ClientAliveInterval 0 

zu

ClientAliveInterval 300 

in/etc/ss hd_config folgende this, und starten Sie den Rechner neu, fertig.

Verwandte Themen