Как разрешить пользователю только некоторые консольные команды?
Привет друзья. Создал для одного из сотрудников доступ к серверу с помощью proftpd, конфигурация представлена ниже:
username:$1$x6zKJYsy$7B.MdZgxttkHfd7OtnS1y/:33:33::/var/www/hell/kart:/bin/false
Задача была: предоставить место для выгрузки файлов на сервер, но запретить использовать консоль в целях безопасности сервера. Сотрудник закидывал файлы вручную и мог тестить приложение уже не на локальной машине, а на рабочей. Файлов стало много, к тому же с медиа, тупой копипаст приводит к 10-минутному ожиданию копирования, когда по факту было изменено всего несколько файлов.
Вопрос: можно ли разрешить юзеру на сервере использовать только отдельные консольные команды? Например только: ls, cd, git. Не разумно каждый раз самому по его просьбе вытягивать с битбакета. Хуки не подойдут, т.к. далеко не каждый комит нужно на тестовый сервак выгружать.
p.s. Про хуки знаю только в теории что такое, но как пишутся не в курсе
В настройках юзера в proftpd для него задана корнем подпапка в var/www/. Не уверен, но допустим он никак не может вылезти выше и консольные команды для работы с файлами системы для него будут не доступны. Но как я писал выше он же может reboot сделать или отключить сервер? Это же отнюдь не безопасно джуниорам раздавать такие привилегии на рабочем сервере. p.s. Заводить спецом для джуниоров отдельную ВПСку вообще не рационально, как минимум по времени.
Hellek: почему же? chroot именно для этих вещей, чтобы не дать делать то, что не положено.
А ещё можете его закинуть в контейнер (docker, vagrant). Хочет грохнуть всё внутри — пожалуйста :)
romy4: спасибо за наводку, прочитал про chroot, это сильно хардкорно, чувак по сути просто закидывает файлы и кроме git команд и простейших команд передвижения по каталогам ему вряд ли что то понадобится. chroot как я понял создает чуть ли не мини копию системы в рамках папки, настраивать долго ради мелкой подзадачи, проще уж сказать "чувак, копируй и дальше вручную". Докер с варгантом тоже нужно ставить и время тратить прилично. Может есть более быстрая реализация?
Попробовал использовать системные команды от www-data, вроде не работают те что я называл выше. git команды вполне. Насколько будет безопасно создать для чела юзера в группе www-data, но с доп. ограничением внутри его подпапки? И можно ли как-то сделать, чтобы он не видел вышележащих директорий? Всё таки шариться там он вполне может
Hellek: с вагрантом, как и докером, много примеров готовых систем.
А что вы хотите закрыть для пользователя выше его подпапки? Так как у него нет прав для записи, то он ничего не сделает.
Хочу даже возможность обзора структуры директорий на сервере закрыть, т.к. чем больше информации об этом, тем больше риск на случай вредоносных действий. На данный момент при заходе через proftpd в свою директорию он не знает вообще что за её пределами (как я уже сказал git pull у него не робит в этом и проблема).
Далее - www-data имеет права для записи в других директориях где лежит production копия. Подпапка сотрудника условно лежит в www/myEmployee/... Олег Цилюрик предложил делать это через стандартные права (rwx), но при этом варианте www-data может всё же выходить выше по древу от www директории. Ну и придётся колдовать с правами для юзеров, мол группа ввв-дата одна, а доступ к продакшен папке для тестового юзера закрыть.
Опять же в таком случае, придётся жестко следить за правами доступа (раз в год и к закрытой папке может быть открыт доступ), а в случае с proftpd не важно какие они, человек в принципе не знает об этой папке.
На настройку proftpd ушло около 10 минут. С варгантом/докером не работал, сколько может уйти на решение озвученной проблемы если делать это с нуля включая изучение технологии?
Hellek: давать www-data запись в директории проекта — очень плохая идея. Вам нужен просто пользователь без дополнительных прав.
> (раз в год и к закрытой папке может быть открыт доступ)
не может
а есть ещё SeLinux. Умные люди придумали кучу всего, а вы изголяетесь виртуализацией.
Я согласен с Цилюриком, что не нужно извращаться.
То, что он там увидит конфиги — ему не поможет. А конфиги настроек секьюрности он не увидит, потому что их видит только рут.
Пришел к выводу, что этот гемор весь излишний. Настроил автодеплой последней версии приложения из Bitbucket при переходе по спец. ссылке. Теперь человеку даже логиниться не надо, а у меня в свою очередь в настройках принимающего файла жестко прописаны инструкции, что нужно сделать при обращении к нему. Т.к. кроме меня ни у кого нет доступа на сервер, то сервак никак от косяков сотрудника не пострадает
Да, рутовый пароль он не знает, но если вот в этой части "bin/false" подставить bash, например, то чувак вполне может делать reboot сервера, а может и shutdown, не было желания проверять. Я не силён в администрировании линукса, но предполагаю что есть посерьёзней команды, которыми можно специально или случайно нагадить, а на серваке то и рабочие приложения крутятся. Этот юзер принадлежит к группе 33, по умолчанию www-data. Я когда из под ввв-даты как юзера захожу по sftp вполне могу и сервер перезагружать и процессы. Возьмет чел ради интереса nginx стопнет ещё
Hellek:
> то чувак вполне может делать reboot сервера, а может и shutdown, не было желания проверять.
Чувак не сможет ни reboot ни shutdown без прав администратора.
> Я не силён в администрировании линукса, но предполагаю что есть посерьёзней команды, которыми можно специально или случайно нагадить, а на серваке то и рабочие приложения крутятся.
Не нужно предполагать ... достаточно почитать: нет у ординарного пользователя напортить работе системы.
Олег Цилюрик: затестил. Вообще никакие команды не работают при входе по ftp, по крайней мере через WinSCP. При попытке войти через путти даже логин/пароль не запрашивает. Это нормально?
Я чет теперь вообще не знаю что делать. Похоже, что через proftpd нельзя будет пользоваться консолью, значит git pull уже не сработает, но как тогда иначе запретить юзеру ходить выше корневой папки? Чтобы он впринципе не мог выйти за её пределы?
Попробовал использовать системные команды от www-data, вроде не работают те что я называл выше. git команды вполне. Насколько будет безопасно создать для чела юзера в группе www-data, но с доп. ограничением внутри его подпапки? И можно ли как-то сделать, чтобы он не видел вышележащих директорий? Всё таки шариться там он вполне может
Hellek:
Манипулируя правами rwx для каталогов и файлов вы можете очень гибко ограничивать области видимости. И вы можете сами прежде поэкспериментировать.