Возникла необходимость предоставить место под сайт для другого пользователя на своем сервере. Своего рода предоставить услуги хостера. Конечно не с такими широкими возможностями по обслуживанию сайта, какие предоставляют за деньги другие. С небольшими ограничениями, такими как сайт должен быть статическим, потому что все 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 [email protected]
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:[email protected]">Напишите нам</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 в Debian linux
Ввести в терминале:
sudo apt install putty-tools
FileZilla
Наиболее подходящее приложение для работы с файлами удаленного сервера. Более подробно можно ознакомится с FileZilla
Установка FileZilla в Windows 10
Скачать клиент отсюда
Установка FileZilla в Debian linux
Установка из репозитория:
sudo apt install filezilla
Комментарии