Kein Ding, kann ich machen. Ist für mich noch mal eine Wiederholung, dann sitzt es wenigstens.
Ich setz' mich heut' Abend nochmal hin und editiere dann entsprechend diesen Beitrag.
Edit:
Ich mach' das ganze mal sehr detailliert, um auch Einsteigern die Installation begreiflich zu machen (man soll ja nicht nur Befehle abtippen, sondern auch wissen, was man tut).
Also, nachdem du dein Linux aufgesetzt hast, öffnest du die Konsole und tippst den Befehl "sudo apt-get install vsftpd" ein (ohne " <- wird sich im weiteren Verlauf nicht ändern). Apt-get ist zur Verwaltung deiner Software. Du kannst damit ebenso Software deinstallieren, Updates beziehen, oder ganz andere Programme installieren. Der Befehl wird dir wahrscheinlich noch öfter über den Weg laufen. Sudo steht für "Superuser do", also der "Admin macht's" mal frei übersetzt. "vsftpd" ist das Programm, dass wir verwenden für den SFTP Server. Ich hab' selbst schon einmal den "sftp-server" verwendet, mit dem lief das alles allerdings nicht wie es sollte.
Meinen SFTP habe ich so konfiguriert, dass man sich nur mit lokalen Benutzern einloggen kann (war von dir meines Wissens nach ja auch so gewünscht). Somit sind die Einstellungen für die Benutzer, wie zum Beispiel der maximal verfügbare Speicherplatz im Linux selbst und nicht im vsftpd vorzunehmen. Dazu kommen wir später.
Jetzt erstmal zur
Konfiguration vom vsftpd.
Nach der Installation läuft der SFTP bereits. Sämtliche konfiguration wird in einer config Datei vorgenommen, die der SFTP-Server beim starten ausliest und entsprechend die Einstellungen vornimmt.
Die config Datei öffnest du über das Terminal mit "sudo nano /etc/vsftpd.conf". Nano ist nichts weiter als ein Texteditor für die Konsole, mit sudo müssen wir das Ganze öffnen, da wir sonst nicht die Berechtigung haben, die Datei zu überschreiben.
Damit man sich über den FTP mit lokalen Benutzern anmelden kann, musst du nach der Zeile "local_enable=NO" suchen und aus dem "NO" ein "YES" machen.
Damit man auch Änderungen in den Ordnern auf'm Server vornehmen kann, darf die Zeile "write_enable=YES" nicht auskommentiert sein (das geschieht durch entfernen des #).
Was mir extrem wichtig war, dass die Nutzer nicht auf meine Systemdaten zugreifen können, oder gar in die Ordner anderer Benutzer schauen können. Also habe ich sie in ihr eigenes Verzeichnis eingesperrt.
Dazu muss "chroot_local_user=YES" gesetzt sein.
Damit wir auch verschlüsselten Datenverkehr haben, müssen wir zum Schluss noch die Zeile "ssl_enable=YES" anhängen. Wenn ich mich recht entsinne, stand diese noch nicht mit drin, hier also mal etwas Schreibarbeit ^^. Es ist danach im übrigen nicht mehr möglich sich Anonym einzuloggen, das geht meines Wissens nach nur mit FTP.
Mit STRG+X schließt du die Datei. Vorm schließen, wirst du gefragt, ob du Speichern möchtest, dies entsprechend bestätigen.
Damit die Änderungen auch übernommen werden, musst du jetzt den Server neu starten. Dies geschieht per "sudo /etc/init.d/vsftpd restart".
Hier noch der Code aus meiner vsftpd.conf:
Code:
# Example config file /etc/vsftpd.conf
#
# The default compiled in settings are fairly paranoid. This sample file
# loosens things up a bit, to make the ftp daemon more usable.
# Please see vsftpd.conf.5 for all compiled in defaults.
#
# READ THIS: This example file is NOT an exhaustive list of vsftpd options.
# Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
# capabilities.
#
#
# Run standalone? vsftpd can run either from an inetd or as a standalone
# daemon started from an initscript.
listen=YES
#
# Run standalone with IPv6?
# Like the listen parameter, except vsftpd will listen on an IPv6 socket
# instead of an IPv4 one. This parameter and the listen parameter are mutually
# exclusive.
#listen_ipv6=YES
#
# Allow anonymous FTP? (Beware - allowed by default if you comment this out).
#anonymous_enable=YES
#
# Uncomment this to allow local users to log in.
local_enable=YES
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
#local_umask=022
#
# Uncomment this to allow the anonymous FTP user to upload files. This only
# has an effect if the above global write enable is activated. Also, you will
# obviously need to create a directory writable by the FTP user.
#anon_upload_enable=YES
#
# Uncomment this if you want the anonymous FTP user to be able to create
# new directories.
#anon_mkdir_write_enable=YES
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# If enabled, vsftpd will display directory listings with the time
# in your local time zone. The default is to display GMT. The
# times returned by the MDTM FTP command are also affected by this
# option.
use_localtime=YES
#
# Activate logging of uploads/downloads.
xferlog_enable=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# If you want, you can arrange for uploaded anonymous files to be owned by
# a different user. Note! Using "root" for uploaded files is not
# recommended!
#chown_uploads=YES
#chown_username=whoever
#
# You may override where the log file goes if you like. The default is shown
# below.
#xferlog_file=/var/log/vsftpd.log
#
# If you want, you can have your log file in standard ftpd xferlog format.
# Note that the default log file location is /var/log/xferlog in this case.
#xferlog_std_format=YES
#
# You may change the default value for timing out an idle session.
#idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
#data_connection_timeout=120
#
# It is recommended that you define on your system a unique user which the
# ftp server can use as a totally isolated and unprivileged user.
#nopriv_user=ftpuser
#
# Enable this and the server will recognise asynchronous ABOR requests. Not
# recommended for security (the code is non-trivial). Not enabling it,
# however, may confuse older FTP clients.
#async_abor_enable=YES
#
# By default the server will pretend to allow ASCII mode but in fact ignore
# the request. Turn on the below options to have the server actually do ASCII
# mangling on files when in ASCII mode.
# Beware that on some FTP servers, ASCII support allows a denial of service
# attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
# predicted this attack and has always been safe, reporting the size of the
# raw file.
# ASCII mangling is a horrible feature of the protocol.
#ascii_upload_enable=YES
#ascii_download_enable=YES
#
# You may fully customise the login banner string:
#ftpd_banner=Welcome to blah FTP service.
#
# You may specify a file of disallowed anonymous e-mail addresses. Apparently
# useful for combatting certain DoS attacks.
#deny_email_enable=YES
# (default follows)
#banned_email_file=/etc/vsftpd.banned_emails
#
# You may restrict local users to their home directories. See the FAQ for
# the possible risks in this before using chroot_local_user or
# chroot_list_enable below.
chroot_local_user=YES
#
# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().
# (Warning! chroot'ing can be very dangerous. If using chroot, make sure that
# the user does not have write access to the top level directory within the
# chroot)
#chroot_local_user=YES
#chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd.chroot_list
#
# You may activate the "-R" option to the builtin ls. This is disabled by
# default to avoid remote users being able to cause excessive I/O on large
# sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
# the presence of the "-R" option, so there is a strong case for enabling it.
#ls_recurse_enable=YES
#
# Customization
#
# Some of vsftpd's settings don't fit the filesystem layout by
# default.
#
# This option should be the name of a directory which is empty. Also, the
# directory should not be writable by the ftp user. This directory is used
# as a secure chroot() jail at times vsftpd does not require filesystem
# access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
ssl_enable=YES
Einrichtung der Benutzer
Jetzt müssen wir die Benutzer einrichten.
Zum Einrichten eines Benutzers tippen wir in der Konsole "sudo adduser username" ein. username wird entsprechend mit dem Namen des neuen Benutzers ersetzt (darf nur Kleinbuchstaben enthalten). Danach wird man nach dem Passwort gefragt.
Für Benutzer, die Zugriff auf alle Dateien haben sollen (also nicht in ihrem Ordner eingesperrt werden), müssen wir (wie auch in meiner vsftpd.conf eingestellt) eine vsftpd.chroot_list erstellen, welche in /etc/ gespeichert sein muss. Wenn man die Standard vsftpd.conf verwendet, muss noch "chroot_list_file=/etc/vsftpd.chroot_list" hinzugefügt werden, beziehungsweise muss man das # an der entsprechenden Stelle entfernen. In diese Datei muss dann einfach nur der Benutzername des entsprechenden Benutzers eingetragen werden.
Zuletzt müssen wir die sshd_config bearbeiten (insofern es ein SFTP und kein FTP wird). Dazu "sudo nano /etc/ssh/sshd_config" ins Terminal eintippen.
Als erstes sollten wir den Port auf 22 setzen. Rein theoretisch kann der Port jede beliebige Zahl sein (nützlich, wenn mehrere FTP Dienste auf einem Gerät laufen), der Port darf allerdings noch nicht genutzt werden. Port 22 ist der Standardport für SFTP (so werden auch Client-Programme wie Filezilla das sofort erkennen).
Bei mir ist die entsprechende Zeile die Zeile 3. Dort muss das # vor Port entfernt werden, oder wenn noch nichts von "Port" da steht, muss die Zeile so hinzugefügt werden:
"Port 22" (ohne " natürlich)
Die Zeile "Subsystem sftp internal-sftp" muss da stehen, oder darf zumindest nicht auskommentiert sein, damit der SFTP das eingebaute SFTP Subsystem verwendet.
Nun werden die Rechte für die Benutzer, beziehungsweise deren Gruppen festgelegt. Das geschieht per:
"Match Group gruppenname" <- Für "gruppenname" entsprechend den Name der Benutzergruppe angeben. Wenn dies nur für einen einzelnen Benutzer gelten soll, sieht das so aus: "Match User username". Dahinter kommen dann die Parameter mit den Berechtigungen. In meinem Fall sind das:
"ChrootDirectory /home/username/" <- Der Ort, in dem die Gruppe/der Nutzer eingesperrt wird.
"ForceCommand internal-sftp" <- Hab' ich leider keine Erklärung für
"AllowTCPForwarding no" <- Hierfür ebenso wenig
Hier noch der Code zu meiner sshd_config:
Code:
# Package generated configuration file
# See the sshd_config(5) manpage for details
# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes
# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys
# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes
# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no
# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes
# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no
#MaxStartups 10:30:60
#Banner /etc/issue.net
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
Subsystem sftp internal-sftp
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes
Match Group ftpuser
ChrootDirectory /home/ftpuser
ForceCommand internal-sftp
AllowTCPForwarding no
<-- Damit mach' ich für heute Schluss, morgen geht's weiter -->