LINUX.ORG.RU

Обмен файлами между пользователями без общей группы.


0

0

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

Как это можно реализовать?

Предлагается такой вариант: пользователь создаёт папку, даёт всем права только на выполнение для этой папки. Внутри этой папки создаётся папка со случайным именем (с достаточно секьюрным алгоритмом генерации случайного имени и с хорошей длинной получаемого имени). К этой случайной папке доступ имеют все.

Соответственно просмотреть содержимое первой папки никто не может, получить содержимое второй папки может только тот, кто знает её имя.

Чем плох такой вариант? Чем он может быть небезопасен?

Если есть права рута на этом сервере то можно включить POSIX ACL на этих фс и раздавать права как душе угодно.

В приведённом выше методе лично я особых уязвимостей не вижу если «пароль» будет длинный и каталог будет существовать недолгое время.

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

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

Нет, прав рута к сожалению нету. Брутфорс будет ограничен как раз длинной имени каталога и временем жизни. Максимальная длина имени сейчас в линукс системах немалая.

Сомнения - нельзя ли будет как-то системными способами получить имя каталога? Например через какие-нить логи или запросив как-нить список открытых файл-дескрипторов или ещё что-нить такое?

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

Кстати да, почему нельзя просто тупо зашифровать большим паролем и выложить на всеобщий доступ?

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

> Например через какие-нить логи
В зависимости от того, какие действия будут производится в/над «секретным» каталогом, при обычном cp - не должно по идее

запросив как-нить список открытых файл-дескрипторов

Доступны только открытые дескрипторы текущего пользователя.

Старый сервис locate может выдавать лишнюю инфу, но он по-моему сейчас уже нигде не стоит (заменён на другие реализации locate, типо slocate и mlocate)

Вариант с gpg, описанный выше в любом случае надёжнее =)

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

К сожалению вариант с GPG не подходит, в силу следующих причин:

1. Файлы могут быть большими и очень большими, нормальные порядки размеров файлов - гигабайты и терабайты. А могут быть и не очень большими, но в количестве несколько сот тысяч штук.

2. ВАЖНЕЕ - файлы второй пользователь должен получить в не зашифрованном виде, поскольку использовать их сразу при получении будет не сам пользователь, а софт, запускаемый от имени этого пользователя. И этот софт является немодифицируемым.

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

При этом пользователи на сервере не имеют общих групп и иметь не могут в принципе

Файлы могут быть большими и очень большими, нормальные порядки размеров файлов - гигабайты и терабайты.

Не может такого быть, чтоб нельзя было сделать группу «special», членами которой сделать этих двух пользователей, чтоб только они [и root (: ] вдвоем могли использовать на её на чтение\запись, тем более если речь идет о таких объемах.

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

И тем не менее, общую группу сделать нельзя. Такова политика работы на данном сервере. И эта политика имеет обоснования и является неизменной.

Более того, нельзя запользовать ACL (setfacl) потому, что на сервере его нет. Точнее так: на сервер подмонтирован раздел для работы с большими объёмами данных. Поскольку обмен у пользователей именно такими данными, то они должны использовать именно этот раздел. Но на нём файловая система Lustre и ACL там не настроен. Админы не уверены, что его вообще можно на Lustre настроить.

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

получается, что группа disk очень «приближена» к правам root, хотя об этом нигде особо не упоминается

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

если ты имеешь право писать на блочное устройство, а на нём есть примонтированная без nosuid файловая система — то ты можешь туда положить bash и поставить ему SUID root...

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

И тем не менее, общую группу сделать нельзя.

Чушь

Такова политика работы на данном сервере. И эта политика имеет обоснования и является неизменной.

является неизменной

чушь

Если ставить себя в такие ограничительные рамки, то не обойтись без велокостылей (то, что вы предложили - вроде как рабочий вариант)

azure ★★
()

$ cat test
mkdir a
mkdir a/verylongdirname
touch a/verylongdirname/scrap

chmod 111 a
ls a
ls a/*

$ sh ./test
ls: невозможно открыть каталог a: Отказано в доступе
ls: невозможно получить доступ к a/*: Нет такого файла или каталога

sudo sh ./test
verylongdirname
scrap

От корешка всё-равно не скроешься!

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

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

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

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

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

Больше одной группы на проект быть тоже не может - особенности биллинга.

Всвязи с вышеизложенным нельзя создать группу на двух пользователей только для обмена данными.

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

А не лучше-ли сделать наоборот: файл, куда писать может любой, а читать — только владелец? Это сделает утечку данных менее вероятной… Можно md5 проверять, чтобы убедиться, что написал именно тот, кто нужно…

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

Больше одной группы на проект быть тоже не может - особенности биллинга.

Привязан пользователь к проекту через свою группу.

Это же нелогично! Тогда надо было по логину привязывать.

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

Логика в том, что деньги платятся не со счёта пользователя, а со счёта проекта. А в проекте много участников, соответственно они все объединяются в группу и деньги снимаются с группы, то бишь с проекта.

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

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

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

Почему бы не добавить еще одну такую «системную» группу, и сделать нужных пользователей их членами. Основная (эффективная) группа у них не поменяется, зато они смогут делать chown :somegroup /path/to/file и,таким образом, определять права доступа для другого пользователя, входящего в эту группу.

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

Потому что пользователь может сам сменить основную группу на эту добавленную. Тогда биллинг будет считать на эту группу, а она реально не имеет под собой проекта и соответственно денег.

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

Пароли на группы могут спасти ситуацию? Допустим я имею uid=azure, gid=azure и состою в группе secure, на которую установлен пароль, которого я не знаю. Как мне кажется, это позволит мне установить доступ для группы secure но не позволит мне изменить gid на secure т.к. я не знаю пароля группы.

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

изменить gid на secure вы можете всегда, пароль тут не используется. Если на группу задан пароль, то пользователь, не состоящий в группе может сам к ней присоединиться, через ту же команду newgrp, если знает пароль. Если пароль не установлен, то сам пользователь к группе присоединиться не сможет.

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

Есть ещё один варинант. Создаём именованный канал помощью mkfifo , после этого убеждаемся что другой пользователь зделал cat fifo > tofile и cделал это первым . После чего делаем cat somefile > fifo . Правда как убедится что никто не зделал этого раньше это уже сам придумай.

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