我的问题与 stackoverflow 问题类似,虚拟 centOS 6.2 - 如何使用 Samba 共享 /var/www,但是我收到以下错误:
Windows cannot access \server1\dev You do not have permission to access \\server1\dev
我安装了 ubuntu 服务器,并尝试授予/var/www/html/dev
其他计算机(例如 Windows 7 和 ubuntu 桌面)对该目录的读写权限。
我将文件夹的所有者更改/var/www
为www-data
组,并将用户添加dev1
到该组。然后我授予该文件夹 0755 权限/var/www
,以下是我的 smb.conf 文件的内容:
[global]
workgroup = WORKGROUP
server string = Samba Server %v
netbios name = ubuntu
security = user
map to guest = bad user
dns proxy = no
#============================ Share Definitions ==============================
[sharing]
path = /samba/share
browsable =yes
writable = yes
guest ok = yes
read only = no
force user = nobody
[dev]
path = /var/www/html/dev
valid users = @www-data
read only = no
guest ok = no
writable = yes
browsable = yes
因此,我尝试dev
使用密码访问共享。我还按照以下步骤添加了 Samba 用户本教程但是当我尝试从 Windows 7 机器访问此共享时,收到以下错误消息:
Windows cannot access \server1\dev. You do not have permission to access \\server1\dev
附加信息
我可以访问/samba/share
但无法访问dev
共享。
编辑:现在 windwos 系统要求输入密码。但输入密码后我收到错误\\s1\dev is not accessible. You might not have permission to use this network resource. Contact the administrator of this server to find out if you have access permissions.
答案1
图片来源:马丁
您需要更改 samba 安装配置,以便授予 www-data 用户和组写入权限。您可能有能力设置特定目录权限,也可能没有,但如果没有,您必须为整个驱动器设置写入权限(这对安全性不利)。
我个人建议使用 nfs 而不是 samba 共享来进行网络存储,并使用 ext3 或其他功能齐全的文件系统。
http://www.cyberciti.biz/tips/how-do-i-set-permissions-to-samba-shares.html
https://help.ubuntu.com/community/Samba/SambaClientGuide
http://www.mattvanstone.com/2006/06/automatically_mounting_smb_sha/
答案2
www-数据是一个系统帐户(<1000 uid/gid),根本没有密码。我不建议使用低于 1000 的 uid 和 gid。相反,请创建一个新帐户或使用 uid >1000 的现有帐户。
也许您想创建一个仅用于通过 samba 编辑网页的新帐户。您可以通过创建 jail 来实现这一点。
暗示:使用现有用户时,不需要执行步骤 1 到 4。
- 创建一个监狱
# mkdir -p /srv/smb/exampleusername
- 添加条目/etc/fstab
/var/www /srv/smb/exampleusername none bind 0 0
- 绑定/var/www到/srv/smb/示例用户名,因此您无需重新启动即可生效文件系统
# mount -o bind /var/www /srv/smb/exampleusername
- 创建一个用户,然后删除他的权利并将他关进监狱。
# adduser exampleuser
# chown root:root /home/exampleuser
# chmod 0755 /home/exampleuser
# usermod -s /usr/sbin/nologin -d /srv/smb/exampleuser exampleuser
- 更改权利万维网给那个新的/特定的用户。
# chown -R exampleuser:exampleuser /var/www
# chmod -R 0755 /var/www
# chown exampleuser:exampleuser /srv/smb/www
# chmod 0755 /srv/smb/exampleuser
- 示例分享smb配置文件
[www]
path = /srv/smb/exampleuser
comment = yada yada yada
browseable = yes
guest ok = no
valid users = exampleuser
writeable = yes
- 不使用时libpam-smbpass那么你也需要将用户添加到 smb-db。我不建议使用libpam-smbpass出于安全原因,但这取决于您。如果没有此库,您需要为该用户添加密码。
# smbpasswd -a exampleuser
- 测试您的配置
完毕 !
答案3
假设您有一个 Linux 登录用户帐户 bill,则您已安装 Samba。如果您正在运行 SELinux,则需要执行许多其他命令。
另外,确保您没有与全世界共享 smb,您的路由器或防火墙应该阻止端口 137、139、445。
# Block the outside world from your server's smb shares
# assuming your local network is 192.168.0.*
iptables -A INPUT -j DROP ! -s 192.168.0.0/24 -m multiport -p tcp --dports 139,445
# Add your user account "bill" to www-data
usermod -aG www-data bill
# Give bill an smb password
smbpasswd -a bill
# Set permissions in the html folder for www-data
# WARNING: existing apps might require specific permissions on specific folders
# web code can now alter existing -/html/dev folder files
chown www-data:www-data -R /var/www/html/dev
# alternatively, in combination with create mask 775 in smb.conf
chown root:www-data -R /var/www/html/dev
chmod -R 775 /var/www/html/dev
# add the following text to the bottom of /etc/samba/smb.conf
[dev]
path = /var/www/html/dev
available = yes
valid users = @www-data
read only = no
browsable = yes
public = no
writable = yes
create mask = 0775
force user = www-data
force group = www-data
另一种方法可能是不设置任何其他权限,但强制用户和组以 root 身份使用,但这对我来说似乎有点可怕。
答案4
使用此解决方案,Apache/Nginx/PHP/等仍将具有可操作的写入权限,因为www-数据到/var/www,而开发人员使用下面的用户帐户具有写权限/var/www:
- 将开发人员/管理员用户名添加到 Web 服务器组,通常www-数据:
sudo usermod -a -G www-数据Samba共享用户名 - 猜测你的公开文件如下/var/www,然后授予该组递归写访问权限:
sudo find /var/www -type d -print0 | xargs -0 chmod775
sudo find /var/www -type f -print0 | xargs -0 chmod664
sudo chown www数据:Samba共享用户的组名-R /var/www - 准备/etc/smb.conf对于新组成员对共享文件夹的写访问权限:
[www]
强制创建模式 =664
强制目录模式 =775
writeable=yes
guest ok=yes
path=/var/www
comment="公共区域"
write list =Samba共享用户名...
有效用户 =Samba共享用户名...
当然,你可以为下面的多个共享设置不同的权限/var/www只要所有用户都在该组中www-数据。
如果 Web 服务器需要对通过 Samba 共享提供的文件或文件夹具有写权限,则您必须将用户 www-data 添加到 Samba 共享用户的组或更正权限(参见第 2 点)。
一个警告:
不建议在生产系统中使用此配置,因为它会削弱 Web 服务器的安全性。但是,对于需要将数据写入虚拟机等的开发环境来说,它非常有用。