Ubuntu Server Samba 权限最佳实践

Ubuntu Server Samba 权限最佳实践

我在通过 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

经过许多相互矛盾的建议以及多次反复尝试后,这个方法对我来说是有效的。

相关内容