completes the sftp solutions
This commit is contained in:
parent
fe46f6a2a2
commit
91cfa57082
|
@ -252,20 +252,112 @@ done
|
||||||
|
|
||||||
## Setting up the fileserver
|
## Setting up the fileserver
|
||||||
|
|
||||||
|
The concept of a fileserver is about as old as the the world wide web, email, newsgroups etc.
|
||||||
|
It's main purpose in life is to offer a place to store and retrieve large files.
|
||||||
|
The Debian repositories where you download all your packages from is contactable over the FTP protocol.
|
||||||
|
There are multiple implementations available, some plain, some secure, some less secure.
|
||||||
|
We'll have a look at the two most common solutions to host and transfer files.
|
||||||
|
|
||||||
|
To use the FTP protocol we can install any FTP tool we find.
|
||||||
|
A good candidate is `filezilla` which you can find in the Debian repositories, or online if you want to use it on Windows.
|
||||||
|
|
||||||
### FTP
|
### FTP
|
||||||
|
|
||||||
A quick [google](https://likegeeks.com/ftp-server-linux/) tells us `vsftpd` is a popular *FileTransferProtocol* server.
|
A quick [google](https://likegeeks.com/ftp-server-linux/) tells us `vsftpd` is a popular *FileTransferProtocol* server.
|
||||||
As expected you can find it in the main Debian repositories.
|
As expected you can find it in the main Debian repositories.
|
||||||
You know how to install it by now!
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo apt search vsftpd
|
sudo apt search vsftpd
|
||||||
```
|
```
|
||||||
|
|
||||||
|
You know how to install it by now!
|
||||||
To know *where* to configure the server we can look at the `man vsftpd` pages.
|
To know *where* to configure the server we can look at the `man vsftpd` pages.
|
||||||
Scroll all the way to the bottom to see which files it uses to configure itself.
|
Scroll all the way to the bottom to see which files it uses to configure itself.
|
||||||
The configuration file itself is very *verbose* and should explain itself.
|
The configuration file itself is very *verbose* and should explain itself.
|
||||||
|
|
||||||
### SFTP
|
### SFTP
|
||||||
|
|
||||||
TODO
|
Even without installing any additional server, we can offer our users a way to download, and upload, files to our server.
|
||||||
|
When you install `openssh-server`, and pay attention to the installation dialog, you'll see it will also install an additional package called `openssh-sftp-server`
|
||||||
|
This in itself is enough to have an SFTP server up and running.
|
||||||
|
Done!
|
||||||
|
|
||||||
|
It does raise the question of security.
|
||||||
|
When installing the `vsftpd` package your users can *only* upload and download files but when you install an ssh server they can also get shell access!
|
||||||
|
This might not be the desired behaviour for all your users.
|
||||||
|
Luckily we can change the server configuration to modify it to our requirements.
|
||||||
|
|
||||||
|
How will we find *which* configuration file we need to change *where*?
|
||||||
|
`man sshd` should do the trick.
|
||||||
|
Navigate to to end of the manual and you'll see a huge list of files the server uses to configure itself.
|
||||||
|
Why `sshd` and not `ssh` you ask?
|
||||||
|
Well, `ssh` is the **client** you use to connect to the `sshd` **server** and thet are to different *programs*.
|
||||||
|
Remember that `ssh` was installed on your Linux machine even before installing `openssh-server`!
|
||||||
|
|
||||||
|
I can think of two ways to limit the shell access for specific users.
|
||||||
|
The first one should ring a bell.
|
||||||
|
As we define our default shell in the `/etc/passwd` file to be `/bin/bash`, we can also change this for specific users to `/usr/sbin/nologin`.
|
||||||
|
This will block those users from getting an actual shell when sshing into the machine but SFTP should still work.
|
||||||
|
There are multiple downsides to this solution, some of which we'll investigate further later one, but the main one I see from a beginner point of view is that it requires a customisation for each account we want to block.
|
||||||
|
As all users we want to block are part of a group, either *red* or *blue* there should be a way to restrict access on a group based level no?
|
||||||
|
|
||||||
|
It's the last lines of the configuration file that point out some interesting features.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# override default of no subsystems
|
||||||
|
Subsystem sftp /usr/lib/openssh/sftp-server
|
||||||
|
|
||||||
|
# Example of overriding settings on a per-user basis
|
||||||
|
#Match User anoncvs
|
||||||
|
# X11Forwarding no
|
||||||
|
# AllowTcpForwarding no
|
||||||
|
# PermitTTY no
|
||||||
|
# ForceCommand cvs server
|
||||||
|
```
|
||||||
|
|
||||||
|
Remember that the `#` are comments.
|
||||||
|
These settings point out that we can add different rules for different users, and probably groups as well.
|
||||||
|
So, if you trust all people in the *blue* group, you can add a rule to match all users in the *red* group and restrict them to only sftp login and no shell access.
|
||||||
|
With this in mind, what would adding the following to the configuration file do?
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Match Group blue
|
||||||
|
ForceCommand internal-sftp
|
||||||
|
```
|
||||||
|
|
||||||
|
But the users can still walk around the entire file system, which is not always a good idea.
|
||||||
|
Using the keywords **sftp**, **chroot**, **group** in [google](https://googlethatforyou.com?q=sftp%20chroot%20group) lists us the [arch](https://wiki.archlinux.org/index.php/SFTP_chroot) wiki which is *always* a solid place to inform ourselves.
|
||||||
|
Try to have get this set up as an additional exersise!
|
||||||
|
|
||||||
|
### Taking changes to configuration files into account
|
||||||
|
|
||||||
|
When make these changes to the configuration files you probably noticed they are not applied immidiatly.
|
||||||
|
So when are they taken into account then?
|
||||||
|
Most servers we'll install onto our various machines run as [daemons](https://en.wikipedia.org/wiki/Daemon_(computing)) in the background.
|
||||||
|
They listen on for an incoming client connection on a port, do whatever the client requests of them and go back to sleep when there are no tasks for them to perform.
|
||||||
|
They might have internal tasks scheduled but we'll set this aside for the moment.
|
||||||
|
As with most things Linux, configuration is done by a text file and *most* daemons will read their corresponding configuration files upon startup.
|
||||||
|
Think of the .bashrc file, which is read every time a new shell is started.
|
||||||
|
Once they know how to behave, from reading their configuration file, they will act accordingly.
|
||||||
|
This raises the question, how do you *restart* a running server?
|
||||||
|
|
||||||
|
The system responsible for launching most daemons on our Debian installions, and also our Raspberry PI's, is called **systemd**.
|
||||||
|
The thee most used commands you need to know are as follows.
|
||||||
|
How do to *start* a service, how to *stop* one and how to *check* if one is running properly.
|
||||||
|
For system daemons, such as `sshd` or most webservers, you need administrator powers to interact with them.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo systemctl start sshd.service
|
||||||
|
sudo systemctl stop sshd.service
|
||||||
|
sudo systemctl status sshd.service
|
||||||
|
```
|
||||||
|
|
||||||
|
These three commands will go a long way but there are other handy ones you can try out.
|
||||||
|
I advise you to use *tab-completion* as much as possible as it will help you to construct the proper commands.
|
||||||
|
Especially at the beginning of your Linux journey because it takes some time to rememeber specific service names.
|
||||||
|
Have a look at all the base commands of `systemctl` and you'll notice quite a few interesting things.
|
||||||
|
For example, it can be used to reboot or shutdown your computer as well!
|
||||||
|
|
||||||
|
For those who want to digg deeper into systemd itself I advise you to have a browse in it's configuration directory.
|
||||||
|
You'll find it at `/etc/systemd` and the manpages `man systemd` are also very helpfull, but a bit verbose.
|
||||||
|
We will have a deeper look at the internals of systemd later throughout the course.
|
||||||
|
|
Loading…
Reference in New Issue