Как заставить samba следовать символической ссылке вне общего пути


61

Это сервер Ubuntu 10.04 64 и samba 3.4.7.

У меня есть общий каталог /home/mit/shareи еще один, /home/tempкоторый я связываю с общим:

ln -s /home/temp /home/mit/share/temp

Но в Windows после использования Интернета я не могу открыть S:/temp, но в Linux можно получить доступ, /home/mit/share/tempкак и ожидалось.

Это работает, если я связываю каталоги внутри /home/mit/share/temp, поэтому я предполагаю, что samba ограничивает переход по ссылке за пределами / выше общего каталога.

РЕДАКТИРОВАТЬ:

См. Также этот вопрос под названием Ubuntu + последняя версия samba, символические ссылки больше не работают на общем ресурсе, смонтированном в Windows .

Кажется , лучше всего поместить unix extensions = noв глобальную секцию и follow symlinks = yesи wide links = yesтолько в раздел акции, где это действительно необходимо.

unix extensionФлаг должен жить в глобальном разделе , а не в отдельных секциях акций. Но по соображениям безопасности лучше использовать другие варианты только там, где это необходимо, а не глобально.


Можете ли вы попробовать жесткую ссылку вместо символической ссылки?
Фалмарри

Ответы:


92

Редактировать smb.conf

[global]
unix extensions = no

[share]
follow symlinks = yes
wide links = yes

Примечание. Если вы используете более новую версию samba, вам может подойти следующее:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

документация follow symlinksи wide linksфлаги: https://www.samba.org/samba/docs/using_samba/ch08.html#samba2-CHP-8-TABLE-1


См. Также объяснение в конце вопроса выше, почему это хорошее решение.
с

В случае, если кто-то еще борется со всеми этими комментариями, запутывая этот довольно короткий файл: скопируйте в резервную копию и заново создайте отфильтрованный: 1: cp /etc/samba/smb.conf /etc/samba/smb.conf.bak2:grep -o '^[^#;]*' smb.conf.bak >smb.conf
Фрэнк Нок

это [share]значит [<share_name>]?
Necktwi

@neckTwi - Это то, что я предположил, и это сработало для меня.
Джефф

@Geoff Это не сработало для меня! перешел наsshfs
Necktwi

11

Приветствую, я попытался поместить это в конфигурацию, чтобы исправить символические ссылки для окон для моей установки, но я не уверен, повлияет ли это на клиент Windows, в противном случае он будет следовать символическим ссылкам при подключении к этому блоку.

[global]                                                                        
unix extensions = no

Ответ Цици согласен с этим: superuser.com/questions/128716/…
Янус

Да, это определенно решает проблему в моей среде.
TML

10

В качестве альтернативы другим ответам, чтобы оставить включенными расширения Unix, можно использовать:

[global]
allow insecure wide links = yes

[share]
follow symlinks = yes
wide links = yes

это [share]значит [<share_name>]?
Necktwi

Да, это может быть любой раздел smb.conf, который «описывает общий ресурс (известный как« share »)» (цитируется в документации). Это может быть также в специальном разделе [homes], где я его использую. Смотрите документацию для деталей.
user1182474

4

Чтобы клиенты Samba могли переходить по символическим ссылкам вне общего пути, все, что вам нужно в конфигурации Samba:

[global]
allow insecure wide links = yes
unix extensions = no

[myShare]
wide links = yes

(в дополнение к самбе, конечно, разделяет определения). Этого теоретически достаточно для клиентов * nix.

NB. Директива follow symlinks не обязательна, по умолчанию используется значение yes

Что касается клиентов Windows, 1 настройка по-прежнему отсутствует, чтобы позволить им переходить по таким ссылкам. Для этого:

  1. откройте оболочку Windows с правами администратора
  2. бегать :

    fsutil behavior set SymlinkEvaluation L2L:1 R2R:1 L2R:1 R2L:1
    
  3. перезагрузить, чтобы перезагрузить настройки

Примечание: тот же результат можно получить, отредактировав реестр Windows. Смотрите ссылки ниже

источники:


0

Вам может потребоваться обратиться не только к файлу конфигурации Samba, если вы используете AppArmor.

Вам нужны следующие директивы в вашем smb.conf:

follow symlinks = yes
wide links = yes
unix extensions = no
# No need for "allow insecure wide links" unless you want "unix extensions = yes"

Но AppArmor блокирует доступ к частям файловой системы в соответствии со своей семантикой набора правил. Итак, если ваша символическая ссылка в Samba указывает на местоположение, которое AppArmor будет блокировать, Samba запретит доступ.

В моей системе Samba обновляет профили AppArmor при запуске / остановке службы, поэтому я могу изменить профиль AppArmor, но рискую перезаписать Samba или другую программу. Вместо этого я решил создать недоступный общий ресурс в Samba, ссылающийся на местоположение, которое содержало цель символической ссылки, к которой я хотел получить доступ (все еще в smb.conf):

# The following is a hack for AppArmor to allow the path
[share1 for AppArmor] # Or whichever name you choose
    browseable = no
    path = /home # Point to directory or parent directory of the location to access
    read only = yes
    guest ok = no
    valid users = none
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.