Для администратора крайне важно иметь возможность подключиться к компьютеру удалённо. Серверы, заключённые в своей собственной комнате, редко оснащаются постоянными клавиатурами и мониторами — но они подключены к сети.
9.2.1. Защищённый удалённый вход: SSH
Протокол SSH ("Secure SHell" — защищённая командная оболочка) был разработан из соображений безопасности и надёжности. Соединения, использующие SSH, защищены: другая сторона аутентифицируется, а весь обмен данными зашифрован.
В состав SSH также входят две транспортных службы. scp
— это инструмент командной строки, который можно использовать наподобие cp
с той разницей, что любой путь к другой машине начинается с указания её имени, за которым следует двоеточие.
$
scp file machine:/tmp/
sftp
is an interactive command, similar to ftp
. In a single session, sftp
can transfer several files, and it is possible to manipulate remote files with it (delete, rename, change permissions, etc.). Many FTP clients, including filezilla, support it.
В Debian используется OpenSSH — свободная реализация SSH, развиваемая в рамках проекта OpenBSD
(свободной операционной системы, основанной на ядре BSD и делающей акцент на безопасности), и являющаяся ответвлением оригинальной программы SSH, разработанной финской компанией SSH Communications Security Corp. Эта компания изначально разрабатывала SSH как свободное ПО, но впоследствии решила продолжить разработку под собственнической лицензией. Тогда проект OpenBSD создал OpenSSH, чтобы развивать свободную версию SSH.
OpenSSH is split into two packages: the client part is in the openssh-client package, and the server is in the openssh-server package. The ssh meta-package depends on both parts and facilitates installation of both (apt install ssh
), while the task-ssh-server, often chosen during the initial installation, depends on the server package only.
9.2.1.1. Аутентификация по ключу
При каждом входе по SSH удалённый сервер запрашивает пароль, чтобы аутентифицировать пользователя. Это может создать проблему, если хочется автоматизировать соединение, или если используется некий инструмент, которому нужно часто устанавливать соединения через SSH. По этой причине в SSH предусмотрен механизм аутентификации по ключу.
The user generates a key pair on the client machine with ssh-keygen -t rsa
; the so generated public key is stored in ~/.ssh/id_rsa.pub
, while the corresponding private key is stored in ~/.ssh/id_rsa
. The user can then use ssh-copy-id server
to add their public key to the ~/.ssh/authorized_keys
file on the server, or, if SSH access hasn't been enabled yet, they have to ask the administrator to add their key manually.
If the private key was not protected with a “passphrase” at the time of its creation, all subsequent logins on the server will work without a password. Otherwise, the private key must be decrypted each time by entering the passphrase. Fortunately, ssh-agent
allows us to keep private keys in memory to not have to regularly re-enter the password. For this, you simply use ssh-add
(once per work session) provided that the session is already associated with a functional instance of ssh-agent
. Debian activates it by default in graphical sessions, but this can be deactivated by changing /etc/X11/Xsession.options
and commenting out use-ssh-agent
. For a console session, you can manually start the agent with eval $(ssh-agent)
.
9.2.1.2. Cert-Based Authentication
SSH keys cannot just be protected by a password (or not). An often unknown feature is that they can also be signed via certificate, both the host as well as the client keys. This approach comes with several advantages. Instead of maintaining an
authorized_keys
file per user as described in the previous section, the SSH server can be configured to trust all client keys signed by the same certificate (see also
Раздел 10.2.2, «Инфраструктура открытых ключей: easy-rsa») by using the
TrustedUserCAKeys
and
HostCertificate
directives in
/etc/ssh/sshd_config
.
TrustedUserCAKeys /etc/ssh/ssh_users_ca.pub
HostKey /etc/ssh/ssh_host_ecdsa_key
HostCertificate /etc/ssh/ssh_host_ecdsa_key-cert.pub
Vice-versa the clients can also be configured to trust the host key signed by the same authority, making it easier to maintain the known_hosts
file (even system wide via /etc/ssh/known_hosts
).
@cert-authority *.falcot.com ssh-rsa AAAA[..]
Both, public key and certificate authentication, can be used alongside each other.
9.2.1.3. Combining authentication methods
Besides the already mentioned password based, key based, and the certificate based authentication, other methods like using a TOTP exist as well. Not only is this an abundance of options. They can also be combined. On the server side, the AuthenticationMethods
directive can define an order of authentication methods a user has to successfully pass, before they are allowed to enter the system. It is even possible to define multiple alternative sequences:
AuthenticationMethods publickey,password publickey,keyboard-interactive:pam
This setting, for example, allows users to login after initially completing the public key authentication, followed by either a successful password authentication or entering a valid TOTP set up via PAM. On the user side, the sequence of methods can be defined using the PreferredAuthentications
directive.
9.2.1.4. Использование удалённых приложений X11
The SSH protocol allows forwarding of graphical data (“X11” session, from the name of the most widespread graphical system in Unix); the server then keeps a dedicated channel for those data. Specifically, a graphical program executed remotely can be displayed on the X.org server of the local screen, and the whole session (input and display) will be secure. Since this feature allows remote applications to interfere with the local system, it is disabled by default. You can enable it by specifying X11Forwarding yes
in the server configuration file sshd_config(5) or by prepending the public key with the X11-forwarding
keyword in the authorized_keys(5) file. Finally, the user must also request it by adding the -X
option to the ssh
command-line.
9.2.1.5. Создание шифрованных туннелей
Опции
-R
и
-L
указывают
ssh
, что нужно создать «шифрованный туннель» между двумя машинами, безопасно перенаправив локальный порт TCP (см. врезку
К ОСНОВАМ TCP/UDP) на удалённую машину или наоборот.
ssh -L 8000:server:25 intermediary
устанавливает сессию SSH с узлом
intermediary и слушает локальный порт 8000 (см.
Рисунок 9.3, «Перенаправление локального порта с помощью SSH»). Для любого соединения, установленного на этом порту,
ssh
инициирует соединение с машины
intermediary на порт 25 машины
server и свяжет оба соединения друг с другом.
ssh -R 8000:server:25 intermediary
также устанавливают сессию SSH с
intermediary компьютером, но на этой машине находится
ssh
и уже слушает порт 8000 (см.
Рисунок 9.4, «Перенаправление удалённого порта с помощью SSH»). Любое соединение с этим портом заставит
ssh
открыть соединение с локальной машины на порт 25 машины
server и связать между собой два соединения.
В обоих случаях соединения устанавливаются с портом 25 узла server, проходя через туннель SSH между локальной машиной и машиной intermediary. В первом случае входом в туннель является локальный порт 8000, и данные идут на машину intermediary перед тем, как направиться на server в «публичной» сети. Во втором случае вход и выход из туннеля меняются местами; входом является порт 8000 на машине intermediary, а выход расположен на локальном узле, и данные затем направляются на server. На практике сервером обычно является либо локальная машина, либо промежуточная. В таком случае SSH защищает соединение от одного конца до другого.
9.2.2. Использование удалённых графических рабочих столов
VNC (Virtual Network Computing - Виртуальный Сетевой Компьютер) позволяет удалённо получить доступ к графическим столам пользователей.
Этот инструмент используется в основном для технической помощи; администратор может видеть ошибки, с которыми сталкивается пользователь, и показывать ему правильный путь их решения без необходимости стоять у него за спиной.
First, the user must authorize sharing their session. The GNOME graphical desktop environment includes that option via → (contrary to previous versions of Debian, where the user had to install and run vino
). For this to work network-manager must be managing the network used (e.g. enable the managed
mode for devices handled by ifupdown in /etc/NetworkManager/NetworkManager.conf
). KDE Plasma still requires using krfb
to allow sharing an existing session over VNC. For other graphical desktop environments, the x11vnc
or tightvncserver
commands (from the Debian packages of the same name) or tigervncserver
(tigervnc-standalone-server) serve the same purpose and provide the vnc-server virtual package; you can make either of them available to the user with an explicit menu or desktop entry.
When the graphical session is made available by VNC, the administrator must connect to it with a VNC client. GNOME has vinagre
and remmina
for that, while the KDE project provides krdc
(in the menu at → → ). There are other VNC clients that use the command line, such as xtightvncviewer
from the homonym package or xtigervncviewer
from the tigervnc-viewer Debian package. Once connected, the administrator can see what is going on, work on the machine remotely, and show the user how to proceed.