我在通过 Samba 访问我的 Ubuntu Server 14.04 时遇到了一些问题。我尝试从我的 Ubuntu Gnome 14.04 桌面和其他 Linux 桌面进行访问。我希望在服务器中拥有精细的访问控制,一些用户可以读取和写入共享,而其他用户只能读取但不能写入/删除文件。我不确定我是否以正确的方式执行此操作,但我意识到在 Linux 上通常有很多方法可以执行某些操作。我已经通过命令行创建了文件夹,并使用 Samba 通过 Webmin 来共享它们。
我认为文件级 ACL 就是我目前的问题所在。例如,我在服务器上有两个文件夹,一个我可以读写,另一个我不能写入但可以读取。
Getfacl 列出了它们的属性如下:
john@Server:~$ getfacl /exports/Stuff
getfacl:从绝对路径名中删除前导“/”
文件:exports/Stuff
所有者:root
组:根
用户::rwx
组::rx
其他::rx
默认值:用户::rwx
默认值:用户:约翰:rw-
默认值:用户:妻子:rw-
默认值:用户:女儿:rw-
默认:组::rx
默认:组:用户:r--
默认值:掩码::rwx
默认:其他::rx
john@Server:~$ getfacl /exports/Photos
getfacl:从绝对路径名中删除前导“/”
文件:导出/照片
所有者:约翰
组:根
用户::rwx
组::rx
其他::rx
默认值:用户::rwx
默认值:用户:约翰:rw-
默认值:用户:妻子:rw-
默认:组::rx
默认:组:用户:r--
默认值:掩码::rwx
默认:其他::rx
现在我发现我是 Photos 的所有者,而 root 是文件夹 Stuff 的所有者,这似乎是它们之间最大的区别。
网络上的另一个用户也使用 Ubuntu Gnome,他们可以访问照片文件夹但不能写入,这是我想要的行为,我想象 Samba 正在控制这一点,因为她没有在 ACL 中列出,但在 Samba 安全中列出。
最好的方法是使用 setfacl 删除文件系统 acl,然后仅使用 samba 来控制用户访问,还是应该将它们设置为匹配?
我这样做对吗?处理此类问题的最佳做法是什么?所有客户端都在 Linux 上,因此如果您拥有一些共享,其中一些可以查看但永远不会写入,而另一些可以读取和写入,您将如何控制访问?
答案1
Webmin 已经过时且存在安全问题,不应使用。
我在 14.04 上遇到了同样的问题。很多人回答了我的问题,并说 Samba 在以前的 Ubuntu 版本上没有这么糟糕。但这是我添加到 $HOME/.bashrc 的一个函数和别名。
####################
# $1 is parameter for function
function fAdduser
{
if [ -z $1 ]; then
echo "ERROR: No user given.";
echo "Usage: cradduser USER";
echo "Sets permissions and groups for home dir of user.";
echo "Also sets up samba for user.";
echo " ";
return;
fi
# Add new user $1 and add to group 'users'.
# -m = make home dir
# -G GROUP = assign to group
sudo useradd -m -G users $1 || { echo "Error in useradd"; return 1; };
sudo usermod -p $1 $1;
echo "fAdduser: Their password is now the same as their username."
sudo passwd -u $1;
echo "fAdduser: Now enter their password.";
sudo passwd $1;
# Now add to samba users. This linux user uses this password for Samba.
# The user is the same, the Samba password is not.
# -a = add user
# -e = enable user
sudo smbpasswd -ae $1;
# Now change permissions for Samba on their home dir.
TDIR=/home/$1;
echo "Changing permissions and group on $TDIR files for Samba...";
sudo chmod a+rw $TDIR;
sudo chmod -R a+rw $TDIR/*;
sudo chgrp users $TDIR;
sudo chgrp -R users $TDIR/*;
echo "These are the users in group 'users'";
getent group users;
echo "Added user $1";
}
alias myadduser='fAdduser'
alias mysambareset='sudo restart smbd; sudo restart nmbd; sudo service smbd restart'
编辑并保存您的 .bashrc,然后执行以下操作:source $HOME/.bashrc
使更改生效。函数 fAdduser 添加新用户并为 Samba 设置它们。查看此处的步骤,看看您是否已完成所有操作。
要设置 Samba 用户,请执行以下操作:myadduser USERNAME
。
如果您更改了 Samba 配置文件,请保存并执行以下操作:mysambareset
。
经过许多相互矛盾的建议以及多次反复尝试后,这个方法对我来说是有效的。