Как контролировать доступ к файлам в Linux с помощью собственной программы?
Здравствуйте, я хочу написать программу для дополнительной аутентификации к некоторым папкам в линуксе. Например, поставив защиту на папку, чтобы её открыть необходимо перейти по сгенерированной программой ссылке и пройти капчу/ввести пароль/что-то другое. Но я не совсем понимаю что мне нужно использовать, чтобы сам линукс не пускал в папку, а передавал управление программе и ждал, пока произойдет авторизация и тогда, если всё ок, то пускал в папку. Ещё нашёл что для этого может подойти PAM линукса, так ли это?
Армянское Радио, как я понял, с fuse создаётся своя файловая система, но я хочу сделать так, чтобы любой человек мог загрузить программу на условно любую,например, убунту и сразу настроить аутентификацию, не модифицируя как-то кардинально свою систему
botiyava1, есть стандартные механизмы обеспечения доступа, встроенные в ядро ОС. Попытка наколхозить что-то сбоку от них требует очень высокой квалификации, а также, вероятно, переделки ядра. Так что ваши хотелки дорого стоят.
fuse же повзволяет это реализовать с минимальными усилиями и без риска завалить всю ОС.
Армянское Радио, понял, большое спасибо за ответ! Пользуясь случаем хочу спросить про еще одну идею: Есть та же папка, но уже сделать так, что она доступна для чтения и записи в ней только определенному пользователю ну и админу. Если нужно зайти в неё, то запускаю мою программу с условно ключом --name folder_name и дальше как я писал в вопросе идет аутентификация и, если всё ок, то программа заходит тебе в систему под тем юзером и ты работаешь в папке. Эта идея имеет место быть или полный бред?
Леонид, а вы знаете, как в линуксе работают права на доступ к файлам?
В целом, разработка такой программы должна начинаться не с разговора "вот есть папка, я запускаю программу с ключем...". А с выяснения, почему стандартные алгоритмы назначения прав доступа не подходят для решения вашей задачи (кстати, какой?)
Армянское Радио, моя задача состоит в том, чтобы на облачном сервере была так называемая "открытая зона", в которую пользователь заходит по ssh по простому паролю и может читать открытую информацию, которая расположена в домашней папке и имелся ряд закрытых папок, куда можно попасть после прохождение дополнительной усиленной аутентификации.
Почему не подходят стандартные алгоритмы: главная причина это то, что моя цель сейчас не придумать самоё оптимальное решение данной задачи, а написать диплом бакалавра, а писать я его хочу на тему, связанную с облачными вычислениями и, в частности, об IAM в них. Пока что я остановился на идее написать свой облачный аутентификатор, который я бы мог клонировать и использовать на определенных облачных инстансах (Например на убунте определенной версии). Второстепенная причина состоит в том, что я банально не знаю как моя идея реализуется стандартыми методами Линукса :)
Армянское Радио, уже сейчас пишут, что облачные вендоры с их инструментами убирают надобность в штатных сисадминах и разного рода администраторах, вся работа передается на аутсорс, поэтому я и загорелся желанием написать свой так называемый "Authenticator as a Service" :)
я бы все таки посмотрел в сторону имеющихся систем шифрации.
их много, но все они привязаны к каталогу, внутри которого шифруются все файлы.
каталог где часть файлов зашифрована, а часть нет редко где применяется.
его "с определенными костылями" можно сделать на основе каскадирования файловых систем aufs
pfg21, Понятно, изучу подробнее предложенные вами методы, но конкретно диплом я вынужден писать именно про облачные инструменты, т.к. я развиваюсь сейчас именно в этой области. Спасибо еще раз за помощь!
Леонид, тогда изучай fuse. как минимум не убьешь ядро или чего подобного.
также почитай как образом можно вклинится в работу vfs и перехватывать функции доступа к файлам. но тут и посложнее и помудрённеее и аккуратнее побыть надобно.
ну и как обычно - впилить необходимую функциональность в имеющийся файловый менеджер. у некоторых плагин-апи есть. мож и хватит
Критика в основном состоит, что ты взялся за задачу, которая является не самой простой задачей для системного разработчика, а текущая твоя квалификация даже не позволяет осознать объем работы. Отсюда и непонимание между вопросами и ответами.
Пожалуйста, разберитесь хотя бы с тем, как сейчас работают права доступа в линукс, как наследуются права доступа у процессов. Потому что таже фраза "пользователь заходит в папку которая принадлежит другому пользователю и моя программа его там авторизирует" - выдает ваше полное непонимание того, как наследуются права доступа у самих процессов.
Надо выбрать - или ты решаешь реальную техническую задачу и тебе подсказывают как это делается правильно, или ты выбираешь тему для диплома не имея на самом деле желания написать реальную систему, а просто наколхозить какой-то бред, чтобы сдать диплом. Но тогда нет смысла задавать вопросы на ресурсе, где отвечают в основном специалисты по техническим системам, а не по написанию колхозов, которые работают неправильно.
SOTVM, думаю вам лучше задавать такие вопросы на linux org ru, этот сайт славится оскорблением ТСов и токсичным комьюнити. На провокационный вопрос, разумеется, я отвечать не буду