Возникла необходимость предоставить место под сайт для другого пользователя на своем сервере. Своего рода предоставить услуги хостера. Конечно не с такими широкими возможностями по обслуживанию сайта, какие предоставляют за деньги другие. С небольшими ограничениями, такими как сайт должен быть статическим, потому что все CMS не дадут такой безопасности. Соответственно ограниченным дисковым пространством и количеством создаваемых файлов. Все обновления сайта будут предоставляться через SFTP с ограничениями для безопасности сервера. Сертификат сайта будет создан силами владельца сервера.

Что необходимо сделать пользователю

Для пользователя, которому будет предоставлен доступ к серверу необходимо сделать некоторые телодвижения.

  • Изменить днс запись A в своем личном кабинете регистратора домена. Вставив адрес сервера, который нужно узнать у владельца. Когда изменения вступят в силу администратор сделает сертификат на сайт и сообщит логин и пароль для доступа к серверу. После чего можно будет загрузить свой сайт, при помощи любого удобного для пользователя sftp-клиента.
  • При желании создать публичный ключ, для подключения к серверу, что бы не вводить пароль и владелец сервера будет вам благодарен, за дополнительную безопасность для его сервера. Прежде чем сгенерировать публичный ключ, нужно что бы был установлен ssh-keygen читаем. Генерируем ключ после генерации ключей передать публичный ключ админу сервера, он знает, что с ним делать.

Или как вариант, администратор сервера сам генерирует ключи и передает пользователю публичные ключи. Что будет гораздо проще.

Далее идет инструкция для администратора сервера.

Решение при помощи терминала

Создать пользователя линукс Debian

Для простоты создания воспользоваться командой adduser из под рута или sudo. Создадим группу, пользователя без доступа к оболочке shell и каталог в папке home. Доступ к оболочке закрыт в целях безопасности.

Для начала создать группу в которую потом по мере надобности добавлять пользователей, которые будут иметь доступ к каталогу с сайтом через SFTP:

sudo addgroup uprime

Создать и включить в созданную группу первого пользователя:

sudo adduser --ingroup uprime --home /home/uprime/ --shell /sbin/nologin vova
  • --ingroup - добавить пользователя в группу uprime
  • --home - Каталог хранения файлов пользователя
  • --shell - Доступ к оболочке, в данном случае запрещен
  • vova - Имя пользователя

После запуска команды будут заданы вопросы, обязательный для заполнения это указать и подтвердить пароль, остальные по желанию. В конце подтвердить (Y)

Добавляется пользователь «vova» ...
Добавляется новый пользователь «vova» (1001) в группу «uprime» ...
Создаётся домашний каталог «/home/uprime/» ...
Копирование файлов из «/etc/skel» ...
Новый пароль : 
Повторите ввод нового пароля : 
passwd: пароль успешно обновлён
Изменение информации о пользователе vova
Введите новое значение или нажмите ENTER для выбора значения по умолчанию
	Полное имя []: Vladimir
	Номер комнаты []: 
	Рабочий телефон []: 
	Домашний телефон []: 
	Другое []: 
Данная информация корректна? [Y/n] y

Чтобы добавить очередного пользователя для управления файлами сайта выполнить команду:

sudo adduser --ingroup uprime --home /home/uprime/ --shell /sbin/nologin username

Удаление пользователя линукс Debian

Удалить пользователя, не удаляя файлы пользователя. username имя пользователя:

sudo deluser username

Удалить пользователя, его домашний каталог и все что с ним связано:

sudo deluser --remove-home username

Права на каталоги

Главное правильно определить права владения каталогами, дабы избежать в последствии ошибок.

Определение прав владения каталогом созданным при создании нового пользователя.

sudo chown root:uprime /home/uprime/
sudo chmod 750 /home/uprime/

Создать каталог, где будет жить сайт. Дать полный доступ для пользователей группы uprime и root. Всем остальным только чтение.

sudo mkdir /home/uprime/uprime.ru
sudo chown root:uprime /home/uprime/uprime.ru
sudo chmod 775 /home/uprime/uprime.ru

Настройка сервера SSH для нового пользователя

Перед изменениями в файле конфигурации обязательно сделать его копию, на тот случай, если что то пойдет не так.

sudo cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.copy

Открыть конфиг SSH:

sudo nano /etc/ssh/sshd_config

Найти строчку Subsystem sftp /usr/lib/openssh/sftp-server закомментировать ее добавив Subsystem sftp internal-sftp или заменив.

Сделано так потому что internal-sftp не требует файлов поддержки при использовании с ChrootDirectory директив.

В конце файла конфигурации дописать:

Match Group uprime
	ChrootDirectory /home/uprime/
	X11Forwarding no
	AllowTcpForwarding no
  PasswordAuthentication yes

Таким образом при подключении к серверу по SFTP каталог /home/uprime/ будет для пользователя корневым.

Для вступления изменений в силу перезагрузить сервер

sudo systemctl restart ssh

Ограничить дисковое пространство для пользователя линукс Debian

Для того чтобы пользователи группы не заполнили все дисковое пространство своими файлами или чего хуже не превысили лимит по количеству файлов в системе. Нужно ввести ограничение на использование диска. В линукс для этого существуют квоты. Подробно останавливаться на этом не буду, будет приведена инструкция под конкретную задачу.

Установить пакет quota

sudo apt install quota

Внести изменения в файловую систему, включив квоты в разделе /home. Открыть конфигурационный файл fstab:

sudo nano /etc/fstab

Выглядеть он может по разному:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mapper/asus--vg-root /               ext4    errors=remount-ro 0       1
# /boot was on /dev/sda1 during installation
UUID=12666f46-0ff9-4cae-bb6f-9455fb7965ba /boot           ext2    defaults        0       2
/dev/mapper/asus--vg-home /home           ext4    defaults        0       2
/dev/mapper/asus--vg-tmp /tmp            ext4    defaults        0       2
/dev/mapper/asus--vg-var /var            ext4    defaults        0       2
/dev/mapper/asus--vg-swap_1 none            swap    sw              0       0

Или так:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# systemd generates mount units based on this file, see systemd.mount(5).
# Please run 'systemctl daemon-reload' after making changes here.
#
# <file system>                           <mount point>      <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=7342911a-66ba-4f5d-bae9-f9f8eaaf7f2b /                  ext4    errors=remount-ro 0       1
# /home was on /dev/sda5 during installation
UUID=873a7acc-1093-4b5c-8fa5-f5a3cc8a6c0a /home              ext4    defaults          0       2
#Монтирование двухтерабайтного диска sdb1 WDC WD20EZRX-22D /dev/sdb1
UUID=514dba45-fb92-47a3-878c-0c82ef0c9daf /home/media/video  ext4    defaults          0       0
#Монтирование 500Gb диска sdc1 ST500DM002-1BD14 /dev/sdc1
UUID=d25fcd06-cf9e-4548-8cc5-87a09407bcbc /home/media/music  ext4    defaults          0       0
#Монтирование 500Gb диска sdc1 HGST HTS545050A7 /dev/sdd1
UUID=e7a7ea8c-fe41-4bbd-a5d0-3049cf43888d /home/share        ext4    defaults          0       0

В строке где указана точка монтирования /home столбца <mount point> :

UUID=873a7acc-1093-4b5c-8fa5-f5a3cc8a6c0a /home              ext4    defaults          0       2

Вместо defaults написать grpquota квоты будут применяться к группам пользователей:

UUID=873a7acc-1093-4b5c-8fa5-f5a3cc8a6c0a /home              ext4    grpquota          0       2

Для обновления изменений перемонтировать /home

sudo mount -o remount /home

Создать файл квот в каталоге /home для группы пользователей /aquota.group при помощи команды:

sudo quotacheck -gm /home

Включение квот:

sudo quotaon -v /home

Есть несколько способов установить квоту для пользователей или их групп. При помощи команд edquota или setquota.

Установка квоты группы с помощью edquota

Установить квоту для группы uprime (ключ -q указывает что будет редактироваться квота для указанной группы, ключ -u - пользователь):

sudo edquota -g uprime

Для редактирования откроется временный файл в редакторе назначенным по умолчанию примерно такого содержания:

Disk quotas for group uprime (gid 1001):
   Filesystem                   blocks       soft       hard     inodes     soft     hard
  /dev/mapper/asus--vg-home         20          0          0          5        0        0

Выделить квоту с мягким пределом soft 100Mb и жестким hard 110Mb внеся такие изменения:

Disk quotas for group uprime (gid 1001):
  Filesystem                   blocks       soft       hard     inodes     soft$     hard
  /dev/mapper/asus--vg-home         20       100M       110M          5        0        0

Сохранение изменений Ctrl+O Enter сохранить файл Ctrl+X выйти.

Проверить квоты для группы uprime:

sudo quota -vg uprime

Будет показано следующее:

Disk quotas for group uprime (gid 1001): 
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/asus--vg-home    20  102400  112640               5       0       0        

Установка квоты группы с помощью setquota

При помощи команды setquota все то же самое делается в одну строку без редактирования файла квот для группы uprime. Для примера изменим квоту сделав мягкий предел soft 150Mb и жесткий hard 170Mb :

sudo setquota -g uprime 150M 170M 0 0 /home

Проверить квоты для группы uprime:

sudo quota -vg uprime

Будет показано следующее:

Disk quotas for group uprime (gid 1001): 
             Filesystem  blocks   quota   limit   grace   files   quota   limit   grace
/dev/mapper/asus--vg-home    20  153600  174080               5       0       0        

Отчеты о квотах

Выполнить команду:

sudo repquota -gs /home
  • ключ -g - группа
  • ключ -s - удобочитаемый вывод
  • /home - каталог для которого сделать отчет

Будет сформирован отчет по квотам для групп.

Если бы группа пользователей превысила мягкое ограничение, столбец grace показал бы, сколько времени у них осталось, чтобы вернуться в рамки своей квоты.

Ограничение на количество файлов для группы пользователей

Не понял, как сделать, сделал при помощи Webmin

Виртуальный хост для группы пользователей

Создать файл конфигурации виртуального хоста:

sudo nano /etc/apache2/sites-available/uprime.ru.conf

Вставить заготовку:

<VirtualHost *:80>
    ServerName uprime.ru
    ServerAdmin admin@uprime.ru
    ServerAlias www.uprime.ru
    DocumentRoot /home/uprime/uprime.ru/
       
    CustomLog ${APACHE_LOG_DIR}/uprime.ru.access.log combined
    ErrorLog ${APACHE_LOG_DIR}/uprime.ru.error.log
<Directory "/home/uprime/uprime.ru/">
        # Директива Options определяет, какие особенности сервера являются
        # доступными в данном каталоге.
        # -Indexes - не позволяет людям перейти в каталог и просмотреть файлы
        # перечисленные там, если нет файла index.html
        # -Includes - Server-site includes(SSI), запрещены
        # -ExecCGI - запрещено выполнение сценариев CGI
        Options -Includes -Indexes -ExecCGI
        # разрешить .htaccess файлы на вашем виртуальном хостинге (и подкаталоги) 
        AllowOverride All 
</Directory>

# mod_rewrite должен быть активирован
RewriteEngine on
# склейка зеркал сайта
# Редирект с домена www на домен без www
RewriteCond %{HTTP_HOST} ^www.uprime\.ru$ [NC]
RewriteRule ^(.*)$ https://uprime.ru/$1 [R=301,L]

# Перенаправление с HTTP на HTTPS
RewriteCond %{SERVER_NAME} =www.uprime.ru [OR]
RewriteCond %{SERVER_NAME} =uprime.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

Сохранение изменений Ctrl+O Enter сохранить файл Ctrl+X выйти.

Проверить синтаксис конфигураций:

sudo apache2ctl configtest

Активировать виртуальный хост:

sudo a2ensite uprime.ru.conf

Перезагрузить apache для вступления изменений в силу:

sudo systemctl reload apache2

После того как на сервере DNS регистратора или куда был делегирован домен будет изменена запись A указывающая на данный сервер приступить к созданию сертификата сайта.

Получение сертификата для сайта

Сделать тестовую страницу сайта:

sudo nano /home/uprime/uprime.ru/index.html

Вставить следующий код:

<!doctype html>
<html>
<head>
    <meta name="robots" content="all">
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Официальный сайт uprime.ru</title>
    <link href="/templates/Default/css/styles.css" rel="stylesheet">
    <style>
    body {align-items: center;background-color: #f5f5f5;display: flex;height: 100vh;justify-content: center;margin: 0;}
    .container {text-align: center;}
    .container h1 {font-size: 8rem;letter-spacing: 10px;margin: 0;}
    .container h4 {font-size: 1.25rem;font-weight: 300;}
    </style>
</head>
<body>
    <div class="container">
        <h1>UPRIME.RU</h1>
        <h4><a href="mailto:info@uprime.ru">Напишите нам</a></h4>
        <p>uprime.ru © 2023</p>
    </div>
</body>
</html>

Сохранение изменений Ctrl+O Enter сохранить файл Ctrl+X выйти.

Изменить права на файлы в каталоге:

sudo chown -R root:uprime /home/uprime/uprime.ru

Сертификат безопасности будет получен при помощи certbot, который должен быть уже установлен.

Прежде чем расширять сертификат нужно проверить все ли гладко будет проходить, ключ --dry-run для тестового запуска.

sudo certbot certonly --dry-run --apache --expand -d uprime.ru -d www.uprime.ru

Если ошибок нет, то убрать ключ --dry-run:

sudo certbot certonly --apache --expand -d uprime.ru -d www.uprime.ru

Получив ответ, на вопрос нажать цифру 2. Что бы автоматически происходило перенаправление на https хост.

Автоматически создался виртуальный хост uprime.ru-le-ssl.conf , благодаря ключу --apache и активация хоста, перезагружать apache не надо.

Приложения для доступа к серверу линукс Debian

Чтобы управлять файлами можно воспользоваться несколькими приложениями SFTP-client

SFTP

Для не очень продвинутого пользователя, не привыкшего работать с командной строкой, этот вариант работы с файлами сервера не очень подойдет. Поэтому заострять внимание на нем не буду. По мере надобности буду приводить команды наиболее часто используемые.

Установка openssh-client в Windows 10

Установить клиент SSH и другие утилиты:

  • Нажать Пуск, выбрать Параметры (шестеренка)
  • Выбрать Приложения из Параметры Windows
  • Выбрать Приложения и возможности Дополнительные возможности (Дополнительные компоненты)
  • Выбрать «Клиент OpenSSH» и нажмите кнопку «Установить».

Утилиты входящие в пакет:

  • ssh.exe
  • scp.exe
  • sftp.exe
  • ssh-add.exe
  • ssh-agent.exe
  • ssh-keygen.exe
  • ssh-keyscan.exe

Установка openssh-client в Debian linux

Установить клиент SSH

sudo apt install openssh-client

PuTTY

В принципе аналог пакету open-ssh, но нам нужна только одна программа - puttygen. Нужна для конвертации публичного ключа сгенерированного ssh-keygen для формата поддерживаемого FileZilla

Установка puttygen в Windows 10

Скачать puttygen отсюда

Установка puttygen в Debian linux

Ввести в терминале:

sudo apt install putty-tools

FileZilla

Наиболее подходящее приложение для работы с файлами удаленного сервера. Более подробно можно ознакомится с FileZilla

Установка FileZilla в Windows 10

Скачать клиент отсюда

Установка FileZilla в Debian linux

Установка из репозитория:

sudo apt install filezilla