Root-пароль можно легко изменить. Для этого нужен доступ к панели управления ISPmanager/VMmanager или по SSH.
Если известен текущий пароль
Смена пароля в ISPmanager
Смена пароля через терминал
Если текущий пароль неизвестен
Сброс пароля через режим восстановления
Режим восстановления в VMmanager 5
Режим восстановления в VMmanager 6
Linux — одна из самых популярных операционных систем, используемых для веб-серверов, благодаря своей природе с открытым исходным кодом, надежности и гибкости.
Популярность означает, что она является мишенью для хакеров, которые всегда ищут уязвимости для использования. Поэтому важно принять необходимые меры предосторожности, чтобы защитить ваш Linux-сервер от попыток взлома. В этой статье мы обсудим некоторые из лучших способов защиты Вашего Linux-сервера от взлома.
Cтатья не является “рецептом”, в котором надо выполнить все пункты. Некоторые пункты не нужны, если вы выполнили другие. Поэтому выберете только необходимые вам. Я же придерживаюсь следующего рецепта.
Поскольку мы будем вносить изменения в SSH, важно не закрывать ваше первоначальное SSH-соединение. Вместо этого откройте второй сеанс SSH для тестирования. Это делается, чтобы избежать блокировки вашего сервера в случае ошибки в конфигурации SSH.
Root — это главный пользователь в системах UNIX. Данная учетная запись имеет полный доступ на выполнение любых команд, изменение системных параметров, установку дополнительного ПО и т.д.
Получить root-доступ можно на этапе заказа услуги (тарифа), либо уже после активации сервера.
Обратите внимание! ерверов с root-доступом действует отдельный регламент.
Если клиент, в процессе использования услуги, добавляет root к своему серверу, то с этого момента его обслуживание будет проходить по соответствующему регламенту.
Во время заказа тарифного плана есть возможность установить флажок в соответствующем разделе:
На активном сервере включить root-доступ можно зайдя в личный кабинет:
my.rusonyx.ru > кликнуть на название сервера > перейти на вкладку «Конфигурация» > установить галочку в разделе «Доступ к серверу по SSH под пользователем root» и сохранить изменения.
Подробнее об изменениях конфигурации сервера описано здесь.
Где указан пароль от root-пользователя?
Чтобы узнать root-пароль для SSH подключения необходимо клиенуть на название сервера, либо открыть меню menu и нажать «Информация«:
Как выполнить подключение описано в этой статье:
Подключение к серверу по SSH
Любая работа в Linux выполняется от имени какого-то пользователя, зарегистрированного и авторизованного в системе.
В Linux существуют три типа пользователей:
- Администраторы — привилегированные пользователи с полным доступом к системе. По умолчанию на Linux-сервере после установки операционной системы всегда есть один такой пользователь —
root
. - Локальные пользователи — непривилегированные пользователи. Их учётные записи создаёт администратор. Особенность таких аккаунтов в ограниченном доступе к серверу — они не могут пользоваться некоторыми системными утилитами, могут работать только с теми файлами и папками, к которым им открыт доступ. Тем не менее, можно повысить привилегии локального пользователя — ниже расскажем как.
- Системные пользователи — учётные записи, автоматически создаваемые системой для работы внутренних процессов и служб. Например, после установки веб-сервера Apache, который входит в состав стека LAMP, на сервере появляется пользователь
www-data
(на CentOSapache
), от имени которого потом работает веб-сервер. Такие пользователи нужны для повышения безопасности.
Каждый пользователь имеет свой уникальный идентификатор пользователя, UID
. Он отличается в зависимости от типа пользователя:
- администратор — 0
- обычный пользователь — от 100
- системный пользователь — от 1 до 100
Чтобы упростить процесс настройки прав для новых пользователей, их объединяют в группы. Каждая группа имеет свой набор прав и ограничений. Любой пользователь, создаваемый или добавляемый в такую группу, автоматически их наследует. Если при добавлении пользователя для него не указать группу, то у него будет своя, индивидуальная группа — с именем пользователя. Один пользователь может одновременно входить в несколько групп.
Информацию о каждом пользователе сервера можно посмотреть в файле /etc/passwd
. Пользователи в нём перечислены в следующем формате:
test-user:x:1000:1000::/home/test-user:/bin/bash
Если вам известно имя пользователя и вы хотите узнать о нём побольше, необязательно читать /etc/passwd
. Всё то же самое в человекочитаемом виде можно посмотреть с помощью команды pinky -l
:
pinky -l
Эта же команда без аргументов покажет вам всех авторизованных в текущий момент пользователей сервера, включая информацию о времени и источнике входа:
В качестве альтернативы можно использовать команду w
— она тоже показывает всех авторизованных в текущий момент пользователей, включая создаваемую ими нагрузку на сервер:
Узнать UID
пользователя можно с помощью команды id
:
id test-user
Для именования пользователей в Linux есть набор стандартных правил:
- Имя пользователя может содержать только английские буквы
[a-z]
в верхнем и нижнем регистре, цифры, символ«_»
, тире«-»
и точку; - Имя пользователя может оканчиваться символом
«$»
; - Имя пользователя не может начинаться с тире, содержать только цифры или состоять из
«.»
или«..»
; - Не рекомендуется использовать точку в начале имени пользователя;
- Имя пользователя может включать до 32 символов.
Теперь перейдём непосредственно к управлению пользователями.
на прочтение 4 минуты
Услуга VPS дает Вам возможность использовать на много большое количество функций по сравнению с обычным хостингом. Настройку VPS вы можете делать самостоятельно в соответствии с требованиями вашего проекта, используя root доступ. Более детально преимущества VPS сервера над обычным виртуальным хостингом по .
Наличие рут доступа дает возможность управлять VPS на уровне администратора. Root права позволяют полностью контролировать ваш сервера, настраивать или размещать на нем абсолютно все что вы хотите (в рамках закона, конечно). Рут права для владельцев веб-сайтов дают возможность получить нужный им уровень контроля и возможность управлять своим проектом гораздо быстрее. ISPmanager или Vesta CP – что выбрать для работы VPS? Наши советы с следующей.
На VPS можно размещать сайты, игры, проекты разного уровня сложности, а также много другое. В тоже время вам не обязательно иметь полный доступ к VPS, если вы не имеете навыков администрирования. Если вы имеете достаточный опыт в сфере администрирования и вам необходимо реализовать особенную конфигурацию для вашего проекта, а бюджет не позволяет арендовать выделенный сервер, то VPS даст возможность получить похожий функционал для настройки.
Хотим обратить ваше внимание на то, что не каждая компания представляет рут доступ к VPS. В отличии от других — HyperHost предоставляет root-доступ, по запросу клиента на все тарифы . Если получение рут прав это основной параметр который вас интересует, тогда Вам к нам. Если вы захотите что-то изменить, то вам не нужно будет создавать тикет, используя root права, вы можете внести нужные изменения самостоятельно.
Как использовать root-доступ
Для серверов на операционной системе Windows, необходимо создавать удаленное подключение к рабочему столу, который использует «Администратор» в качестве имени пользователя. Вы также должны будете знать пароль администратора и IP- адрес, который связан с вашим VPS. Microsoft имеет интуитивно понятный для пользователя интерфейс для подключения к удаленному рабочему столу, которое дает вам возможность легко подключиться.
Обратите внимание, что рут прав предостаточно для того, чтобы кто-то смог подключиться к вашей VPS и уничтожить существующую информацию и настройки. Так что будьте осторожны предоставляя кому-то права. Как правило, рут права могут понадобиться, для того чтобы сделать одно или несколько изменений в вашей системе, а затем следует вернуться к своей обычной учетной записи пользователя.
Если вы для себя выбрали VPS с администрированием, то вы по-прежнему можете получить рут права. Использование дает преимущества так вы не делите ресурсы с другими клиентами, и ваш сайт, за счет этого, работает лучше и быстрее, а также уровень безопасности
VPS ознакомьтесь с возможностями разных тарифов, также вы всегда имеете возможность заказать дополнительные услуги вашей VPS. Самые простые VPS тарифы стоят не намного больше чем высокие тарифы классического виртуального хостинга, при этом вы получаете гораздо большую функциональность.
Про причины повышения нагрузки на VPS читайте детальнее .
Компания Host™ желает Вам приятной работы!
На каждый клиентский сервер мы добавляем ключ авторизации SSH для техподдержки.
Выглядит он так:
Размещается в файле /root/authorized_keys с подписью support access key.
Настораживает ключ авторизации? Вам не о чем беспокоиться, потому что:
- Поддержка использует ключ с целью решить проблему на сервере.
- Возможности поддержки ограничены:
- нет доступа к закрытой части ключа, он не может быть утерян или скомпрометирован;
- любой доступ логируется через закрытый сервер авторизации, недоступный из внешних сетей.
Чтобы что-то сделать при поломке на VDS-сервере, нужен доступ. Если пароль забыт/утерян/есть только у программиста, а он недоступен — спасает ключ авторизации SSH.
С его помощью сотрудник техподдержки получает полный защищенный доступ к серверу клиента без ввода пароля и может сразу приступить к диагностике. 10 минут, и проблема решена.
Когда у поддержки нет SSH-доступа к серверу, происходит примерно такой диалог:
Клиент: Ребят, у меня сайты не работают, что случилось??
Поддержка: Предоставьте, пожалуйста, root-доступ к серверу.
Клиент: Но я его не знаю. Программист настраивал, не могу с ним связаться. Попробуйте вот эти – пароль1, пароль2, пароль3.
Поддержка: К сожалению, указанные доступы не подошли.
Поддержка: Сбросили пароль на указанный в инструкции, диагностика показала, что на сервере закончилось место из-за логов сайтов. Почистили их, настроили ротацию. Сайты доступны.
Подобный диалог занимает около 30 минут – в 3 раза больше. Все это время сайты недоступны пользователям, и вы теряете главное: клиентов и деньги.
Разберёмся в механизме подключения по SSH. Чтобы получить доступ к удалённой машине нужны:
- публичный (известный поддержке) ключ на вашем VDS – тот самый, что мы добавляем по умолчанию;
- приватный (секретный) ключ на нашем сервере.
В процессе авторизации сначала проверяется публичный ключ – сравнивается с отпечатком на удалённой машине. Затем сообщение с вашего сервера расшифровывается приватным ключом. Подлинность ключей подтверждена, и специалист поддержки подключается к VDS.
Получается, доступ к приватному ключу даёт поддержке безграничные возможности. Обиженный/уволенный сотрудник может сотворить с клиентскими VDS такое, страшно представить. Но! У нашей техподдержки нет доступа к приватному ключу.
Подключение к серверу происходит по такой схеме:
Ключ сотрудника поддержки
У каждого из 16 специалистов свой ключ от сервера авторизации. Все они подписывают документ о неразглашении ключа. При расчёте сотрудника ключ удаляется, при приёме на работу создаётся новый.
Аутентификация по паролю выключена, а ключ нельзя подобрать или перехватить кейлоггером.
Доступ к серверу авторизации ограничен офисом. Сотрудник не может подключиться к нему (а затем и VDS клиента) из дома и безнаказанно творить, что захочет.
Это отдельный сервер для проверки подлинности пользователей. Здесь хранится приватный мастер-ключ – единый для всех клиентских VDS.
У сотрудников поддержки нет прямого доступа к серверу авторизации. Они используют ограниченную учётную запись: могут только удалить строку из файла known_hosts и подключиться к VDS клиента через SSH.
Ведётся учёт, кто-куда подключался и как долго пробыл на VDS. У каждого сотрудника свой ключ от сервера авторизации – несложно вычислить виновника проблемы.
В чём польза SSH-ключа?
- ускоряет решение срочных проблем с сервером,
- сохраняет вашу репутацию, клиентов и доход, которые теряются, когда сайт недоступен.
- Этот материал был полезен?
- Доступ к серверу администратора.
- Установите таймаут подключения
- Инструкция по активации выделенного сервера.
- Если текущий пароль неизвестен
- Сброс пароля в VMmanager
- Сброс пароля через режим восстановления
- Режим восстановления в VMmanager 5
- Режим восстановления в VMmanager 6
- Ограничение для попыток ввода пароля
- Запрет X11 Forwarding
- Группы пользователей
- Создание
- Редактирование
- Удаление
- Управление пользователями в группе
- Удаление пользователей
- Привилегии суперпользователя. Sudo
- Права доступа к файлам и папкам
- Создание нового пользователя
- Заблокировать пароль root
- 🙅♂️ Запрет входа root пользователя
- Ограничить доступ пользователей по ssh
- Отклонять подключение без пароля
- Бэкапы
- Изменение данных пользователей
- Замена стандартного порта SSH
- Config SSH
- Устанавливайте обновления
- Создание пользователей
- 🔐 Используйте SSH ключ вместо пароля
- Создание ssh ключей
- Загрузка ключа на сервер
- Если известен текущий пароль
- Смена пароля в ISPmanager
- Смена пароля через терминал
- Заключение
- Мой коктейль
- 🙅♂️ Запрет авторизации по паролю
Этот материал был полезен?
Как получить root? Получить root очень сложно (конечно, если не учитывать, что есть администраторы — полные ламера, я порой удивляюсь — за что им платят деньги).
Так что же делать? Вот здесь как раз и приходят на помощь известные нам exploit. Кстати, возможно и вы сможете когда-то написать exploit. Что для этого нужно? Много пива, знание C++, блок сигарет, дни и ночи, проведенные за изучением кода демона.
Цель (большинства) exploit — в remote access (удаленном доступе), т. е. запустив правильно exploit (при условии, что атакуемый сервер не пропатчен против него и версии совпадают) вы в большинстве случаев получите remote access.
Ну вот, мы забрались в систему (давайте просто представим это), что же теперь делать?
1. Мы знаем систему (версию, название).
2. Мы нашли дырку в ней.
3. Мы обязательно продумали, что делать дальше перед взломом.
Root доступ кпорту 21 (ftp) запрещен. Вы с помощью peflaKTopajoe (науда — машине) редактируете этот файл и разрешаете root использовать
Как? Просто поставьте перед root знак #, а затем запишитесь (Ctrl+k, затем х).
Пример (вы — root):
В редакторе вставляем перед root символ #, затем жмем Ctrl+k, a затем х.
Все, файл изменен, теперь можно выходить из системы (а то вдруг вас админ просечет?).
Вот было бы смешно посмотреть’ на администратора сервера, который придя на работу (после большого бодуна) увидит, что жесткий диск абсолютно чистый!
Теперь пишем: #ftp ip_address or host_name login: — здесь пишем root password: здесь пишем пароль!
Система пишет: login incorrect
Шанс был 1 из 1.000.000 (если не больше), что вы угадаете пароль — это явно доказывает, что подбор при взломе (ручной) практически исключен.
New unix passwd: — здесь пишем (чтобы не забыть) 12345 Результат:
Unix password too weak, please retype password: Что это значит?
Это значит, что UNIX система — не глупый MUST_DIE!
И запомните навсегда — пароль должен быть типа: Abc04k9834z — неудобно? А придется запомнить это правило!
Кстати, если вы будете когда-то подключаться к провайдеру, то выберите примерно такой пароль! Или пароль — русское напечатанное в режиме английского языка! слово (вместе) — будет выглядеть как
Но в данном случае можно еще раз ввести 12345 и получим: Retype password: — и еще раз пишем 12345 Все, пароль изменен! Переходим опять к FTP. #ftp
Ftp>open ip_address or host_name (как вы заметили, здесь немного по-другому написано, но результат не меняется)
Login: root password: 12345
И вот мы в системе! (Вы не забыли, зачем мы здесь? Мы хотели изменить WWW страницу!)
Теперь вы можете выходить из ftp написав bye: ftp>bye
И вот мы вышли из системы.
Вы спросите — зачем мы столько мучились с ftp, если мы через него ничего не изменим?
А я отвечу — мы тренируемся!
Теперь потренируемся с командой telnet (порт 23), которая соединяет нас с удаленным сервером.
Опять же запускаем exploit и после удачного входа в систему, пишем:
#telnet 127.0.6.1 80
127.0.0.1 — это локальный адрес машины называемый lobpback — т. е. машина работает сама с собой через этот ip; 80 — это порт протокола HTTP (Hyper Text Transfer Protocol) и, немного подождав, введите что-то типа:
We hack you
В ответ на это вы получите кучу тэгов, а внизу название и версию сервера (не правда ли, оригинальный способ?).
Кстати, привыкайте к оригинальности в своих действиях и к нестандартному подходу, т. к. нет ни одного общего алгоритма взлома различных систем. Также поймите, что метод взлома — это своеобразное искусство и каждый изощряется в нем по-своему!
Что же дальше?
А дальше вот что!
Где находится программа-сервер?
Это (иногда) довольно просто определить: предположим, сервер называется apache (очень распространенный web-сервер). Пишем: #which apache Получаем: /usr/sbin/apachectl
Это толком ничего нам не дает, кроме того, что мы теперь знаем, где находятся файлы конфигурации, в которых есть строка Document Root (httpd. conf)- Этот файл находится: /usr/etc/apache
Чаще всего (исходя из вышеописанного) apache DocumentRott (ho — находится:
/usr/local/www Пишем: (fed home_dir
Где home_dir — каталог www. Затем удаляем index. htm или index. html. Как узнать какой?
И вот мы видим все содержимое сервера (www). Дальше пишем:
#rm index. htm (index. html)
Что в итоге удалит главный файл.
Tfjoe index. htm (index. html)
Теперь (в редакторе joe) пишем что-то типа:
This site hacked by Vasya
Жмем Ctrl+k, а затем х.
Так же в редакторе joe вы можете написать что угодно.
Доступ к серверу администратора.
После этого можно заходить на сервер по ftp, ssh (что конечно предпочтительнее, ибо снифферы обломаются) или через ISP-manager. Но об этом в другой раз. =)
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Установите таймаут подключения
Эффективность: 🛡️ 🛡️
Если к вашему компьютеру установлено SSH соединение и на нем не было активности в течение определенного периода времени, это может представлять угрозу безопасности.
Есть вероятность, что пользователь покинул свой рабочий стол и оставил компьютер не заблокированным. Любой другой, кто проходит мимо, может сесть и начать пользоваться компьютером. Намного безопаснее установить лимит тайм-аута. Соединение SSH будет прервано, если неактивный период совпадет с лимитом времени. Мы еще раз отредактируем файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
Устанавливаем параметр ClientAliveInterval 600
.
sudo systemctl restart sshd
Инструкция по активации выделенного сервера.
С хостингом firstVDS таких проблем не возникает. Сразу после активации виртуального сервера в BILL-manager в списке выделенных серверов можно открыть инструкцию по активации выделенного сервера.
Если текущий пароль неизвестен
Сброс пароля в VMmanager
Можно изменить root через панель управления VMmanager. Войдите в Личный кабинет — Виртуальные серверы — выберите нужный сервер и нажмите на верхней панели кнопку Перейти
.
Укажите новый пароль. После этого сервер будет перезагружен:
Если у вас VMmanager 6, нажмите на Меню
— Сменить пароль
во вкладке Виртуальные машины
.
Если не получается зайти на сервер и установка пароля через VMmanager не помогает, обратитесь в техническую поддержку. Если в настройках вашего сервера разрешён доступ поддержке — пароль восстановят бесплатно. Если доступа нет, восстановление будет выполнено в рамках пакета администрирования или за разовое обращение (400 рублей).
Сброс пароля через режим восстановления
Ещё один способ сбросить пароль — через режим восстановления, он же SystemRescue. Используйте его, если предыдущие способы вам не помогли.
Далее в качестве примера использовалась ОС Ubuntu 20, но порядок действий в целом всегда одинаковый.
Режим восстановления в VMmanager 5
В случае VMmanager 5 вам нужно добавить диск с образом вручную.
Для этого останавливаете сервер — в верхнем меню иконка Стоп.
Затем нажимаете на кнопку Диски:
Далее нужно нажать на кнопку ISO:
В выпадающем меню выбираем образ systemrescuecd-amd64-6.1.8.iso:
После чего можно запускать сервер — кликните на иконку Старт, если всё сделано верно, вы увидите иконку добавленного вами образа и сможете зайти в VNC:
Загрузка диска в VNC будет выглядеть следующим образом, нам нужен первый пункт, так что можете просто нажать Enter (данный пункт будет выбран автоматически по истечении времени, так что данное меню вы можете и не увидеть):
После загрузки видим командную строку, в которой и предстоит работать:
Далее нужно проверить, на каком диске у нас находится ваша ОС. Для этого вводим команду fdisk -l
и видим, что корневая файловая система находится в разделе /dev/vda2
:
С этим разделом нам и нужно работать. Для того, чтобы сбросить пароль, необходимо зайти в систему, для этого мы примонтируем /dev/vda2
в /mnt
, используя команду вида mount /dev/vda2 /mnt
:
В другой ОС может измениться раздел, который нужно монтировать, например, на Centos 7 он другой:
После монтирования нужно зайти под пользователем root в систему, для этого используем команду chroot /mnt
:
А далее мы просто сбрасываем пароль с помощью команды passwd
. После ввода данной команды нужно будет ввести новый пароль и повторно подтвердить его:
На этом моменте пароль сброшен, нужно выйти из файловой системы с помощью комбинации CTRL+ D или команды exit
и размонтировать раздел с помощью команды umount /mnt
:
После требуется отключить сервер — иконка Стоп. И убрать образ rescuecd — кликаем на иконку Диски:
Выбираем образ и нажимаем Отсоединить:
Можно запускать сервер и подключаться.
Режим восстановления в VMmanager 6
Теперь проведем такую же манипуляцию для VMmanager 6, тут все несколько проще, так как вам не нужно добавлять диск и отключать его вручную — у вас будет пункт Режим восстановления. Для того чтобы его увидеть, нужно нажать на три точки, появится выпадающее меню:
Далее нужно выбрать Запустить режим и перезагрузить, обычно перезагрузка и монтирование диска занимает меньше минуты:
После чего нужно подключиться к серверу по VNC, для этого еще раз нажимаем на значок трех точек и выбираем пункт VNC:
Подключившись, мы увидим меню. Необходимо выбрать первый вариант:
После загрузки видим командную строку, в которой и предстоит работать:
Далее нужно проверить, на каком диске у нас находится ваша ОС. Для этого вводим команду fdisk -l
и видим, что корневая файловая система находится в разделе /dev/vda2
:
С этим разделом нам и нужно работать. Для того, чтобы сбросить пароль, необходимо зайти в систему, для этого мы примонтируем /dev/vda2
в /mnt
, используя команду вида mount /dev/vda2 /mnt
:
В другой ОС может измениться раздел, который нужно монтировать, например, на Centos 7 он другой:
После монтирования нужно зайти под пользователем root в систему, для этого используем команду chroot /mnt
:
У вас может возникнуть ошибка chroot: failed to run command ‘/bin/zsh’: no such file or directory, в этом случае вам нужно будет немного исправить команду chroot
, она должна выглядеть так: chroot /mnt /bin/bash
:
А далее мы просто сбрасываем пароль с помощью команды passwd
. После ввода данной команды нужно будет ввести новый пароль и повторно подтвердить его:
На этом моменте пароль сброшен, нужно выйти из файловой системы с помощью комбинации CTRL+ D или команды exit
и размонтировать раздел с помощью команды umount /mnt
:
Далее можно отключать режим восстановления и подключаться к серверу.
Ограничение для попыток ввода пароля
Эффективность: 🛡️ 🛡️
Если вы по какой-то причине не хотите использовать подключение по ssh ключам, то необходимо ограничить количество попыток аутентификации. Это предотвратит попытки подбора пароля и атаки методом перебора.
После обозначенного количества запросов аутентификации пользователь будет отключен от SSH-сервера. По умолчанию ограничений нет. Но это быстро исправить.
Нам нужно отредактировать ваш файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
Прокрутите файл до тех пор, пока не увидите строку, начинающуюся с MaxAuthTries 0
. Удалите хеш с начала строки, измените цифру 0 на желаемое. Например 3.
После внесения изменений сохраните файл и перезапустите демон SSH:
sudo systemctl restart sshd
Запрет X11 Forwarding
Эффективность: 🛡️ 🛡️
X11 Forwarding позволяет удаленным пользователям запускать графические приложения с вашего сервера в сеансе SSH. В руках злоумышленника графический интерфейс может облегчить их нехорошие цели.
Стандартная мантра в области кибер-безопасности:
если у вас нет веской причины включить что-то, выключите это
Мы сделаем это, отредактировав файл конфигурации SSH:
sudo nano /etc/ssh/sshd_config
Отредактируйте строчку X11Forwarding yes
на X11Forwarding no
.
Перезапустите службу SSH:
sudo systemctl restart sshd
Группы пользователей
Информация о группах хранится в файле /etc/group
. Работа с группами пользователей куда проще.
Группы применяются для делегирования прав доступа на определённые файлы, папки, скрипты сразу нескольким пользователям. Живой пример: работа с FTP-сервером. Вы выбираете какую-то директорию для работы с файлами, создаёте группу пользователей и присваиваете ей выбранную папку. Теперь вам не нужно отдельно настраивать права каждому новому пользователю — достаточно добавить его в эту группу, и он автоматически получит доступ к FTP-каталогу.
Создание
Для создания групп используется команда groupadd
:
groupadd new-group
Из параметров можно выделить следующие:
Редактирование
Для редактирования групп используется команда groupmod
. Список изменений задаётся с помощью параметров:
Например, если нам нужно изменить имя группы test-group
на имя named-group
, команда будет выглядеть так:
groupmod -n named-group test-group
Удаление
Нельзя удалить группу, если она указана в качестве основной для какого-то существующего пользователя. Сначала нужно предварительно удалить этого пользователя из группы.
Само удаление группы выполняется одной командой:
groupdel test-group
Как и в случае удаления пользователей, нужно вручную проверить, что на сервере не осталось данных, принадлежащих удалённой группе.
Управление пользователями в группе
Базовым инструментом для управления группами является утилита gpasswd
. Она имеет несколько параметров, но с одной особенностью — в отличие от предыдущих примеров, здесь большинство параметров (кроме -A
и -M
) не сочетаются. То есть в команде может быть только один параметр за раз.
Структура команды проста:
gpasswd [что сделать] [в какой группе]
Рассмотрим опции команды подробнее:
То есть если нам потребуется добавить пользователя в новую группу, достаточно будет использовать следующую команду:
gpasswd -a new-user test-group
usermod -a -G new-group test-user
usermod -g new-group test-user
Помимо этого, любой пользователь может сам авторизоваться и добавиться в новую группу с помощью команды:
newgrp new-group
Эта команда позволяет переключить группу пользователя в рамках текущей сессии, а также автоматически добавляет запрошенную группу в список групп пользователя.
Удаление пользователей
Как и в случае с редактированием, перед удалением пользователя нужно убедиться, что под ним отсутствуют активные процессы, не редактируются файлы. Иначе существует риск сбоя системы. В программу встроен механизм защиты, поэтому она не позволит удалить пользователя, если он авторизован или под ним работают какие-то службы.
userdel [что удаляем] [кого удаляем]
Основных параметра два:
После удаления пользователей важно вручную проверить, что на сервере не осталось файлов или директорий, принадлежащих удалённому пользователю.
Привилегии суперпользователя. Sudo
Итак, мы знаем, что на сервере есть три типа пользователей: администраторы (корневой пользователь root
), локальные пользователи (люди, которым мы предоставляем учётные записи для работы с сервером) и системные пользователи (сущности, от имени которых запускаются те или иные процессы). То есть реально для управления системой используются только первые два типа пользователей. Их основное различие — в объёме прав доступа.
По умолчанию после установки операционной системы на сервере присутствует только один пользователь — администратор root
. Он имеет полные права доступа ко всем процессам и данным сервера.
Если создать локального пользователя, по умолчанию он будет иметь доступ только к тем файлам и каталогам, которые принадлежат ему либо группе пользователей, в которую он входит. Помимо прочего, при работе в командной оболочке ему будет закрыт доступ к ряду системных инструментов, необходимых для расширенной настройки или диагностики сервера. При попытке выполнить их под непривилегированным пользователем вы будете видеть ошибки, намекающие, что для работы с этими инструментами требуются права повыше:
Тем не менее, основная часть работы с конечными данными на сервере происходит именно под локальным пользователем — например, загрузка и изменение файлов сайтов. Если вы загрузите на сервер файл под root
-ом, файл будет принадлежать ему, а не пользователю, в папку которого загружен. Соответственно, потом это может привести к ошибкам, если вручную не изменить владельца загруженного файла.
Когда вы полностью настроите ваш сервер, работа под root
-ом вообще может стать опасной. Случайная ошибка в команде на удаление папки может запросто скосить все ваши труды по разворачиванию системы. Да и в целом сам факт наличия пользователя root
на сервере при неправильном подходе к безопасности может стать фатальным — если злоумышленник получит к нему доступ, он получит неограниченный контроль над всем содержимым сервера.
С учётом всего этого при администрировании оптимальной считается следующая практика: пользователь root
как он есть отключается, а его привилегии делегируются узкому кругу локальных пользователей. Это даёт сразу несколько преимуществ:
- повышается уровень внешней безопасности (отсутствие
root
отсекает часть автоматических попыток взлома); - ограничивается объём административных прав — повышение привилегий используется для конкретных рабочих операций и действует ограниченное время.
Для делегирования прав суперпользователя локальные пользователи добавляются в специальную группу. Способ настройки отличается в зависимости от используемой операционной системы:
Ubuntu и Debian:
Для предоставления прав пользователи добавляются в группу
sudo
:usermod -a -G sudo test-user
Для предоставления прав пользователи добавляются в группу
wheel
:usermod -a -G wheel test-user
Можно делегировать права пользователям по отдельности — через файл /etc/sudoers
Для работы с ним нужно вызвать специальный редактор:
visudo
В этом файле можно тонко настроить объём делегируемых прав — вплоть до списка команд, которые пользователям разрешено вызывать от имени администратора.
Проверить, может ли пользователь использовать sudo
, можно с помощью команды:
sudo -l -U test-user
Чтобы выполнить ту или иную команду с правами суперпользователя, перед ней вызывается команда sudo
:
sudo groupadd newgroup
Для подтверждения система запросит ввести пароль текущего пользователя (символы при вводе пароля не отображаются — введите пароль «вслепую» или скопируйте и вставьте кликом правой кнопки мыши). После ввода команда будет отправлена на исполнение. Также в течение пяти следующих минут (по умолчанию) вы сможете запускать команды от имени суперпользователя без использования sudo
и повторного ввода пароля.
Количество времени, которое действуют права суперпользователя после вызова sudo
, можно изменить через настройки в /etc/sudoers
. Запрос пароля можно отключить там же.
sudo -s
С управлением пользователями разобрались, идём дальше. Как было сказано выше, чтобы локальный пользователь мог начать работу на сервере, администратор (root
или пользователь c привилегиями sudo
) должен настроить права доступа к файлам и папкам, которые понадобятся этому пользователю. Рассмотрим этот вопрос подробнее.
Права доступа к файлам и папкам
Создание нового пользователя
Эффективность: 🛡️ 🛡️ 🛡️
Входить на сервер как root пользователь плохая практика. Лучше входить в систему как обычный пользователь и использовать sudo
для выполнения действий, требующих привилегий root.
Root — это учётная запись, которая имеет доступ ко всем без исключения действиям. Да, вообще ко всем.
Добавим нового пользователя, для альтернативы root.
sudo adduser имя_пользователя
Если вас не попросили придумать пароль для пользователя, то установите его вручную.
passwd имя_пользователя
Я предполагаю, что мы заблокируем root пользователя, поэтому после этого добавим пользователя в группу sudo:
usermod -aG sudo имя_пользователя
На некоторых ОС эта группа называется wheel
.
usermod -aG wheel имя_пользователя
Для каждого пользователя sudo можно задать ограничения: разрешить запускать только определенные команды от имени супер пользователя.
Заблокировать пароль root
Эффективность: 🛡️ 🛡️ 🛡️ 🛡️
Я обычно блокирую пароль для пользователя root. Это не позволит обычному пользователю перейти в root пользователя с помощью команды su
.
Для этого заходим на сервер под пользователем, обладающим правами sudo. И вводим следующую команду:
sudo passwd -l root
🙅♂️ Запрет входа root пользователя
Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️
Вы не должны позволять root входить в ваш SSH-сервер. Если злоумышленник получит доступ к root-аккаунту, то он будет иметь полный контроль над сервером. Подключение должно быть разрешено только обычным пользователям. Если им нужно выполнить административную задачу, им также следует использовать sudo
.
Если вы вынуждены разрешить пользователю root вход в систему, вы можете хотя бы заставить его использовать ключи SSH.
Открываем текстовый файл в любом редакторе:
sudo nano /etc/ssh/sshd_config
Нас интересует параметр PermitRootLogin
:
- Если вы хотите вообще запретить пользователю root вход в систему, установите
PermitRootLogin no
. - Если вы собираетесь разрешить пользователю root входить в систему, но хотите использовать только SSH-ключи, установите
PermitRootLogin prohibit-password
.
После внесения вышеуказанных изменений сохраните и закройте файл. Затем перезапустите службу SSH, чтобы внесенные изменения вступили в силу.
systemctl restart sshd
Ограничить доступ пользователей по ssh
Чтобы разрешить доступ по ssh только нужным пользователям, добавьте следующее в sshd_config
:
// ... ... ... ... ...
AllowUsers user1, user2
// ... ... ... ... ...
В качестве альтернативы вы можете разрешить всем пользователям входить в систему через SSH, но запретить только нескольким пользователям, с помощью следующей строки в sshd_config
:
// ... ... ... ... ...
DenyUsers user1, user2, user3
// ... ... ... ... ...
Отклонять подключение без пароля
Эффективность: 🛡️ 🛡️
Хотя это плохая практика, системный администратор Linux может создать учетную запись пользователя без пароля. Это означает, что запросы на удаленное соединение от этой учетной записи не будут иметь пароля для проверки. Эти соединения будут приняты, но не аутентифицированы.
Настройки по умолчанию для SSH принимают запросы на соединение без паролей. Мы можем очень легко это изменить и обеспечить аутентификацию всех подключений. Нам нужно отредактировать ваш файл конфигурации SSH, добавив:
PermitEmptyPasswords no
Бэкапы
Регулярно создавайте резервные копии данных вашего сервера и храните их в безопасном месте. Это поможет вам восстановить данные в случае успешной атаки.
Изменение данных пользователей
pgrep -l -u
Проверить, авторизован ли пользователь, можно с помощью уже известной команды:
pinky
usermod [что поменять] [для какого пользователя]
Набор параметров расширен дополнительными опциями:
usermod -l new-test-user -m -d /home/new-test-user -c "Чак Норрис" -u 100500 -e 3000-01-01 -f -1
При изменении данных пользователя система предпримет попытку автоматически указать новые данные для всех файлов и папок пользователя. Тем не менее, после редактирования нужно всё перепроверить и исправить права доступа, где они не изменились автоматически.
Замена стандартного порта SSH
Эффективность: 🛡️ 🛡️
Большинство ботов сканируют только дефолтный порт (22). Сменив его, вы защититесь от ботов работающих на дурака.
Перед сменой порта разберитесь, какой firewall стоит на вашей системе. Например на CentOS/RHEL это скорее всего firewalld.
Вам необходимо открыть новый порт для ssh, и закрыть старый. Например, если у вас установлен firewalld, а порт вы выбрали 58291, то команды для открытия порта будут такие:
firewall-cmd --zone=public --add-port=57622/tcp --permanent
firewall-cmd --reload
Для изменения порта нужно отредактировать файл /etc/ssh/sshd_config
. В этой статье мы будем часто этим заниматься. Всякий раз, когда вам нужно отредактировать этот файл, используйте следующую команду:
sudo nano /etc/ssh/sshd_config
В открывшемся файле найдите следующую строку: #Port 22
Удалите решетку и измените номер порта, например на 58291. Номер не должен превышать 65535. Рекомендую выбрать пятизначное значение.
Также удостоверьтесь, что выбранное вами значение не конфликтует с другими сервисами в системе, например mysqld использует порт 3306, httpd — 80, ftpd — 21.
После этого необходимо перезапустить службу ssh:
sudo systemctl restart sshd
Для входа с использованием нового порта используйте следующий флаг:
ssh username@remote_host -p 58291
Config SSH
Чтобы не запоминать порты ко всем своим серверам, можно воспользоваться файлом ~.ssh/config
. Создайте этот файл, если его нет на вашей локальной машине.
В этот файл записываются параметры для подключения к серверу, после чего можно использовать алиас, вместо адреса сервера и имени пользователя.
ssh my_server
Также можно добавить другие параметры в конфигурацию, например, использовать разные ключи ssh для аутентификации или настроить прокси-серверы.
Устанавливайте обновления
Эффективность: 🛡️ 🛡️ 🛡️
Одна из самых важных и простых вещей, которую вы можете сделать для защиты вашего Linux-сервера, — это постоянно обновлять все программное обеспечение.
Это включает операционную систему, веб-сервер и любое другое программное обеспечение, работающее на вашем сервере. Разработчики часто выпускают исправления и обновления программного обеспечения для устранения уязвимостей и ошибок в системе безопасности. Если не устанавливать эти обновления, ваш сервер может стать уязвимым для атак.
Для Fedora, CentOS, RHEL команда на обновление выглядит так
sudo dnf upgrade
Для Ubuntu / Debian
sudo apt update && sudo apt upgrade -y
Создание пользователей
Процесс добавления пользователя состоит из двух шагов: создания пользователя и настройки пароля.
useradd [как создать] [как назвать]
useradd -D
Все эти настройки применяются, если использовать самый простой вариант команды создания пользователя без параметров:
useradd
Но обычно нам требуется добавить пользователя со специфическими настройками — для этого используется расширенный вариант этой команды. Перечислим основные опции:
В итоге получится вот такая сборная солянка из настроек:
useradd -m -u 666 -d /home/users/test-user -c "Тестовый пользователь" -e 2060-01-01 -s /bin/bash test-user
Очень важно после создания пользователя настроить для него надёжный пароль. Для этого нужно ввести следующую команду:
passwd test-user
Система предложит ввести и подтвердить пароль. На этом процесс создания пользователя можно считать завершённым.
🔐 Используйте SSH ключ вместо пароля
Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️ 🛡️
Сервер OpenSSH поддерживает различную аутентификацию. Пароли можно угадывать, взламывать или подбирать методом перебора. Ключи SSH не подвержены таким атакам.
Когда вы генерируете ключи SSH, вы создаете пару ключей. Один из них — публичный (открытый) ключ, другой — приватный (закрытый). Открытый ключ передается на сервера, к которым вы хотите подключиться. Закрытый ключ, хранится в безопасности на вашем компьютере.
Когда вы делаете запрос на подключение, удаленный компьютер использует свою копию вашего открытого ключа для создания зашифрованного сообщения, которое отправляется обратно на ваш компьютер. Поскольку он был зашифрован с помощью вашего открытого ключа, ваш компьютер может расшифровать его с помощью своего закрытого ключа.
Затем ваш компьютер извлекает из сообщения некоторую информацию, в частности идентификатор сеанса, шифрует ее и отправляет обратно на сервер. Если сервер может расшифровать его с помощью своей копии вашего открытого ключа, и если информация внутри сообщения совпадает с тем, что сервер отправил вам, ваше соединение будет подтверждено как исходящее от вас.
Создание ssh ключей
И так, генерация ключей ssh выполняется командой:
ssh-keygen
Утилита предложит вам выбрать расположение ключей. По умолчанию ключи располагаются в папке ~/.ssh/
. Лучше ничего не менять, чтобы все работало по умолчанию и ключи автоматически подхватывались. Секретный ключ будет называться id_rsa
, а публичный id_rsa.pub
.
Затем утилита предложит ввести пароль для дополнительного шифрования ключа на диске. Его можно не указывать, если не хотите.
Теперь у вас есть открытый и закрытый ключи SSH и вы можете использовать их для проверки подлинности. Дальше нам осталось разместить открытый ключ на удаленном сервере.
Никогда и никому не передавайте свой закрытый ключ.
Загрузка ключа на сервер
Самый простой способ скопировать ключ на удаленный сервер — это использовать утилиту ssh-copy-id
. Она входит в пакет программ OpenSSH. Но для работы этого метода вам нужно иметь пароль доступа к серверу по SSH.
ssh-copy-id username@remote_host
Если вы хотите указать путь до публичного ключа, используйте команду:
ssh-copy-id -i /path_to_key username@remote_host
При первом подключении к серверу система может его не распознать, поэтому вам нужно ввести yes. Затем введите ваш пароль пользователя на удаленном сервере. Утилита подключится к удаленному серверу, а затем использует содержимое ключа id_rsa.pub
для загрузки его на сервер в файл ~/.ssh/authorizedkeys
. Дальше вы можете выполнять аутентификацию с помощью этого ключа.
Если такой способ по какой-либо причине для вас не работает, вы можете скопировать ключ по ssh вручную. Мы создадим каталог ~/.ssh
, а затем поместим наш ключ в файл authorized_keys
с помощью символа >>
, это позволит не перезаписывать существующие ключи:
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Здесь вам тоже нужно набрать yes, если вы подключаетесь к новому серверу, а затем ввести пароль.
Также необходимо убедиться, что имеется возможность входа по ssh ключу. Для этого в файле /etc/ssh/sshd_config
должна присутствовать строка PubkeyAuthentication yes
.
После этого вы можете использовать созданный ключ для аутентификации на сервере:
ssh username@remote_host
Если вы не захотели создать ssh ключ с доступом по паролю, то вы сразу же будете авторизованы, что очень удобно. Иначе, сначала вам придется ввести фразу-пароль для расшифровки ключа.
Если известен текущий пароль
Смена пароля в ISPmanager
Зайдите в панель под пользователем root — в правом верхнем углу перейдите в пункт Настройки
:
Далее, укажите текущий пароль и дважды новый, нажмите ОК
:
Смена пароля через терминал
Можно сменить root пароль через терминал. Зайдите на сервер по SSH под пользователем root
, напишите команду passwd
, после чего дважды введите новый пароль:
Заключение
В этом руководстве представлен необходимый минимум для усиления защиты сервера Linux. Дополнительные уровни безопасности могут и должны быть включены в зависимости от того, как используется сервер. Эти уровни могут включать такие вещи, как индивидуальные конфигурации приложений, программное обеспечение для обнаружения вторжений и включение контроля доступа, например, двухфакторной аутентификации.
Мой коктейль
Это все были разрозненные советы, из которых вы можете собрать свой “рецепт”. Какой рецепт использую я сам?
Чаще всего мой рецепт выглядит так:
- Смена порта SSH
- Создание нового sudo пользователя
- Блокировка входа по паролю для всех пользователей
- Блокировка входа root на сервер
- Блокировка пароля root
- Регулярные бэкапы
🙅♂️ Запрет авторизации по паролю
Эффективность: 🛡️ 🛡️ 🛡️ 🛡️ 🛡️
Логическим продолжением использования ключей SSH является полное отключение аутентификации по паролю для всех пользователей.
Прежде чем запрещать вход по паролю, проверьте возможность входа по ssh ключу.
Нам нужно отредактировать ваш файл конфигурации SSH.
sudo nano /etc/ssh/sshd_config
Находим строчку PasswordAuthentication yes
и меняем ее на PasswordAuthentication no
.
Теперь сохраните файл и перезапустите службу ssh:
sudo service ssh restart