我有一个安装了 Oracle DB 和 APEX 的 Oracle Linux VM。数据库位于/home/oracle/product/11.2.0/dbhome_1
.在此文件夹中,有特定于 APEX 产品的文件夹:/Product_1
、/Product_2
等
目前,文件通过 Oracle 用户使用 FTP 添加到这些产品文件夹中。这意味着任何拥有这些凭据的人都可以登录该框并执行许多他们可能不应该执行的操作。
如何设置 ftpuser
$ usermod -d /home/oracle/products/11.2.0/dbhome_1/ ftpuser
这样 ftpuser 只能读取和写入子文件夹中的文件,请记住这些文件必须属于 Oracle,以便 APEX 可以读取这些文件夹中的文件并将它们导入数据库中?
我看到的每一篇文章都说要创建一个新文件夹供 ftpuser 使用。
谢谢
答案1
除非 APEX 专门强制执行所有权要求(这将是愚蠢的),否则文件本身只需要可由 Oracle 读取。如果 APEX 需要在导入后移走或删除文件,则文件所在目录需要可由 APEX 写入。
我不知道 APEX,但我会考虑将 FTP 用户的主目录设置为
usermod -d /home/ftpuser ftpuser
然后将 APEX 产品文件夹移动到/home/ftpuser/Product_1
等,然后创建如下所示的符号链接:
ln -s /home/ftpuser/Product_1 /home/oracle/products/11.2.0/dbhome_1/Product_1
以便/home/oracle/products/11.2.0/dbhome_1/Product_1 -> /home/ftpuser/Product_1
。
现在,ftpuser 可以被 chroot,这样它将像/
通过 FTP 一样看到其主目录,因此它将完全无法访问实际的/home/oracle/...
目录树。另一方面,APEX 应该将符号链接视为等同于真实目录(除非它专门检查符号链接)并通过链接访问产品子文件夹。
应该ftpuser
有自己的组,即groupadd ftpuser
如果有必要的话首先是,然后是usermod -g ftpuser ftpuser
。用户oracle
还应该是组的次要成员ftpuser
:usermod -a -G ftpuser oracle
或gpasswd -a oracle ftpuser
。
权限和所有权:
/home/ftpuser
可以由 root 拥有,但需要由 ftpuser 访问,因此如果 ftpuser 有一个专用组,则它可以是chown root:ftpuser
和chmod 0750
(drwxr-x---
) 以获得最大限制。- 产品子文件夹可以由用户、组
/home/ftpuser/Product_1
拥有,并且用户和组都可以写入。 setgid 位可确保组设置正确。所以和( )。oracle
ftpuser
chown oracle:ftpuser
chmod 2770
drwxrws---
- 如果可能,FTP 服务器应配置为不是保留客户端文件权限;它应该强制执行标准 umask 022 或 002。因此,添加到产品子文件夹中的文件将由
ftpuser
、组ftpuser
和权限 0644 或 0664 (-rw-r--r--
或-rw-rw-r--
分别)拥有。
由于oracle
将成为该组的成员ftpuser
,因此它将能够访问/home/ftpuser
.由于产品子文件夹归 拥有oracle
,因此即使ftpuser
设法创建具有不正确权限的文件,oracle
也至少能够删除它们,并且在需要时始终能够创建新文件。由于所有能够访问该文件夹的人都可以读取产品子文件夹中的文件,因此读取和导入这些文件根本不成问题;如果umask 002
由 FTP 服务器强制执行,oracle
则甚至可以在需要时写入文件。
笔记:FTP 用户将看到产品子文件夹Product_1
为~/Product_1
,甚至就像/Product_1
使用了 FTP 服务器的 chroot 功能一样。 APEX 配置可能根本不需要更改,因为符号链接将允许按原样使用现有路径名(除非 APEX 专门检查并拒绝符号链接)。
产品子文件夹的实际磁盘空间现在将在/home/ftpuser/Product_1
等处消耗,而不是在/home/oracle/...
目录层次结构中。如果这是一个问题,您可以使用 Linux 绑定安装来代替符号链接,首先创建空目录/home/ftpuser/Product_1
等作为安装点,然后在文件中添加如下行/etc/fstab
:
/home/oracle/products/11.2.0/dbhome_1/Product_1 /home/ftpuser/Product_1 none bind 0 0
重新启动或执行操作后mount -a
,现在也应该可以在 下访问实际的产品子文件夹/home/ftpuser/
。请注意,与符号链接不同,这种绑定安装的使用可能会导致每个产品子文件夹消耗双倍的备份容量,除非您从备份中排除额外的副本。