Вопрос или проблема
Ubuntu Desktop 24.04LTS. Это мой первый пост на форуме, пожалуйста, сообщите, если я что-то напутал 😀
Я начинаю работать с Linux в целом, и мне удалось настроить общую папку samba в моей локальной сети. Я могу войти в учетную запись root (“root”) с моего телефона, и все работает идеально. Однако, когда я создал другого пользователя с именем gost (guest, id 1001), я смог получить доступ к корневой папке и увидеть все ее подкаталоги, но когда я попытался войти в /home, я получил сообщение об отказе в доступе. Вероятно, проблема с smb.conf
вложения: /etc/samba/smb.conf ; вывод testparm ; статус systemctl для smbd (логи внизу статуса)
[global]
workgroup = UserProductions
netbios name = netBiosName
guest ok = no
browseable = yes
read only = no
writeable = yes
public = yes
valid users = root gost
write list = root
read list = gost
[root]
path = /
[HDD]
path = /home/user/Desktop/HDD
[SSD]
path = /home/user/Desktop/SSD
Load smb config files from smb.conf
Loaded services file OK.
Weak crypto is allowed by GnuTLS (e.g. NTLM as a compatibility fallback)
Server role: ROLE_STANDALONE
● smbd.service - Samba SMB Daemon
Loaded: loaded (/usr/lib/systemd/system/smbd.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-01-27 14:00:45 CET; 1min 3s ago
Docs: man:smbd(8)
man:samba(7)
man:smb.conf(5)
Process: 19351 ExecCondition=/usr/share/samba/is-configured smb (code=exited, status=0/SUCCESS)
Main PID: 19354 (smbd)
Status: "smbd: ready to serve connections..."
*** info cut out for privacy ***
Jan 27 14:01:46 ********** smbd[19410]: [2025/01/27 14:01:46.314913, 0] source3/smbd/smb2_service.c:117(chdir_current_service)
Jan 27 14:01:46 ********** smbd[19410]: chdir_current_service: vfs_ChDir(/home/user/Desktop/HDD) failed: Permission denied. Current token: uid=1001, gid=1001, 2 groups: 1001 100
РЕШЕНИЕ: это проблема с разрешениями на файлы в общем, а не с samba. вот краткое руководство по chmod
, которое поможет открыть папки для других пользователей.
https://help.ubuntu.com/community/FilePermissions для получения дополнительной информации.
сначала выполните namei -mo /full/path/to/shared/files
(замените /full/path/… на, например, изображение в папке, к которой вы пытаетесь получить доступ)
вы должны получить вывод, который выглядит следующим образом: (взято с howtoforge .com)
f: /home/himanshu/Downloads/HTF-review/Nodejs-Docker/1.png
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x himanshu himanshu himanshu
drwxr-xr-x himanshu himanshu Downloads
drwxr-xr-x himanshu himanshu HTF-review
drwxr-xr-x himanshu himanshu Nodejs-Docker
-rw-rw-r-- himanshu himanshu 1.png
посмотрите на буквы слева и игнорируйте каждую “d”. Если у всех был полный доступ к папке, вывод будет “rwxrwxrwx”. Первые три буквы обозначают разрешения для владельца файла, следующие 3 — для группы, и последние 3 — для остальных.
rwx|rwx|rwx
буквы r — это чтение, w — запись, x — разрешения на выполнение. (ПРИМЕЧАНИЕ: для того, чтобы дать папке разрешения на чтение, мы фактически должны дать ей разрешения на выполнение, чтобы открыть ее. Только чтение не будет работать).
если последние 3 буквы для папки не имеют r и x, другие не могут войти в папку, поэтому они не могут получить к ней доступ из общего ресурса samba.
ПРИМЕЧАНИЕ: Пишу это. Я узнал, что этот метод предоставления доступа примитивный. Это будет работать, но это даст ВСЕМ, кто может подключиться к вашему samba/ у кого есть пользователь на вашем компьютере, доступ для чтения этой папки. Это может раскрыть личную информацию. Все до этого момента действительно.
ИСПОЛЬЗУЙТЕ ACL ВМЕСТО ЭТОГО!!! они предоставят разрешения только указанному пользователю.
пример acl: setfacl -m u:guestuser:rx /home/
чтобы добавить эти разрешения, мы будем использовать chmod {options} filename
. параметры имеют 3 части: пользователь(ли), действие и разрешение(я)
пользователь(ли) могут быть “u” для владельца, “g” для группы, “o” для остальных и “a” для всех. Действия: “+” для добавления, “-” для удаления и “=” для установки. Разрешения остаются r,w,x.
если вы хотите открыть все /home и его подпапки, используйте
chmod o+rx -R /home/
не рекомендуется, вместо этого настройте разрешения для каждой папки вручную, как:
chmod o+rx /home/user
chmod o+rx /home/user/Desktop
chmod o+rx /home/user/Desktop/HDD
если это помогло вам, поставьте лайк и хорошего дня!
Ответ или решение
Уважаемый пользователь,
Вы столкнулись с проблемой настройки Samba-сервера, в связи с которой пользователи, не обладающие правами root, не могут получить доступ к вашим общим папкам. Ошибка vfs.provider.smbj/access-denied
свидетельствует о проблемах с доступом, что указывает на возможные ошибки в конфигурации Samba или несоответствие файловых разрешений на уровне операционной системы. Давайте разберем эту ситуацию и найдем решение.
Теория
Samba позволяет обмениваться файлами между различными операционными системами в локальной сети, обычно между Linux и Windows. Когда вы настраиваете Samba, конфигурационный файл smb.conf
управляет правами доступа, включая пользователей, группы, разрешения на чтение и запись, а также доступ на выполнение для папок и файлов.
Ваша конфигурация содержит секцию [global]
, определяющую общие параметры, и секции для выступлений определённых ресурсов, например [root]
, [HDD]
, и [SSD]
. Ваша проблема заключается в том, что пользователь gost
не может получить доступ к определённым каталогам.
Пример
Рассмотрим конкретный случай. Вы, скорее всего, ошиблись в том, что учли только конфигурацию Samba при определении прав доступа, тогда как Linux требует правильно настроенных файловых разрешений для каждого пользователя.
Вот пример ваших текущих настроек /etc/samba/smb.conf
:
[global]
workgroup = UserProductions
netbios name = netBiosName
guest ok = no
browseable = yes
read only = no
writeable = yes
public = yes
valid users = root gost
write list = root
read list = gost
[root]
path = /
[HDD]
path = /home/user/Desktop/HDD
[SSD]
path = /home/user/Desktop/SSD
Применение
-
Перепроверьте права доступа файловой системы: Убедитесь, что каталог
/home
и все подкаталоги, к которым вы хотите предоставить доступ, имеют корректные разрешения. Это можно сделать с помощью командыnamei -mo /путь/к/файлам
. -
Настройте права доступа с использованием команд chmod и ACL: Для открытия доступа к папкам для конкретных пользователей или групп лучше всего использовать ACL (Access Control Lists), так как они позволяют более гибко управлять правами доступа.
Пример использования ACL:
setfacl -m u:gost:rx /home/user setfacl -m u:gost:rx /home/user/Desktop setfacl -m u:gost:rx /home/user/Desktop/HDD
Эта команда предоставляет пользователю
gost
права на чтение и выполнение (а значит и доступ к листингу) для перечисленных каталогов. -
Перепроверьте конфигурацию Samba: В разделах ресурсов в файле
smb.conf
проверьте, правильно ли указаныvalid users
, и соответствует ли список пользователей ожидаемому. Обратите внимание, что пользователь гост должен быть в состоянии читать и выполнять все уровни каталогов, ведущих к ресурсам Samba. -
Перезагрузите службу Samba: После всех изменений необходимо перезагрузить службы Samba, чтобы они вступили в силу. Это можно сделать с помощью команды:
sudo systemctl restart smbd
Если вы следовали этим шагам и проблема сохраняется, проверьте журналы ошибок Samba, чтобы зафиксировать возможные сопутствующие ошибки. Журнал можно найти с помощью команды journalctl -xe | grep smbd
.
Успешное решение этой проблемы подразумевает не только изменение настроек Samba, но и тщательную проверкуовых прав доступа на уровне ОС. Если у вас есть дальнейшие вопросы или нужна дополнительная помощь, не стесняйтесь обратиться за поддержкой. Желаю вам удачи в освоении Linux и успешной настройке Samba-сервера!
С уважением,
Ваш IT-эксперт