pmd*_*dci 6 sftp permissions smb
我将 CentOS 服务器配置为 SFTP 服务器,以安全的方式接收客户文件。然后我需要能够通过 SMB 访问这些文件。
我设法使权限按预期工作,一切都很好,可以支持客户访问 SFTP。一个重要的方面是我将用户“囚禁”到他们的 /var/inbound/ 目录。
现在我创建了 /var/inbound 目录:
sudo mkdir /var/inbound
sudo chown root.root /var/inbound #root must be owner of directory
Run Code Online (Sandbox Code Playgroud)
这是我为每个客户创建子目录的方法:
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
Run Code Online (Sandbox Code Playgroud)
注意: /var/inbound/[username]/ 和 /var/inbound/[username]/uploads/ 目录都需要一组特殊的权限。执行以下命令,将 [username] 替换为相关用户。
现在我将免除您剩余的 SSH/SFTP 配置。但足以说明我可以让用户被监禁到他们自己的目录中,并且我使用 SCPONLY 禁用了他们的 SSH/控制台访问。
现在事情变得复杂了......
我现在需要让 SMB 访问特定帐户(我们称之为fileaccess)到 /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
Run Code Online (Sandbox Code Playgroud)
现在这是我想使用fileaccess帐户访问的目录:
$ 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
Run Code Online (Sandbox Code Playgroud)
当我使用fileaccess帐户通过 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
Run Code Online (Sandbox Code Playgroud)
注意:虽然我有一个域,但这台 CentOS 机器不是它的一部分。它确实在我的 Windows AD DNS 上有一个条目,并且被配置为使用 DNS 服务器——但这就是它的结束。我希望这台机器被隔离。因此尝试连接到此服务器是使用本地 CentOS 帐户进行的。
我特别担心这可能是 Linux 文件系统访问问题,并且必要的更改可能与所需的 SFTP 权限冲突(例如 SFTP 要求 /var/inbound// 目录由 root 拥有)。
我想知道是否有办法在 SMB.conf 中强制执行相关帐户的访问权限,以便该帐户具有浏览/读取/正确权限。我在 smb.conf 中尝试了各种配置选项(我一直在这里阅读 smb.conf 的手册)。
看来我一直在追斑马。
感谢 /dev/chat 频道的 derobert、terdon 等用户的帮助,我们发现问题确实是 SELinux。事实上,CentOS wiki 文档中有关 Samba 的说明如下:
“现在我们将使用 semanage 命令(SELinux 软件包的一部分)打开您想要与网络共享的目录。没错。如果不这样做,您将启动 samba 并得到一个一堆空白目录和恐慌认为服务器删除了你的所有数据!”
所以我需要执行的命令是:
sudo semanage fcontext -a -t samba_share_t '/var/inbound(/.*)?'
sudo restorecon -R /var/inbound
Run Code Online (Sandbox Code Playgroud)
繁荣!现在我可以按预期访问这些文件。
归档时间: |
|
查看次数: |
860 次 |
最近记录: |