1

Мне интересно, как создать в Linux что-то вроде символической ссылки, которая будет указывать на разные каталоги для разных пользователей, видящих это. Я долго искал его и нашел что-то под названием hlfsd - Конечно, обычные символические ссылки не могут этого сделать, потому что они основаны на "вещах" ядра, но я нашел что-то, что может решить эту проблему.

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

В основном то, что я хочу сделать:

Давайте предположим, что у нас есть сервер с файловой структурой A/{a1 a2}/{b1 b2}/{c1 c2} внутри этих папок, есть большие файлы, и их не следует копировать по сети. Допустим, пользователь U1 хочет получить доступ к этим файлам, поэтому он может создать символическую ссылку (пока все хорошо).

Проблема в том, что когда он хочет получить доступ к этой структуре и хочет иметь только локальную копию, например, A/a1/b1/c1 . Конечно, мы можем сделать много символических ссылок локально, которые будут указывать на эти папки на сервере, но тогда у нас не будет ни одной очень важной для меня функции - когда кто-то, например, добавляет папку A/a1/b1/c3 , тогда этот пользователь, который был связан с этой файловой структурой и имеет локальный A/a1/b1/c1 , не увидит изменений, потому что все его ссылки были созданы вручную.

2 ответа2

1

Во FreeBSD раньше была специальная обработка символических ссылок, я думаю, что она называлась вариадическими символическими ссылками (хотя поиск Google по этому слову не нашел того, что я хотел). Идея в том, что вы не символическую ссылку на конкретный путь, а строку, которая может иметь замены.

Мало того, что вы ввернуты в то, что Linux не поддерживает это, но это сложнее реализовать для каждого пользователя, чем вы думаете. В * BSD это было сделано для создания символических ссылок для простых строк, о которых должно знать ядро, например, для архитектуры (то есть i686 против x86_64). Тогда какой-то смысл в symlnik из /opt /someapp /bin => /opt /someapp /$ {arch} /bin. Но вы хотите сделать для каждого пользователя. Помните, что символические ссылки разрешены в ядре, и ядро не знает вашего имени или домашнего каталога. Он знает ваш идентификатор пользователя, и это все. Приходится переходить назад и вперед в пользовательский режим, чтобы получить любую информацию о вас. Не невозможно, но очень сложно. Тогда как будут работать программы setuid?

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

Не совсем то, что вы сказали, но, возможно, вы можете сделать это с контролем источников. ClearCase (платное программное обеспечение) имел обыкновение иметь модуль ядра, который делал бы большую часть того, что вы хотите, не уверен, что он все еще делает. Даже без модуля файловой системы ядра вы, вероятно, можете разделить систему управления исходным кодом на 60-70% того, что вам нужно.

0

Простое решение, которое я вижу, состоит в том, что в каждой папке есть скрытая папка .realfiles в которой реальные папки и папки на сервере, такие как A/a1 или A/a1/b2 являются символическими ссылками на папку выше A, поэтому A/a1 является символической ссылкой на ../MOUNT/.realfiles/a1 и A/a1/b2 является символической ссылкой на ../MOUNT/.realfiles/a1/.realfiles/b1.

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

(Я знаю эту особую ситуацию, но я лучше всего объяснил это хорошо)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .