Linux 和 SMB 权限未按预期工作

Linux 和 SMB 权限未按预期工作

我将 CentOS 服务器配置为 SFTP 服务器,以安全的方式接收客户文件。然后我需要能够通过 SMB 访问这些文件。

  • 我的 SFTP 的“根”位于 /var/inbound/
  • 然后在 /var/inbound/ 下,我为每个客户都有一个目录(例如 /var/inbound/customer1/
  • 然后为了监禁用户,我在每个客户目录下都有一个名为 uploads 的子目录(例如 /var/inbound/customer1/uploads/ )

我设法使权限按预期工作,一切都很好,可以支持客户访问 SFTP。一个重要的方面是我将用户“监禁”到他们的 /var/inbound/ 目录中。

现在我创建了 /var/inbound 目录:

sudo mkdir /var/inbound
sudo chown root.root /var/inbound #root must be owner of directory

以下是我为每个客户创建子目录的方法:

sudo mkdir -p /var/inbound/[username]/uploads
sudo chown root /var/inbound/[username]
sudo chmod go-w /var/inbound/[username]
sudo chown [username]: /var/inbound/[username]/uploads
sudo chmod 770 /var/inbound/[username]/uploads

笔记:/var/inbound/[username]/ 和 /var/inbound/[username]/uploads/ 目录都需要一组特殊的权限。执行以下命令,将 [用户名] 替换为相关用户。

现在我将免除您剩下的 SSH/SFTP 配置。但我只想说,我可以让用户被囚禁在他们自己的目录中,并且我使用 SCPONLY 禁用了他们的 SSH/控制台访问。

现在事情变得复杂了......

我现在需要授予 SMB 对特定帐户的访问权限(我们称之为文件访问) 到 /var/inbound/ 目录,该目录可从 Windows Server 主机访问。我确实设法将 /var/inbound 目录视为 Windows 的共享,包括其子目录。但是,我看不到某些文件,并且我没有对我应该访问的文件的写访问权限。

$ ls -l /var/inbound
total 0
drwxr-xr-x. 3 root root 20 Jan  5 11:53 testuser

$ ls -l /var/inbound/testuser
total 0
drwxrwxr-x. 2 testuser sftponly 53 Jan  5 12:26 uploads

现在这是我想要访问的目录文件访问帐户:

$ ls -la /var/inbound/testuser/uploads/ 
total 12 
drwxrwx---. 2 testuser    sftponly   53 Jan 5 15:12  . 
drwxr-xr-x. 3 root        root       20 Jan 5 11:53  .. 
-rw-r--r--. 1 fileaccess  sftponly   30 Jan 5 12:26  test2.txt 
-rw-r--r--. 1 testuser    sftponly   26 Jan 5 12:25  test3.txt 
-rw-rw-r--. 1 dmgmadmin   dmgmadmin  14 Jan 5 11:53  test.txt

当我通过 SMB 连接时文件访问帐户,我只能看到 test.txt,但无法打开该文件(访问被拒绝)。

这是我的 smb.conf。正如你所看到的,我一直在尝试一系列不同的选择:

    [global]
    workgroup = <MYDOMAINNAMEGOESHERE>
    security = user

    passdb backend = tdbsam

    [inbound]
    comment = Incoming files (as %u)
    path = /var/inbound/
    valid users = fileaccess
    guest ok = No
    read only = No
    writeable = Yes
    browseable = Yes
    create mask = 0640
    directory mask = 0750

笔记:虽然我确实有一个域,但这台 CentOS 机器不属于其中。它确实在我的 Windows AD DNS 上有一个条目,并且配置为使用 DNS 服务器 - 但这就是它的结束。我希望这台机器被隔离。因此,尝试使用本地 CentOS 帐户连接到该服务器。

我特别担心这可能是 Linux 文件系统访问问题,并且必要的更改可能与所需的 SFTP 权限发生冲突(例如,SFTP 要求 /var/inbound// 目录由 root 拥有)。

我想知道是否有办法在 SMB.conf 中强制执行相关帐户的访问权限,以便该帐户具有浏览/读取/权限。我尝试了 smb.conf 中的各种配置选项(我一直在阅读 smb.conf 的手册这里)。

答案1

我还建议您查看“acl”包。高级ACL比传统的Unix ACL方便很多,我现在一直在使用它。

答案2

看来我一直在追斑马。

感谢 /dev/chat 频道的 derobert、terdon 等用户的帮助,我们发现问题确实是 SELinux。事实上,有关 Samba 的 CentOS wiki 文档说如下:

“现在我们将使用 semanage 命令(SELinux 软件包的一部分)打开您想要与网络共享的目录。没错。如果不这样做,您将启动 samba 并得到一个一堆空白目录和恐慌认为服务器删除了你的所有数据!”

所以我需要执行的命令是:

sudo semanage fcontext -a -t samba_share_t '/var/inbound(/.*)?'
sudo restorecon -R /var/inbound

繁荣!现在我可以按预期访问这些文件。

相关内容