У меня 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
Если вы не хотите, чтобы домашний каталог администратора был «доступен для чтения», вы можете
предоставить соответствующие разрешения с помощью 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:
будут установлены разрешения для элементов, созданных в каталоге.