Запрещаем использование root в SSH
Сегодня, сидя на работе, я забрел через SSH на один удаленный сервер, проблема в том, что при вводе рутового пароля он отказался пускать меня. В старые времена такое положение вещей меня бы озадачило, но тут я сразу смекнул в чем дело, root’y доступ на сервер просто запрещен. Мне такая штука очень понравилась, и так как часто с рабочего компьютера захожу на свой ноутбук по SSH я решил примутить такую же и у себя, для пущей безопасности. Зайдя на сервер я немного поковырялся в конфигах SSH и нашел то что искал.
Для чего необходимо закрывать доступ root’y? Ответ довольно простой, кто-нибудь может перехватить или украсть пароль, после чего получить права суперпользователя на сервере где у вас крутиться Web-шоп, правда неприятно?
Так вот, чтобы решить эту проблему необходимо отредактировать файл sshd_config , который является основным конфигурационным файлом для службы sshd . В разных системах он может находиться по разному, но зачастую это /etc/ssh/
Напомню, чтобы иметь возможность присоединяться по SSH к компьютеру, нужно установить пакет OpenSSH-server как один из вариантов:
#sudo apt-get install openssh-server
Открываем конфиг любым текстовым редактором:
Найдите в нем секцию, содержащую строку «PermitRootLogin»
# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
Отредактируйте строку как показано ниже для отключения возможности подключаться через ssh рутом, изменив «yes» на «no».
После этого перезапустите sshd:
Немного о свойствах файла sshd_config и простейших параметрах которые стоит сразу изменить.
Port 22 — номер порта можно и поменять, в особенности если SSH пользуетесь вы один, а не целая группа админов. Именно 22-ой порт стоит первый в списке для сканирования и атак.
- PermitRootLogin no — об этой строчке собственно и вся статья. Повторяться не стоит.
- AllowUsers sasha — этого параметра нет в sshd_config, допишите его обязательно. sasha — имя вашего юзера с ограниченными правами.
- PermitEmptyPasswords no — Запрет на установку пустого пароля.
И напоследок, всем кто часто юзает SSH советую детально изучить тему безопасности, прочитать маны, дабы предостеречь себя от несчастных случаев…
Как отключить вход Root в Linux
Пользователь Root — это суперпользователь в Linux, который имеет доступ и привилегии для запуска всех команд, программ и процессов. Он имеет полные права на чтение, запись и выполнение. Фактически, он может даже создавать/изменять/удалять другие учетные записи пользователей. Поскольку пользователь root имеет так много привилегий, любая неправильная команда или действие, выполненное пользователем root, может серьезно повредить вашу систему. Кроме того, если его взломают или злоупотребят, злоумышленник сможет контролировать всю систему и использовать ее против вас. Поэтому рекомендуется отключить доступ root к вашей системе и создать учетные записи административных пользователей, которые могут временно получать доступ root для выполнения привилегированных команд, используя команду sudo.
В этой статье мы рассмотрим 3 способа отключения root-доступа в Linux.
Как отключить вход Root в Linux
Прежде чем блокировать учетную запись root, необходимо создать административную учетную запись, имеющую доступ sudo для получения привилегий root. Это можно сделать с помощью команды useradd с флагом -m и назначить этому пользователю надежный пароль. Вот команда для создания пользователя admin и назначения ему пароля.
useradd -m -c "Admin User" admin passwd admin
Первая команда выше только создает нового пользователя, в то время как вторая команда устанавливает его пароль. Когда вы выполните вторую команду, вам будет предложено ввести пароль, который вы хотите установить для нового пользователя.
Далее мы используем команду usermod для добавления этого нового пользователя в группу административных пользователей. Мы используем флаг -a для добавления этого пользователя и флаг -G для указания группы, в которую вы хотите добавить этого пользователя.
Первая команда выше добавляет нового пользователя в группу пользователей wheel, которая является административной группой в CentOS/RHEL. Вторая команда добавит нового пользователя в группу пользователей sudo, которая является административной группой в Debian/Ubuntu.
После того как вы создали нового административного пользователя, переключитесь на эту учетную запись, чтобы отключить учетную запись root.
1. Изменение оболочки пользователя root
У каждого пользователя Linux есть оболочка по умолчанию, в которую он входит при доступе к своей системе. Если вы установите /sbin/nologin, то они не смогут войти в свою учетную запись. Поэтому мы изменим оболочку пользователя root с /bin/bash на /sbin/nologin в файле /etc/passwd. Откройте его в текстовом редакторе.
Измените следующую строку, как показано ниже.
root:x:0:0:0:root:/root:/sbin/nologin
Сохраните и закройте файл.
Когда вы это сделаете, каждый раз, когда кто-либо попытается войти в систему под именем root, он будет видеть следующее сообщение.
«This account is currently not available.» (Эта учетная запись в настоящее время недоступна)
Это сообщение по умолчанию, но вы можете изменить его, отредактировав файл /etc/nologin.txt. Обратите внимание, что этот метод не позволит пользователям использовать shell от имени пользователя root или запускать программы, требующие доступа к shell.
2. Отключить SSH-доступ к учетной записи root
В этом методе мы просто отключаем SSH-доступ к учетной записи root. SSH является наиболее распространенным способом входа в Linux-системы для разработчиков и злоумышленников. Если вы отключите SSH доступ к учетной записи root, то это предотвратит доступ многих людей к учетной записи root.
Откройте файл конфигурации SSH на вашем сервере, выполнив следующую команду.
sudo nano /etc/ssh/sshd_config
Откомментируйте директиву PermitRootLogin и установите значение no.
Сохраните и закройте файл. Перезапустите SSH-сервер, чтобы применить изменения.
sudo systemctl restart sshd
sudo service sshd restart
Это заблокирует доступ к учетной записи root всем приложениям, использующим OpenSSH, таким как SSH, SCP, SFTP. Другие приложения смогут использовать учетную запись root.
3. Запрет входа под root через TTY
В этом методе мы используем модуль PAM под названием pam_securetty, который разрешает доступ root, только если пользователь входит в систему через защищенный TTY, как определено в файле /etc/securetty.
В этом файле перечислены устройства TTY, через которые пользователь root может входить в систему. Если вы создадите пустой файл, это предотвратит доступ root с любого устройства в вашей сети. Вот команды для создания пустого файла.
sudo mv /etc/securetty /etc/securetty.orig
sudo chmod 600 /etc/securetty
Обратите внимание, что это влияет только на такие программы, как login, display managers и сетевые службы, которые требуют TTY для запуска. Однако такие команды, как su, sudo, ssh, по-прежнему могут получить доступ к учетной записи root.
Заключение
В этой статье мы узнали, как отключить вход под root в Linux. Обратите внимание, что для полного блокирования доступа root вам потребуется использовать комбинацию вышеперечисленных методов.
Похожие записи:
Как ограничить доступ root?
Кроме того, можно запретить логин вообще всем, кроме допустим логина vasya:
AllowUsers vasya
и все. Совершенно неважно, знают они пароль, не знают они пароль — их будет посылать в любом случае.
ValdikSS, Спасибо, ознакомился со статьей про linux capabilities. Познавательно. Правда, не скажу что я от этого в восторге — два (три, четыре, N) пути предоставить или отобрать привилегию, не связанные друг с другом приведут к удвоению (утроению, учетверению, увеличению в N раз) ошибок, связанных с этим. getfacl/setfacl это прекрасно иллюстрируют — поставишь ACL на файл, потом двадцать раз успееешь забыть и голову ломаешь что же перестало работать?
Нет. Неважно как назван рут, это пользователь с UID=0, и у него в любом случае будут ВСЕ права.
Но запретить ему заходить по ssh несложно. Просто пропишите ему пустой пароль и все.
На всякий случай можно даблчекнуть в настройках sshd, что пользователей с пустым паролем не пускают, но по дефолту это и так должно быть отключено
MOЛOD, ваш sudo пользователь такой же root. Какой смысл телодвижений? Поменяйте порт и настройте авторизацию по только ключу. Если паранойя не отпускает.
MOЛOD, ну так попробуйте залогиниться под рутом. Если не выйдет, то все. Не обходится.
«PermitRootLogin no» обходится только если найдут дырку в pam, но вроде как ее нету.
MOЛOD, так а какая разница? Если под sudo авторизуются, это тоже самое. Авторизоваться смогут, если утечет пароль.
MOЛOD, панель управления может логиниться своим пользователем (или собственно вашим) и выполнять sudo для шелла.
Тут я не подскажу, надо смотреть как панель управления сделана.
Можно попробовать auth логи проанализировать
Sanes, у пользователя нет sudo пароля. У него есть свой пароль.
Но скрипткидди, которые развешивают свои скрипты с перебороми пароля, перебирают пароли к root/toor/admin а не к vasya, misha или sanes
MOЛOD, ну так если процесс уже запущен от рута, ему не нужно логиниться на сервер, процесс же уже запущен.
Вы уточните, вы хотите чтобы никто не мог ничего выполнить от имени рута? так не получится. Линукс спроектирован так, что без рута он ничего не сможет.
Или чтобы по ssh нельзя было зайти рутом
Saboteur, sudo passwd -l root
вот так помогло. а в конфиге не работает. пропускало все равно. сейчас нет
dubrovski82, так это просто пароль от рута сменился, а доступ не ограничился.
Если новый пароль узнать или если там ssh ключи настроены, или su работает, то доступ останется
Привилегии в Linux задаются с помощью capabilities. Отобрав все capabilities, можно сделать из root пользователя даже менее привилегированного, чем обычные.
Для управления capabilities есть несколько программ. Можно воспользоваться стандартной capsh.
Следующая команда запустит root-шелл без каких-либо capabilities:
sudo capsh --drop=cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read -- -c bash
Можно поместить её в скрипт и назначить shell’ом пользователя, если вы понимаете, что делаете, и к чему это приведёт.
sudo nano /etc/ssh/sshd_config
// Заменить дефолтный (22) порт на кастомный:
Port 112
// Сохранить изменения в файле конфигурации и закрыть его. Не закрывая текущий терминал, нужно перезапустить службу ssh:
sudo service ssh restart
// С помощью нового терминала нужно убедиться в возможности подключения с использованием нового порта и в отсутствии возможности подключения по дефолтному (22) порту. Только после проверки возможности подключения можно закрывать начальный терминал.
sudo nano /etc/ssh/sshd_config
// Для отключения возможности авторизации под root пользователем, внести следующие изменения:
PermitRootLogin no
// Не закрывая текущий терминал, нужно перезапустить службу ssh:
sudo service ssh restart
// С помощью нового терминала нужно убедиться в возможности авторизации под обычным пользователем и в отсутствии возможности авторизации под root пользователем. Только после проверки возможности авторизации можно закрывать начальный терминал.
// Ключи должны быть сгенерированы заранее (например, с помощью «puttygen»)
// Далее необходимо создать в домашнем каталоге пользователя каталог «.ssh»
mkdir ~/.ssh
// И ограничить доступ к нему для остальных пользователей, установив соответствующие права на каталог:
chmod 700 ~/.ssh
// Созать файл «authorized_keys», скопировать в него ПУБЛИЧНЫЙ ключ пользователя, после чего файл сохранить и закрыть:
nano ~/.ssh/authorized_keys
// Далее нужно установить на файл с публичным ключом права только на чтение:
chmod 600 ~/.ssh/authorized_keys
// С этого момента для подключения к серверу можно пользоваться ключами ssh, ввод пароля при этом не потребуется.
sudo nano /etc/ssh/sshd_config
// Для отключения возможности авторизации по логину и паролю нужно внести следующие изменения:
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
// Не закрывая текущий терминал, нужно перезапустить службу ssh:
sudo systemctl reload sshd
// С помощью нового терминала следует убедиться в возможности авторизации с помощью ключа и в отсутствии возможности авторизации по логину и паролю. Только после проверки авторизации можно закрывать начальный терминал.
В дальнейшем, ssh авторизация возможна только от имени обычного пользователя (не root) и только с помощью ключа. При попытке авторизации под root соединение будет сброшено, при попытке авторизации с помощью логина и пароля соединение будет сброшено.