LINUX.ORG.RU

Чем страшна команда sudo?


0

0

Всем привет.

Занимаемся разработкой распределённой WorkFlow системы. Система будет работать в организации, которая имеет несколько мощных кластеров и суперкомпьютеров (всё под Linux).

Текущая архитектура системы такая: имеется один сервер с движком WorkFlow и на каждом доступном ресурсе (кластер или суперкомпьютер) имеется постоянно работающий агент. Сервер выбирает требуемые ресурсы для задач, связывается с агентом, отправляет данные и команды, контролирует выполнение задач, получает результаты.

Каждый WorkFlow - это набор задач, которые могут выполняться на разных ресурсах, часто параллельно.

Сейчас пользователи работают с этим ресурсами на уровне подключения через SSH и запуска shell-скриптов.

Основная проблема: задачи на ресурсах нашей системой должны запускаться от имени реальных пользователей. Потому что использование ресурсов пользователями должно контролироваться и к тому же оплачиваться самими пользователями или в рамках проектов, в которых пользователи работают. Существует система биллинга. Пользователи на всех ресурсах заводятся одновременно и централизованно, одновременно же и в биллинге.

Наше решение было - запускать задачи с помощью команды sudo. Т.е. агент, а точнее пользователь, от имени которого запускается агент, имеет права на выполнение определённого ограниченного набора команд от имени определённых пользователей без пароля. И тогда всё идёт гладко.

Однако!!! Админы организации нашу идею напрочь зарубили и сказали, что у нас кривая архитектура. Что они никогда не дадут нам использовать sudo и что нам нужно всё делать по другому. Например, для каждой задачи запускать от имени нужного пользователя агента (через ssh). При этом наш сервер будет иметь сертификаты пользователей, чтобы коннектиться к ресурсам от их имени.

Вот такая дилема. Пока админов в чём-то убедить не получается. Они стоят на своём, что настроить для нас sudo нельзя, что при этом пострадает безопастность, что у нас кривая архитектура и что мы должны всё переделывать, лишь бы не использовать sudo.

Может я что-то не понимаю и использовать sudo действительно неправильно и небезопасно?

Может есть ещё какие варианты архитектуры в данной ситуации? Да, запускать агента под рутом - об этом вообще и слышать не хотят, реально закрывают уши и говорят - даже не заикайтесь.

Буду очень благодарен всем, кто откликнется.

НИКОГДА! не надо давать возможность юзерам получать серьезный доступ к системе.

devl547 ★★★★★
()

Админы усложняют жизнь себе и другим. Можно создать группу, и юзеров сунуть в эту группу. Дать им возможность выполнять определенные команды через sudo.

qsloqs ★★
()

Админы люди не особо разговорчивые и с комплексами в основном. Ты убеди начальство в своей правоте и админам надают по рогам. =)

qsloqs ★★
()

они правы отчасти... sudo действительно небезопасно, к примеру после очередного обновления ПО вполне может так случиться что скрипт будет подменен и начнётся одминский ад :)

по теме: man изменение идентификаторов пользователя и группы

#include <unistd.h>

int setuid(uid_t uid);
int setgid(gid_t gid);

и man как работает тот самый man :)

PS это если я правильно понял о чём Вы спрашиваете

shty ★★★★★
()
Ответ на: комментарий от shty

и да, систему ставить всё равно под sudo придётся, но тут уж если одмины быка включат - по рогам им, потому как инсталлировать софт под sudo - это нормально

shty ★★★★★
()
Ответ на: комментарий от devl547

О серьёзном доступе речи не идёт. Более того, речь идёт о том, чтобы дать возможность пользователю, от имени которого работает агент, запускать ограниченный набор команд он имени ограниченного набора пользователей, через sudo. И всё.

Набор команд относится к выполнению ресурсоёмких задач на высокопроизводительных ресурсах.

junixar
() автор топика
Ответ на: комментарий от shty

Что вы имеете в виду - про root? Команда sudo будет вызываться не root пользователем, выполнять другие команды тоже не для root.

junixar
() автор топика
Ответ на: комментарий от junixar

Что вы имеете в виду - про root?

ровно вот это:

Команда sudo будет вызываться не root пользователем

выполнение sudo означает что пользователь получит привилегии суперпользователя (root), пусть это и кратковременно, но не есть гуд

shty ★★★★★
()
Ответ на: комментарий от shty

>выполнение sudo означает что пользователь получит привилегии суперпользователя (root), пусть это и кратковременно, но не есть гуд

man sudo

/-u

record ★★★★★
()
Ответ на: комментарий от shty

выполнение sudo означает что пользователь получит привилегии суперпользователя (root), пусть это и кратковременно, но не есть гуд

имелось ввиду через судо выполнять программы от имени нужного пользователя

 -u user     The -u (user) option causes sudo to run the specified command as a user other than root.

Я лично не вижу никаких особых препятсвий для реализации нужного через sudo. Только не понятно, почему бы сразу не войти нужным пользователем, а использовать костыли в виде sudo?

azure ★★
()
Ответ на: комментарий от azure

Костыли используются потому, что: на ресурсе постоянно крутится одна программа, запущенная от имени выделенного пользователя - программа агент. Агент получает указание от сервера - запустить на ресурсе задачу от имени такого-то пользователя. Запуск от имени такого пользователя, потому что потом система биллинга выставит счёт за использование ресурса именно этому пользователю. Но сам пользователь никуда не заходит. Он запустит на сервере свой комплексный эксперимент.

junixar
() автор топика
Ответ на: комментарий от azure

имелось ввиду через судо выполнять программы от имени нужного пользователя

эм да, не все буквы в серёдке осилил :)

shty ★★★★★
()

sudo + автомонтирование флэшек есть
осталось дело за малых монтировать без noexec и собственно придумать автозапуск всего найденого на ней %)

megabaks ★★★★
()
Ответ на: комментарий от megabaks

sudo + автомонтирование флэшек есть осталось дело за малых монтировать без noexec и собственно придумать автозапуск всего найденого на ней %)

Это вы про бубунту?

Вообще-то ничего плохого в sudo нет, если вы ограничиваете список разрешенных на исполнение файлов, и уж тем более, если это ваш собственный компьютер, и доступ по ssh вы закрыли (или сделали только по ключам).

Ну, а на рабочем компьютере - да, в целях безопасности лучше su -c. Тогда желающему что-то взломать придется узнавать два пароля.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от megabaks

Дыра, если неправильно настроена. Но если никому не позволять ALL=ALL и указывать полные пути (чтобы не подменили на свое что-нибудь) все будет ОК.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от megabaks

Иногда есть необходимость выполнить от имени рута какую-нибудь команду какому-нибудь пользователю, но ему нельзя говорить пароль рута, и нельзя установить suid-бит. В этом случае sudo - в самый раз.

Eddy_Em ☆☆☆☆☆
()

Немного удивлен, судя по всему проект серьезный, а аргументы на уровне «кривая архитектура», «дыра» и т.д. Вам дали какие-то конкретные факты, почему использование sudo недопустимо?

Chumka ★★★
()
Ответ на: комментарий от Chumka

В том то и дело, что аргументов не было. Сначала они просто посмеялись над нами, мол вы всё со своим sudo? Не будет этого и всё тут.

Аргументы были только из разряда: ресурсы также используются серьёзными промышленными предприятиями в коммерческих целях и они по договору должны быть в курсе любых подобных изменений в настройках ОС. И они (админы) дескать не знают, как они это будут объяснять таким партнёрам.

Мы не можем себе пока уяснить - чем плохо использование sudo и какие могут быть ещё варианты. Проблема в том, что мы, разработчики системы, не являемся профи или экспертами в области Linux. Со своей колокольни проблем не видим. Вот поэтому и спрашиваю. Параллельно ищу эксперта, который бы дал свою оценку.

junixar
() автор топика
Ответ на: комментарий от junixar

Вот тезисы, которые нужно обсудить с админами, которые выступают против судо:

1) Программа агент должна порождать процесс, меняя свой uid на нужный и запускать задачу на выполнение.

2) агент запускается не под рутом. 3) для смены uid нужны права рута.

sudo - реальное решение, достаточно безопасное. Другие решения могут быть даже большими костылями.

Либо всю задачу ставить иначе (переделывать систему).

azure ★★
()
Ответ на: комментарий от qsloqs

>Админы усложняют жизнь себе и другим.

ну должны же они хоть как-то оправдывать свою зарплату :)

troll_them_all
()

Только не забудьте, чтобы перечень команд для sudoer'ов не содержал шеллы и программы, из которых можно вывалиться в шелл (vim, например).

Xenesz ★★★★
()

Позиция админов как раз понятна.

sudo придется настраивать и поддерживать им. Им же надо будет следить, чтобы ваш агент не получил дополнительных прав. Для них это потенциальный гемор, который будет вылезать каждый раз при обновлении вашего софта.

К тому же, если организация серьезная, то ко всем бизнес-приложениям, требующим повышенных прав, проявляется пристальное внимание. Это заполнение специальных форм, продумывание compensating controls, и т.д.

Конечно же они хотят, чтобы вы сделали все сами и обошлись стандартными правами.

При этом наш сервер будет иметь сертификаты пользователей, чтобы коннектиться к ресурсам от их имени.

Лучше не иметь ключи пользователей, а положить каждому пользователю в ~/.ssh/authorized_keys ваш public-ключ агента.

bigbit ★★★★★
()
Ответ на: комментарий от dn2010

Чего этого? Запускать задачу от имени какого-либо пользователя? Потому что агент работает не под рутом и setuid он делать поэтому не может. Как иначе можно запустить процесс от имени другого пользователя? Без sudo?

junixar
() автор топика
Ответ на: комментарий от junixar

>Потому что агент работает не под рутом и setuid он делать поэтому не может. Как иначе можно запустить процесс от имени другого пользователя? Без sudo?

Ну, например, запускать агента как оболочку у нужного пользователя. Типа пользователь логинится на центральный сервер, а тот уже от имени пользователя авторизуется на считающей машине, запускает ему шеллом агента, а тот в свою очередь запускает считающие программы. Через pam такое можно сделать и это не будет такой дырой в системе безопасности, если софт на центральном сервере и агент грамотно написаны.

dn2010 ★★★★★
()
Ответ на: комментарий от dn2010

Работа системы несколько сложнее, чем просто постановка задач на ресурсах. Для одного эксперимента используется множество ресурсов. Соответственно агенты с разных ресурсов обмениваются друг с другом данными. Используется специальный протокол p2p для обмена данными и командами.

Когда на ресурсе работает лишь один агент, то всё проще. Нужно открыть ему на ресурсе и на файерволе один порт. В плане безопасности используется TSL, соответственно каждому агенту выдаётся свой сертификат X.509. Администрирование, мониторинг, обновление, поддержка одного агента, как одного процесса, гораздо проще, нежели если для каждого пользователя будет запускаться свой агент, на своих портах, читать общие настройки, писать свои логи и т.д.

Предложенный вариант мы уже рассматривали и отмели, как сложную в разработке, тяжёлую в поддержке и неудобную в развитии архитектуру.

А можно подробнее объяснить, почему вы считаете, что при текущем подходе есть «такая дыра в системе безопасности»? Ведь sudo будет выполнять только агент, ПО, к которому априори есть определённое доверие. Выполнять эту команду он будет для ограниченного набора пользователей и команд. В чём «такая дыра»?

Буду очень благодарен за ответ.

junixar
() автор топика

а почему никто не сказал про выполнение через ssh + ключи? вполне себе безопасно и ненадо никаких sudo/su.

isden ★★★★★
()
Ответ на: комментарий от junixar

>Ведь sudo будет выполнять только агент, ПО, к которому априори есть определённое доверие. Выполнять эту команду он будет для ограниченного набора пользователей и команд.

Вообще в современных unix-системах стараются уйти от запуска сетевых сервисов с повышенными правами. Тут же одна и та же программа, которая и общается с сетью, и имеет практически полные права на считающей машине, к тому же написанная не слишком компетентными разработчиками. Чтобы грамотно ограничить в правах такого супер-засланца нужно использовать какую-то сложную систему разграничения доступа --- selinux, rsbac или что-то подобное и проводить нетривиальную настройку этой системы.

dn2010 ★★★★★
()
Ответ на: комментарий от Eddy_Em

> А как вы при помощи ssh ограничите для юзера root-доступ только n-ным количеством программ?

ТС же пишет:

О серьёзном доступе речи не идёт. Более того, речь идёт о том, чтобы дать возможность пользователю, от имени которого работает агент, запускать ограниченный набор команд он имени ограниченного набора пользователей


т.е. от рута ничего запускаться не должно.

isden ★★★★★
()
Ответ на: комментарий от isden

Дело в том, что при помощи ssh можно сделать

он имени ограниченного набора пользователей

Но вот с

запускать ограниченный набор команд

как быть?

Хотя, можно, конечно, создать какого-нибудь нового пользователя, ограничить его группы только нужными и открыть к нему доступ по ssh с авторизацией по ключам конкретным пользователям.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> как быть?

если это действительно нужно - то запихнуть всех нужных пользователей в группу, например, restricted и выставить соотв. пермишены на файлах.

isden ★★★★★
()
Ответ на: комментарий от junixar

> если для каждого пользователя будет запускаться свой агент, на своих портах, читать общие настройки, писать свои логи и т.д.

Возможен ли случай, когда при старте системы запускается демон агент (от непривилегированного пользователя) и ничего не делает, а пользователи могут к нему подключаться и выполнять действия?

Вообще на самом деле зачем нужен рут? Кроме общих логов. На нужные файлы устройств можно права дать.

sin_a ★★★★★
()
Ответ на: комментарий от Eddy_Em

> Но они в этом случае все равно смогут запускать все, расположенное в директориях /bin, /usr/bin и т.п.

вот на них и раздать пермишены. а еще есть acl.

isden ★★★★★
()
Ответ на: комментарий от Eddy_Em

пишется один скрипт для раздачи пермишенов, который потом при необходимости просто запускается.

isden ★★★★★
()

одмины такие одмины... Я правильно понял что вместо sudo они предлагают делать ssh another@localhost «my_cool_programs arg1 ...»? :)

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

Да, как вариант это они тоже предлагают делать.

junixar
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.