Создание пользователя полностью без прав для SSH proxy через putty
В свете последних событий по блокировки всё и вся в России было принято решение скинуться и купить VPS на пятерых знакомых, и создать простой гproxy через SSH туннель. Инструкция как это сделать используя putty есть в интернете в большом количестве. Единственное что не написано это как сделать настройки максимально безопасно для самого VPS’a.
Хотелось бы сделать пользователя полностью без прав, чтобы при подключении к серверу, пользователь не мог прочитать никакие настройки и изменить какие либо файлы. Желательно чтобы вообще ничего не смог сделать, ему в принципе делать ничего и не нужно.
максимум что удалось сделать, чтобы все работало, это создать пользователя без группы: # useradd -m -s /bin/bash -g nogroup -G nogroup anastasia
Далее в папку /home/anastasia/.ssh помещаем файл ключ и авторизуемся по ключу, а не по паролю.
Варианты создать VPN, не рассматриваются т.к. нужно только браузер пустить в обход блокировке, а не всю систему целиком.
На сколько такой вариант настройки VPS и создания пользователя можно считать безопасным и есть ли варианты как-то еще обрезать права пользователю, но при условии чтобы всё работало как proxy?
в .ssh/authorized_keys можно прописать доп. ограничения типа no-pty no-X11-forwarding и ограничить доступ с конкретного ip
нельзя писать в место шелла /bin/false, после авторизации сразу выкидывает и сессия закрывается. так уже пробовала, не получается.
ограничения по IP делать нельзя, у нас динамические IP.
Так это же для этого и надо. Только тоннель должен работать.
по ограничениям authorized_keys написано в справке sshd.
Если указать шелл: /bin/false то соединение СРАЗУ после авторизации закрывается, тоннель тоже закрывается, putty закрывается, всё закрывается. Соединение должно висеть и не закрывать. Тут нужно что-то другое. как вариант указать в качестве sella файл: /home/anastasia/bash
но мне не нравиться это решение, как то это через одно место 🙁
о соединение СРАЗУ после авторизации закрывается
В настройках клиента надо указать что бы шелл не запускал.
У консольного это -N Do not execute a remote command. This is useful for just forwarding ports.
у Putty: Connection => SSH => Dont start shell or command at all
Анонимус дурной — не слушай. Шелл /bin/false — по факту запрет входа в систему, например, такие аккаунты используются для запуска демонов.
1) Всех юзеров можно лепить как nobody/nogroup — этого более чем достаточно в 99,99% случаев и вполне секурно.
2) Если хочется прям совсем изолировать, то всех юзеров в чрут. Команды запускать нельзя (если их не подсовывать в каждую хомдир), про сам сшелл не очень помню поведение, но для туннелей самое оно.
Кусок конфига OpenSSH сервера:
Match Group nogroup ChrootDirectory %h X11Forwarding no
-N Do not execute a remote command. This is useful for just forwarding ports.
Проблема интерпретации того что написано. Что бы это все сделать на машине нужен рабочий сшелл. `-N` просто дает возможность запустить SSH-клиент в не интерактивном режиме.
Match User proxy ForceCommand read a; exit
Кстати, уже была такая тема, советую посмотреть тред: ssh tunnel (авторизация без шелл)
Подведя итог получаем: — при создании пользователя уменьшаем ему права указав другую группу за место «user» указываем «nogroup», также указываем другой shell за место «/bin/bash» указываем «/bin/false», полная команда:
# useradd -m -s /bin/false -g nogroup -G nogroup anastasia
в файле /home/anastasia/.ssh/authorized_keys дописываем строки, чтобы запретить все что только можно: no-X11-forwarding,no-user-rc,no-agent-forwarding,no-pty
должно быть как-то так (это все в одну строку, ключ вырезан):
no-X11-forwarding,no-user-rc,no-agent-forwarding,no-pty ssh-rsa AAAA. aQ== anastasia@FiveVPS
Меняем порт SSH, отключаем учетную запись root, разрешаем подключаться к SSH только используя ключи. Как это сделать можно найти в интернете буквально в первой ссылке поисковика.
вот команды для firewall, в примере порт для SSH 54787-й:
iptables -I INPUT 1 -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp -j DROP iptables -A INPUT -p TCP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p UDP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p TCP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -p UDP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT # -------------------------------------------------------------------------------------- # Блокирование bruteforce-атак (подбор пароля вслепую) на SSH и аналогичные сервисы: # Создаем цепочку для проверки попыток соединений на защищаемый порт: iptables -N ssh_brute_check # Если за последние 20 минут (1200 секунд) с одного адреса было 3 или более новых соединений — блокируем этот адрес: iptables -A ssh_brute_check -m conntrack --ctstate NEW -m recent --update --seconds 3600 --hitcount 3 -j DROP # В противном случае — разрешаем, и при этом заносим в список iptables -A ssh_brute_check -m recent --set -j ACCEPT # Все попытки открыть новое соединение по SSH направляем на проверку iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 54787 -j ssh_brute_check # --------------------------------------------------------------------------------------- # политика по умолчанию все запретить: iptables -P INPUT DROP iptables -P FORWARD DROP ip6tables -A INPUT -j DROP ip6tables -A FORWARD -j DROP # Сохраняем правила файрвола: iptables-save > /etc/iptables.rules ip6tables-save > /etc/ip6tables.rules
При подключении через putty используя ключи дополнительно ставим галочку Connection => SSH => Dont start shell or command at all.
а при подключении через ssh в linux, команда выглядит так:
ssh -i ~/.ssh/FiveVPS_priv_SSH_key_file -D 127.0.0.1:8034 -N -l anastasia -p 54787 10.20.30.40
Эти настройки не полные, тут только то что отличается от стандартных настроек которыми завален интернет.
Посмотрите на настройки, я ничего не упустила, может что-то забыла или сделала не так?
Как создать пользователя Linux, который не может войти в систему
По соображениям безопасности вам может потребоваться создать пользователя Linux без возможности входа. Джек Валлен покажет вам, как это сделать.
У системных администраторов Linux, бывают случаи, когда вам может понадобиться создать пользователя, который не имеет возможности войти в систему. Когда этот тип пользователя будет необходим? Скажем, например, вы должны создать пользователя для правильной работы приложения, но вы не хотите, чтобы у этого пользователя был домашний каталог или возможность входа в систему.
Безопасность. Чем больше пользователей в вашей системе Linux, тем больше шансов, что злоумышленники могут взломать ее и нанести ущерб. Это особенно верно, когда мы говорим о пользовательской учетной записи, которая не будет использоваться реальным человеком, поэтому она не будет отслеживаться никоим образом.
Есть несколько способов справиться с этой задачей, но я хочу показать вам правильный способ сделать это.
Что вам нужно
- Работающий экземпляр любого дистрибутива Linux
- Учетная запись пользователя с привилегиями sudo
Как создать учетную запись Linux
Помните, мы создаем учетную запись Linux, которая не может войти в систему. Другими словами, это системная учетная запись. Допустим, учетная запись, которую вы хотите создать, называется nouser . Есть два правильных способа создания этой системной учетной записи.
Первый способ требует, чтобы вы вручную сконфигурировали оболочку, чтобы пользователь не мог войти в систему. Войдите на свой сервер Linux или на рабочий стол и введите команду:
sudo adduser nouser --shell=/bin/false
Это установит оболочку в /bin/false , поэтому пользователь nouser не сможет войти в систему. Вам будет предложено ввести и подтвердить пароль, а затем заполнить информацию для пользователя:
Следующий метод использует параметр —system следующим образом:
sudo adduser nouser --system
Приведенный выше метод создает учетную запись без пароля и без оболочки, поэтому он не может войти в систему. Тем не менее, вышеуказанный метод также создает домашний каталог. Если вы не хотите, чтобы домашний каталог создавался, команда будет выглядеть так:
sudo adduser nouser --system --no-create-home
Если вам абсолютно не нужен домашний каталог для учетной записи, абсолютный самый безопасный метод — последний метод. Почему? Потому что нет пароля для учетной записи, а также нет домашнего каталога.
Как добавить пользователя в группу
Часто системные учетные записи относятся к группам. Скажем, этот пользователь должен входить в группу www-data. Для этого сначала нужно создать пользователя с помощью команды adduser , а затем добавить его в группу www-data с помощью команды:
sudo usermod -aG www-data nouser
Теперь у вас есть системная учетная запись, которая не может войти в систему, которая входит в группу www-data.
Поздравляем, теперь вы знаете, как создавать пользователей системы Linux, которые не могут войти в систему и не имеют домашнего каталога — используйте этих пользователей с умом.