Вступление
Основная часть системного администрирования – конфигурирование и управление пользователями и группами. Эта задача включает в себя мониторинг возможностей получения доступа в систему всех ее подразделений.
Данное руководство описывает основные понятия об управлении пользователями и регистрации их авторизации.
Эти понятия изучаются на Ubuntu 12.04 VPS, но данные действия можно выполнить на любом современном дистрибутиве Linux.
Как известно, некоторые из пользователей сервера могут быть связаны с сервисами, а потому они не предназначены для использования в качестве обычных учетных записей.
Данное руководство рассматривает несколько способов ограничения возможности входа в систему таких пользователей.
Базы данных
Не менее важным является защита данных находящихся в некой СУБД. Рассмотрим на примере MariaDB.
После успешной установки необходимо выполнить одну команду:
sudo mysql_secure_installation
После чего, программа задаст несколько вопросов касаемых безопасности.
Результат будет примерно таким:
Также не рекомендуется выполнять соединения от имени пользователя root. Лучше создать одного пользователя и с ограниченными правами. Для сайта будет достаточно следующих прав для выполнения запросов вида:
SELECT – выборка из базы
UPDATE – Обновление записей
INSERT – добавление новых записей.
DELETE – удаление записей (иногда, но лучше не использовать).
Не рекомендуется наделять правами:
ALTER – изменение структуры таблиц
DROP – удаление баз данных и таблиц базы
Вполне разумным является и то, чтобы один пользователь был для одной базы данных.
Безопасное соединение по ssh
Важно! Данный пример подходит для Linux и MacOS.
В начале проверяем генерировались ли ранее ключи для данной учетной записи:
ls ~/.ssh/id_rsa*
Если результат будет не пустым, то следует пропустить шаг создания ключа. У нас пусто – создаем командой:
ssh-keygen -t rsa
В ходе выполнения программы, может быть запрошена парольная фраза и ее подтверждение. Своего рода защита ключа паролем.
Запрещаем использование root в ssh – блог про линукс
Сегодня, сидя на работе, я забрел через SSH на один удаленный сервер, проблема в том, что при вводе рутового пароля он отказался пускать меня. В старые времена такое положение вещей меня бы озадачило, но тут я сразу смекнул в чем дело, root’y доступ на сервер просто запрещен. Мне такая штука очень понравилась, и так как часто с рабочего компьютера захожу на свой ноутбук по SSH я решил примутить такую же и у себя, для пущей безопасности. Зайдя на сервер я немного поковырялся в конфигах SSH и нашел то что искал.
Для чего необходимо закрывать доступ root’y? Ответ довольно простой, кто-нибудь может перехватить или украсть пароль, после чего получить права суперпользователя на сервере где у вас крутиться Web-шоп, правда неприятно?
Так вот, чтобы решить эту проблему необходимо отредактировать файл sshd_config, который является основным конфигурационным файлом для службы sshd. В разных системах он может находиться по разному, но зачастую это /etc/ssh/
Напомню, чтобы иметь возможность присоединяться по SSH к компьютеру, нужно установить пакет OpenSSH-server как один из вариантов:
#sudo apt-get install openssh-server
Открываем конфиг любым текстовым редактором:
#gedit /etc/ssh/sshd_config/
Найдите в нем секцию, содержащую строку «PermitRootLogin»
# Authentication:
LoginGraceTime 120PermitRootLogin yes
StrictModes yes
Отредактируйте строку как показано ниже для отключения возможности подключаться через ssh рутом, изменив «yes» на «no».
PermitRootLogin no
После этого перезапустите sshd:
#/etc/init.d/sshd restart
Теперь вы в безопасности.
Немного о свойствах файла sshd_config и простейших параметрах которые стоит сразу изменить.
Port 22 — номер порта можно и поменять, в особенности если SSH пользуетесь вы один, а не целая группа админов. Именно 22-ой порт стоит первый в списке для сканирования и атак.
И напоследок, всем кто часто юзает SSH советую детально изучить тему безопасности, прочитать маны, дабы предостеречь себя от несчастных случаев…
Защита ssh-соединений с помощью fail2ban
Fail2Ban – приложение, которое позволяет блокировать SSH-подключения с определенного IP-адреса по достижении лимита. Разумно полагать, что если пользователь знает пароль к серверу, но ошибается при вводе, то достаточно будет 3-5 попыток. В случае с авторизацией по ключу – достаточно 1-2 попыток. В противном случае это брутфорс.
Как ограничить вход с помощью /etc/nologin
В экстренных ситуациях бывает необходимо запретить вход всем аккаунтам, кроме root.
Это может случиться из-за углубленного технического обслуживания, или потому, что одна или несколько учетных записей были взломаны.
В любом случае, это легко сделать, создав файл «/etc/nologin»:
sudo touch /etc/nologin
Это действие блокирует вход любого пользователя, не имеющего привилегий root.
Пустой файл просто сбрасывает пользователей обратно в локальную оболочку без объяснения причин.
Дело в том, что пользователю просто возвращается содержимое файла. Если добавить в файл сообщение, то пользователи получат объяснение ошибки входа:
Как ограничить вход с помощью /etc/shadow
Другой подобный способ ограничения доступа – использование файла «/etc/shadow». Данный файл содержит хешированные пароли каждого пользователя системы.
Чтобы просмотреть хешированные пароли, введите:
sudo less /etc/shadowroot:$6$r79Dod3Y$3hi3QklpGEQMxwQGEss4ueNNPkoUrqUe3SwyAacaxl.Lmgq1r9i4mTblV1z6NfKMNXH1Cpnq.4iKhOiQd7Riy1:15953:0:99999:7:::daemon:*:15455:0:99999:7:::bin:*:15455:0:99999:7:::sys:*:15455:0:99999:7:::sync:*:15455:0:99999:7:::games:*:15455:0:99999:7:::man:*:15455:0:99999:7:::. . .
Второе поле (которое начинается с «$6$r79Dod3Y#3…» в первой строке) содержит хешированное значение пароля.
Как можно видеть, учетные записи системы вместо сложного хешированного значения имеют звездочку (*). Учетным записям со звездочкой во втором поле пароль не был установлен и они не могут пройти регистрацию при помощи пароля.
Значение пароля можно деактивировать (сделав его, по сути равным значению «*»), установив перед хешированным значением восклицательный знак (!).
Два инструмента могут заблокировать указанную учетную запись.
Команда passwd может быть заблокирована с помощью флага «-l» и разблокирована флагом «-u»:
Как ограничить доступ с помощью /etc/passwd
Один из способов ограничения возможности входа – это задать регистрационной оболочке учетной записи специальное значение.
Примером этому является пользователь «messagebus» в файле «/etc/passwd»:
less /etc/passwd | grep messagebusmessagebus:x:102:104::/var/run/dbus:/bin/false
последнее значение – это оболочка или команда, которая запускается в случае успешного входа. Сейчас это «/bin/false».
Если войти в учетную запись messagebus как root-пользователь, ничего не произойдет, так как переключиться на этого пользователя не получится:
sudo su messagebus
Попробуйте переключиться на пользователя sshd:
sudo su sshdThis account is currently not available.
Это уведомление появилось потому, что оболочка пользователя sshd помещена в «/usr/sbin/nologin».
less /etc/passwd | grep sshdsshd:x:103:65534::/var/run/sshd:/usr/sbin/nologin
Итак, как же ограничить вход пользователей с помощью этих методов?
Как отключить доступ пользователю root по ssh
Прочитав этот совет, вы сможете защитить ваш Linux-сервер, отключив суперпользователю root доступ по SSH.
Откройте в вашем любимом текстовом редакторе (к примеру, в Vi) конфигурационный файл SSH (/etc/ssh/sshd_config): sudo vi /etc/ssh/sshd_config
Найдите в разделе ‘Authentication’ строку с параметром PermitRootLogin и измените ее вид на:# Authentication:
Это позволит отключить возможность удаленного доступа для пользователя root.
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
Внимание! Советую вам, перед выполнением вышеуказанного, создать пользователя, имя которого отлично от ‘root’, и назначить ему права суперпользователя. Это позволит вам удаленно выполнять административные задачи.
Настройка firewall
Хорошей привычкой является использование файрволла. Это главный инструмент безопасности любого сервера и/или сети находящейся за ним. Фильтрация трафика позволяет избежать различного рода вторжения. Мы рекомендуем предоставлять доступ только к тем TCP/UDP-портам, которые на самом деле необходимы. По критичным портам либо закрывать доступ к ним, либо ограничивать доступ к ним – только с определенных IP-адресов.
IPTables — утилита командной строки, стандартный интерфейс управления работой межсетевого экрана netfilter в Linux. Для использования IPTables требуются права суперпользователя. Существуют и альтернативные решения UFW и ShoreWall для Debian/Ubuntu и FirewallD для CentOS и Fedora.
Мы же рассмотрим настройку непосредственно IPTables.
Для просмотра действующих правил фильтрации используют следующие команды.
IPv4:
sudo iptables -L
IPv6:
sudo ip6tables -L
Стандартный вывод выглядит так:
Это означает, что в режиме работы по умолчанию разрешен весь входящий, исходящий и пересылаемый трафик.
Настройка межсетевого экрана и политика его работы зависит от работы ваших сервисов, а также сервисов локальной сети (частный случай проброс порта для RDP). Прежде чем их применять проверьте совпадают ли наши примеры с вашими задачами.
Для IPv4 (файл /tmp/v4):
*filter
# Allow all loopback (lo0) traffic and reject traffic
# to localhost that does not originate from lo0.
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -s 127.0.0.0/8 -j REJECT
# Allow ping.
-A INPUT -p icmp -m state –state NEW –icmp-type 8 -j ACCEPT
# Allow SSH connections.
-A INPUT -p tcp –dport 22 -m state –state NEW -j ACCEPT
Общие требования к учетным данным
Для защиты сервера и баз данных следует, даже если вы не используете авторизацию по ключу, логичным будет использовать грамотно созданные имя пользователя и пароль.
Так как подбор имен и паролей (брутфорс) происходит по словарю, логично было бы использовать такое имя пользователя, которое с наименьшей вероятностью окажется в словаре. Например, xd11rn и подобные. Не стоит использовать слишком короткие имена пользователей. Главное, потом не забыть имя пользователя.
К паролям есть ряд общих требований:
- не использовать пароли короче 10 символов;
- использовать буквы верхнего и нижнего регистра, а также цифры;
- использовать специальные символы, но только там, где это возможно.
Отключить доступ по ssh от имени "root", но?
Вопрос до боли тривиален.
Но возникла такая потребность:
Есть пользователи в группе ROOT (0), и собственно сам root включен.
Собственно отключение root”а:
в “/etc/ssh/sshd_config” ставил “PermitRootLogin no”.
Но остальные юзеры с правами root и из группы root не могут подключаться по ssh и sftp
Как сделать так, чтобы был отключен ssh только для пользователя root, а остальные из группы root могли подключаться по ssh и sftp ?
Системные обновления
Своевременно устанавливать обновления для ОС – хорошая привычка. Разумеется, бывают случаи, когда обновление влечет за собой негативные последствия, но это происходит крайне редко. Данный процесс можно упростить, если использовать автообновления системы.
В разных дистрибутивах это делается по-своему:
Debian/Ubuntu используют пакет unattended upgrades для автоматических обновлений
CentOS использует yum-cron
В дистрибутиве Fedora используется dnf-automatic
Если сервер под критической нагрузкой, то следует использовать штатные средства.
Ubuntu/Debian:
sudo apt-get update
sudo apt-get upgrade
Fedora/Centos:
yum update
Важно! Обновление коснется только тех пакетов и приложений которые не были установлены путем компилирования и получены как исполняемые файлы.
Системные пользователи с ограниченными правами.
Подключение к серверу под учетной записью суперпользователя root небезопасно. Кроме того, мы рекомендуем сменить любого non-root пользователя присутствующего в системе по умолчанию. Да, хотя бы даже пароль.
Изменение пароля происходит командой:
passwd
Команду изменит пароль для того пользователя, от которого запускается. Если нужно изменить пароль для другого пользователя, следует выполнять команду следующим образом.
Для Ubuntu/Debian:
Удаление правил
Как пример, удалим правило, которое мы добавили ранее:
sudo iptables -D INPUT 9
Т.е. будет удалено правило, в котором мы разрешали подключение к 8080 порту.
Важно! Применяемые правила не применяются автоматически. Для этого необходимо выполнить действия применимые только для вашего дистрибутива, которые мы рассматривали выше.
Итоги
Идентификация пользователей в Linux – достаточно гибкая область управления системой, так как одни и те же задания можно выполнить при помощи различных простых инструментов.
Tags: