Назад | Перейти на главную страницу

Разрешения Samba для скопированных файлов

У меня Samba работает на подключаемом компьютере под управлением Debian Squeeze, который я пытаюсь настроить для работы в качестве файлового веб-сервера.

На машине работает Lighttpd для веб-сервера и Samba для обмена файлами. Пользователь может использовать Samba для копирования файлов со своего локального компьютера на подключаемый компьютер с помощью Samba, а затем просматривать их через веб-браузер (сценарий, который я написал).

Lighttpd работает как www-data, Samba работает как root и пользователь аутентифицируется с помощью Samba через учетную запись пользователя с именем admin.

Проблема в том, что у меня возникают трудности с разрешениями, когда пользователь копии файлы со своей машины через Samba. Возьмем пример с файлом с именем foo.pdf: -


пример

foo.pdf хранится на отдельном диске NAS в локальной сети, который пользователь копирует на свой локальный компьютер под управлением OS X. На данный момент разрешения следующие: -

mac:Desktop jon$ ls -l | grep foo.pdf
-rwx------    1 jon  NETWORK\Domain Users     3516266 10 May 10:54 foo.pdf

Все нормально, потому что у пользователя есть полные права на rwx файл, хотя никто другой этого не делает - это не проблема. Но теперь пользователь решает скопировать foo.pdf со своего локального компьютера на подключенный компьютер - и все начинает идти не так!

После использования Samba для копирования файла разрешения теперь следующие: -

root@plug:/home/admin/content# ls -l | grep foo.pdf
-rwx------ 1 admin    admin    3516266 May 10 09:54 foo.pdf

Проблема в том, что сейчас только admin имеет право на rwx файл. Никакие другие пользователи вообще не имеют никаких прав. Это означает, что www-data (который является веб-сервером) не имеет прав на этот файл. В результате 403 - Forbidden если я попытаюсь открыть foo.pdf через веб-браузер.


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

Чтение похожих вопросов на SF и других сайтах указывает на то, что потенциальное решение может лежать в create mode/mask и force create mode/mask - однако неясно, применимо ли это только к новым файлам или также к скопированным файлам - потому что это не работает для меня!

В качестве теста я использовал эти параметры, чтобы заставить 0777 (очевидно, небезопасно для производственной среды, но просто хотел протестировать) и обнаружил, что он не вносил никаких изменений в права доступа к копируемым файлам.

Мой smb.conf как следует:-

[global]
        workgroup = WORKGROUP
        server string = %h server
        dns proxy = no
        log file = /var/log/samba/log.%m
        log level = 4
        max log size = 1000
        syslog = 0
        panic action = /usr/share/samba/panic-action %d
        encrypt passwords = true
        passdb backend = tdbsam
        obey pam restrictions = yes
        unix password sync = yes
        passwd program = /usr/bin/passwd %u
        passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword$
        pam password change = yes
        create mask = 0777
        force create mode = 0777
        directory mask = 0777
        force directory mode = 0777

Похоже, что это вообще ничего не меняет, поскольку файлы все еще имеют -rwx------ 1 admin admin разрешения после копирования.

...Любые идеи?

Клиент может явно устанавливать списки управления доступом к файлам, тем самым перезаписывая разрешения, выбранные Samba при создании файла. Вы можете попробовать использовать force security mode для принудительной установки определенных битов. Следующее должно заставить мир читать разрешение:

force security mode = 004

Если вы не хотите, чтобы домашний каталог администратора был «доступен для чтения», вы можете

  • создать отдельный каталог для файлов, к которым вы хотите получить доступ через веб-сервер, например / var / www / shared
  • поделитесь этим каталогом через самбу
  • предоставить соответствующие разрешения с помощью acl:

    setfacl -m user:www-data:rx,default:user:www-data:rx /var/www/shared
    setfacl -m group:users:rwx,default:group:users:rwx /var/www/shared

вы можете перечислить записи ACL с помощью getfacl /var/www/shared. default: будут установлены разрешения для элементов, созданных в каталоге.