Задача: дать к ним доступ сторонним подрядчикам (фрилансерам, сотрудникам студий), так чтобы они могли:
— устанавливать софт, настраивать окружение, запускать разрабатываемое ПО, читать нужные логи;
— но при этом по-возможности максимально ограничить их в установке вредоносного ПО и нецелевом использовании машин (рассылке спама, например).
Желательно еще ограничить доступ пользователей к чужим пользовательским каталогам.
Какие группы нужно создать, как настроить sudoers?
Понятно, что если мы даем возможность ставить софт и его запускать, то это — прямой путь к установке шеллов и прочего треша. И да, разумеется, людям надо доверять, особенно тем, с кем сотрудничаешь (зачем иначе сотрудничать). Нужно снизить риски, а не исключить их полностью.
Мне кажется у вас противоречие: "дать им возможность устанавливать софт" и "ограничить их в установке вредоносного ПО".
Настройка ВПС и базового окружения делаете вы сами. Для этого есть много инструментов - Ansible, Puppet и др.
А в sudoers пользователю даёте право только на управление определёнными сервисами (nginx,mysql,php-fpm). Все остальные действия пусть делают под локальным пользователем. Для nginx, например, определяете инклуд файлы которые размещаются в папках пользователей. Ну и со многими сервисами так тоже можно.
Ну и добавление неосновного ПО пусть по запросу будет.
А зачем сторонним подрядчикам устанавливать софт?
Для чтения логов вполне рулится группой в которую входит пользователь, так же и в чужие хомяки они не попадут.
Если определитесь зачем вдруг сторонним людям ставить софт, то будем еще что-то предлагать, например запирать их в собственных lxc-тазах.
Они что-то разрабатывают, что требует неких компонент: например какие-нибудь БД или модули к веб-серверам. Во-первых, хочется, чтобы они сами ставили и настраивали компоненты, которые им нужны. Во-вторых, не хочется затягивать процесс разработки ожиданием, пока не связанный с разработкой администратор настроит сервер.
Бывает иначе. Им нужно заниматься периодической разработкой и поддержкой некого проекта. Соответственно, он крутится на нашей машине. При этом влезать и разбираться с их окружением и что-то оперативно им там по запросам ставить и конфигурировать не хочется.
Omnorot: если машина тестовая, то пусть ломают что хотят, если вы не хотите что бы они ломали ее, но нужно что бы они жили на ней, то есть контейнеры, пусть сидят в собственном контейнере который вы одной командой можете убить и сделать чистый на его месте. Зачем их пускать на саму машину?
Не сталкивались с контейнерами. А как они решают проблему с тем, что юзер может заняться каким-нибудь непотребством внутри контейнера? Или контейнеры решают проблему "быстро убить непотребство" без переустановки системы?
Omnorot: именно так. Чистый контейнер ставится условно командой sudo lxc-create -t ubuntu -n razrab1 -- -r trusty, где razrab1 — имя контейнера, оно поставит вам минимальную ubuntu trusty(14.04), вы можете командой lxc-stop его застопить и lxc-destroy убить контейнер, а потом тем же креатом сделать новый чистый(это если еще мы не будем вдаваться в снапшоты, что бы поднимать скажем не чистый, а за прошлый день и возможность описать свой шаблон в котором сразу будут идти пакеты по вашему выбору). Хостовую систему это трогать не будет, она как жила так и будет жить. Почитайте, думаю что вам может подойти такой вариант
Omnorot: ну это уже другой вопрос, вопрос мониторинга активности пользователей, вопрос мониторинга сетевой активности и прочего, но хотя бы это позволит вам не трогая свою основную систему грохать их и создавать снова.
Советую каждой группе выделить по контейнеру LXC и пусть внутри ковыряются, если нужны какие-то общие ресурсы - пробросить порты до нужных контейнеров.
Выдавать права я думаю только по: требованию. Думаю надо просто права настроить правильно. Создать группу и сменить группу у нужных каталогов и файлов. Читать логи - доступ на чтение. С установкой программам не знаю - по идее можно локально ставить из исходников или выдать группе права записи на /var/lib/dpkg/ :): В lunux все есть файл!
А есть вариант какой-то простой конфигурации sudoers для наших задач? Или если тонко не настраивать права для группы, то таки придется добавлять пользователей в группу admin?