SFTP og chroot
Jeg har brug for at oprette en SFTP-server, hvor brugerne kun kan fedte rundt blandt deres egne filer. Det skal være så restriktivt at de end ikke kan se navnet på andre oprettede bruger-biblioteker.
Jeg har været vidt omkring på Google og har prøvet lidt af hvert - men intet tilfredsstiller mine behov. Nu er jeg endt med at oprette en bruger 'testuser' og har tilføjet flg. i /etc/ssh/sshd_config:
/etc/passwd:
Jeg har oprettet biblioteket /ftpusers/home/testuser.
Udover at dette formentlig kun er en delvis løsning (idet 'testuser' kan browse rundt i de andre home's under /ftpusers), så kan jeg heller ikke få det til at virke ordentligt.
Jeg kan forbinde med:
sftp testuser@host
, men hvis jeg forsøger noget så simpelt som en 'ls'-kommando får jeg beskeden: "Couldn't get handle: Permission denied".
Kort sagt: hjælp! Hvordan får jeg lavet min SFTP-server?
Et eksempel på /var/log/messages når jeg forsøger med en 'ls' efter SFTP-login:
Jeg har været vidt omkring på Google og har prøvet lidt af hvert - men intet tilfredsstiller mine behov. Nu er jeg endt med at oprette en bruger 'testuser' og har tilføjet flg. i /etc/ssh/sshd_config:
Subsystem sftp internal-sftp
#Subsystem sftp /usr/libexec/openssh/sftp-server
Match user testuser
ChrootDirectory /ftpusers
ForceCommand internal-sftp
AllowTcpForwarding no
GatewayPorts no
X11Forwarding no
/etc/passwd:
testuser:x:581:581::/home/testuser:/bin/bash
Jeg har oprettet biblioteket /ftpusers/home/testuser.
Udover at dette formentlig kun er en delvis løsning (idet 'testuser' kan browse rundt i de andre home's under /ftpusers), så kan jeg heller ikke få det til at virke ordentligt.
Jeg kan forbinde med:
sftp testuser@host
, men hvis jeg forsøger noget så simpelt som en 'ls'-kommando får jeg beskeden: "Couldn't get handle: Permission denied".
Kort sagt: hjælp! Hvordan får jeg lavet min SFTP-server?
Et eksempel på /var/log/messages når jeg forsøger med en 'ls' efter SFTP-login:
Apr 7 04:14:10 [HOSTNAME] kernel: type=1400 audit(1270606450.634:9887): avc: denied { read } for pid=4549 comm="sshd" name="testuser" dev=sda2 ino=106954 scontext=unconfined_u:system_r:sshd_t:s0-s0:c0.c1023 tcontext=system_u:object_r:default_t:s0 tclass=dir
Kommentarer6
Re: SFTP og chroot
/kajo
Tak for svar :)
Har du eksempler på din sshd_config og /etc/passwd, som jeg må se?
Re: SFTP og chroot
Til forskel fra dig, så benytter jeg mig af en gruppe, som jeg tilknytter forskellige brugere til. Jeg fik det aldrig til at virke kun med regler for brugere, da dette virker for mig så er jeg aldrig gået videre.
Her er de direkte "sakset" ind:
Først redigeres /etc/ssh/sshd_config til at benytte internal SFTP subsystem.
§ sudo nano /etc/ssh/sshd_config
Flg linie tilføjes under subsystem:
Subsystem sftp internal-sftp
Derefter oprettes en grupperegel nederst:
Match group (gruppen)
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Nu er conf-filen færdig. Der gemmes med Ctrl + X
For at reglen virker skal gruppen, som benyttes i sshd_conf oprettes. Dette gøres med:
§ sudo groupadd (gruppe)
Herefter skal der oprettes brugere. Dette gøres med flg kommando, som samtidig opretter en hjemmemappe i /home:
§ sudo useradd -m (brugernavn)
Så skal brugeren have et password:
§ passwd (brugernavn)
Nu skal SSH-chroot sættes op, så brugeren kun har adgang til sin egen mappe, samt tilføj vedkommende til en gruppe.
§ chown root.root /home/(brugernavn)
§ usermod -d / (brugernavn)
§ adduser (brugernavn) (gruppe)
For at brugeren kan bruge sit /home til noget skal man som root oprette mappe(r) i /home/(bruger)/, som brugeren kan benytte
§ sudo mkdir /home/(bruger)/nymappe
Derefter gives de rigtige tilladelser til mappen /home/(bruger)/nymappe så brugeren har rettigheder til at læse, skrive og ændre filer:
§ chmod 777 /home/(bruger)/nymappe
Hvis der er noget jeg ikke har beskrevet godt nok, så spørg endelig (jeg kan have glemt at skrive noget ned, men kan huske det ;-)
Hej Kajo, Tak for indsatsen
Tak for indsatsen :) Det hele ligner noget jeg har prøvet, men ved førstkommende lejlighed vil jeg lige prøve det igen med et frisk sind.
Kan du ikke prøve at gengive en linje fra din /etc/passwd fil? Altså bare for een af de brugere, som kører gennem chroot. At dømme ud fra de kommandoer, du har nævnt, burde der dog ikke være noget specielt i den...
EDIT: Ahh, detalje: du bruger usermod for at rette brugerens hjemmebibliotek. Det burde kunne ses i /etc/passwd - som jeg stadig håber du vil vise et brudstykke af.
Hej igen,
Et uddrag af min
Et uddrag af min /etc/passwd:
familie:x:1006:1007::/:/bin/sh
test:x:1007:1008::/:/bin/sh
fælles:x:1008:1009::/:/bin/sh
Og de sidste linier i /etc/ssh/sshd_config:
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
UsePAM yes
Match group sftp
ChrootDirectory /home/%u
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
Jeg kan kun sige, at hvis du følger guiden slavisk, så virker chroot af ssh/sftp adgangen. Jeg kæmpede ligesom dig en kamp for at få det til at virke.
Problem løst
Nu har jeg slået SElinux fra og alt ser ud til at fungere efter hensigten.