跳转到内容

OpenClinica 用户手册

50% developed
来自维基教科书,开放世界中的开放书籍

保护 OpenClinica

[编辑 | 编辑源代码]

安装、配置和保护 OpenClinica [OC] 社区版 [CE] 绝对是一次冒险,需要在计算机科学的各个方面拥有知识。然而,通过广泛的谷歌搜索和奉献精神,任何对 Linux 工作有一定亲和力的人都可以做到。我不是计算机科学家,但我还是承担了在 Web 服务器上部署 OC 的任务,最终成功地使其运行起来。不过,在有些地方,我真希望有一份关于如何管理此过程的详细指南。通过这篇文章,我想填补这一空白,至少在 OC 的安全方面,为尝试完成相同任务的任何人提供帮助。

我采取的安全措施是我从众多来源中找到的,我不能保证它们是保护 OC 时可以/应该采取的所有措施的详尽列表。正如我之前提到的,我不是该领域的专家,本指南仅仅是大量搜索和反复试验的结果。对这里看到的所有内容都要持保留态度,如果你认为自己更了解,请不要犹豫,对其进行更改。同时,请随时建议改进/添加此过程,以便我们都能从这些集体知识中受益。

我尽可能认真地对待安全问题,因为截至 2020 年,OC 的 CE 所需的软件已经过时很久了,因此必须尽一切努力使其安全,尤其是在处理患者数据时。

我选择的设置如下

  • OpenClinica CE 3.15
  • CentOS 8
  • PostgreSQL 8.4.22
  • Tomcat 7.0.52
  • JVM 1.7.0

我遵循了这份安装指南,因为我找不到 v3.15 的安装指南。获取上面列出的某些特定软件版本是一个相当大的挑战,如果我不得不重新开始,我会考虑使用 CentOS 6,因为这个版本原生支持一些这些旧的依赖项。CentOS 6 也已于今年停止支持,因此在选择它时要仔细考虑。

根据上述指南的说明,运行 OC 所需的所有组件的根文件夹位于:/usr/local

闲话少说,我们开始吧

首先,要访问 Web 服务器(如果它是一个远程服务器),必须对其进行保护。每天都有数百次尝试使用常见的用户名登录 Web 服务器,因此这绝对应该是你的第一道防线。

修改 sshd_config 文件

[编辑 | 编辑源代码]

此文件位于 `/etc/ssh/sshd_config` 中,它控制对服务器的 ssh 访问。在对其进行任何更改之前,请确保已对其进行备份。在文件中,修改以下参数

只允许需要访问服务器的用户名

  • AllowUsers <username1> <username2>

禁用 root 登录

  • PermitRootLogin no
  • ChallengeResponseAuthentication no

在将你的 ssh 密钥复制到服务器后(使用 ssh-copy-id 或手动,通过复制你的公钥并将其粘贴到服务器上的 `~/.ssh/authorized_keys` 文件中),你应该禁用密码认证。这样一来,只有使用 ssh 密钥认证才能登录。

  • PasswordAuthentication no

为了增加安全性,UsePAM 也可以设置为 `no`,但是,这弄乱了我的 ssh 认证过程,我不得不将其重新设置为 `yes`。

在配置完所有内容后,重启 sshd 服务

sudo systemctl restart sshd

此软件包通过禁止在 x 次失败的 ssh 认证后尝试登录的 IP 地址,来提供额外的 SSH 安全性。这里有一份关于配置 fail2ban 的很棒的指南

sudo yum install epel-release

sudo yum install fail2ban

在 `/etc/fail2ban` 中创建一个名为 `jail.local` 的文件,并将以下内容粘贴到其中(使用你自己的电子邮件地址)

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
maxretry = 5

[sshd]
enabled = true

destemail = <[email protected]>
sender = <[email protected]>
sendername = Fail2ban
mta = sendmail
action = %(action_mwl)s

创建此文件而不是直接在 `jail.conf` 中配置是首选,因为 fail2ban 更新会覆盖你的配置。现在,在 IP 地址被禁止(在 5 次失败的登录尝试后)或 fail2ban 被停止/启动时,你将收到电子邮件通知。

重启 fail2ban 服务:sudo systemctl restart fail2ban

如果你想收到有关被禁止的 IP 地址的更多信息,可以安装 `whoami.x86_64` 软件包。

你可以通过以下命令检查 sshd 监禁状态:sudo fail2ban status sshd

虽然这听起来很明显,但仍然至关重要的是,要在你的服务器上维护强壮且唯一的密码。我建议使用 KeePass 来跟踪它们,因为它还允许你自动生成非常强壮的密码。

确保 Tomcat 的安全性与确保您的 Web 服务器的安全性一样重要,因为它是您与外部世界的联络点。 我从以下网站收集了下面列出的安全措施[1] [2] [3] [4]

访问控制

[edit | edit source]

这是为了确保即使攻击者能够获得 Web 服务器,她所能造成的损害也最小。 首先,永远不要以 root 用户身份运行您的 Web 服务器,创建一个名为 `tomcat` 的新用户,该用户具有运行服务器所需的最低权限。

使 `tomcat` 文件夹及其所有内容归 tomcat 用户和 tomcat 组所有

chown -R tomcat:tomcat /usr/local/tomcat

(没有 -R 标志,您只更改文件夹的所有权,而不更改内容)

授予文件夹所有者读写和执行权限

chmod -R 700 /usr/local/tomcat

(有关使用 chmod 的指南:https://www.lifewire.com/uses-of-command-chmod-2201064) 注意:要打开文件夹,您需要对其具有执行权限。 我也是这样学到的。

从配置文件夹中删除写和执行权限。 这可以防止攻击者修改 Tomcat 的配置文件

chmod -R u-wx /usr/local/tomcat/conf

但是,Tomcat 需要能够打开文件夹,因此向文件夹添加执行权限(= 不使用 -R 标志)

chmod u+x /usr/local/tomcat/conf

从 openclinica.config 和 openclinica-ws.config(如果已安装)文件夹中删除读权限

chmod -R u-w openclinica*.config

从 logs 文件夹中删除读权限

chmod -R u-r /usr/local/tomcat/logs

从 oldwebapps 文件夹中删除所有权限,因为在部署过程中 Tomcat 不必对这些文件执行任何操作

chmod -R u-rwx /usr/local/tomcat/oldwebapps

将 `datainfo.properties` 文件设置为只读(如果已安装,对 OpenClinica-ws 执行相同的操作)

chmod 400 /usr/local/tomcat/webapps/OpenClinica/WEB-INF/classes/datainfo.properties

这样,您就完成了 Tomcat 的访问控制方面。

您还可以做的一件事是将您的用户添加到 tomcat 组,并授予该组对 usr/local/tomcat 文件夹的读写执行权限。 这样,您仍然可以方便地编辑所有内容,而无需使用 root/sudo。 我对它的安全性方面真的不太确定,请自行承担使用风险。 并且不要忘记从组中删除自己并删除权限,一旦所有配置完成。

HTTPS

[edit | edit source]

如上所述,Tomcat 的 SSL 设置指南应该是您首先要执行的步骤(https://tomcat.net.cn/tomcat-7.0-doc/ssl-howto.html)。 您必须确保本指南中列出的所有步骤都是使用 `tomcat` 用户完成的,因为如果以其他方式完成,`.keystore` 文件将在该其他用户的 home 目录下创建,而 tomcat 无法找到并读取它。 理论上,您也可以注释掉 HTTP 连接器,因为强制使用 HTTPS 对于 OC 来说是最佳实践。 端口转发将在防火墙级别启用,因此理论上 Tomcat 永远不会收到对端口 8080 的请求,但我还没有实际测试过。

配置好后,您应该能够使用 HTTPS 与您的 Web 服务器通信(在 https://127.0.0.1:8443/OpenClinica 上)。 如果您使用的是自签名证书,您的浏览器会抱怨,但您仍然可以访问该网站。 您可以在 Tomcat 中强制使用 HTTPS,方法是在 `tomcat/conf` 中的 `web.xml` 文件末尾添加以下内容(在 </web-app> 标签之前)

<security-constraint>
  <web-resource-collection>
    <web-resource-name>Protected Context</web-resource-name>
    <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
    <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

Cookies、自定义错误页面、禁用列表...

[edit | edit source]

这些是良好的做法,但不是必须的。 这些包括从错误页面隐藏服务器版本或禁用文件系统列表,以更好地保护您免受 DDoS 攻击。

以下所有内容都需要添加到 `web.xml` 文件中。

安全和 HTTP 仅限 cookie,以防止 XSS 攻击

[edit | edit source]

(粘贴到 </web-app> 标签之前)

<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>

自定义错误页面

[edit | edit source]

(粘贴到 </web-app> 标签之前)(不会显示错误页面,因为 Tomcat 无法找到错误页面文件,但它确实通过隐藏版本号来完成任务。 如果这对您来说是个问题,请跳过此步骤。)

<error-page>
<error-code>404</error-code>
<location>/error.jsp</location>
</error-page>

<error-page>
<error-code>403</error-code>
<location>/error.jsp</location>
</error-page>

<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>

<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>

只读资源和无列表

[edit | edit source]

(粘贴到文件中的 DefaultServlet 部分)

<init-param>
<param-name>readonly</param-name>
<param-value>true</param-value>
</init-param>

<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>

server.xml

[edit | edit source]

删除服务器横幅

[edit | edit source]

如果您将参数 `Server=" "` 添加到连接器的参数列表中,这将隐藏 HTTP 标头中的版本号。 它应该看起来像这样

<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" Server =" " address="<webserver IP address or localhost>" clientAuth="false" sslProtocol="TLS" keystoreFile="${user.home}/.keystore" keystorePass="<your keystore pass>" />

更改关闭命令

[edit | edit source]

为了防止攻击者能够关闭您的服务器,您应该考虑更改关闭端口以及关闭命令。 您可以在 `server.xml` 文件开头的 `<Server>` 标签中完成此操作

<Server port="any unused port" shutdown="<long and secure string>">

AJP 连接器

[edit | edit source]

如果 OC 是唯一将在 Tomcat 中部署的 Web 应用程序,您可以安全地注释掉 AJP 连接器行,因为 OC 没有使用此连接器。

可能良好的做法,但对我来说造成了问题

[edit | edit source]

禁用自动部署

[edit | edit source]

为了防止有人在您的 Tomcat 实例中自动部署他们自己的恶意 Web 应用程序,您可以在 `server.xml` 文件中关闭自动部署,方法是在 `<Host>` 标签中将以下参数设置为 false。

autoDeploy="false" deployOnStartup="false" deployXML="false"

这样,如果您重新启动服务器,您必须手动部署 OC,您将不得不弄清楚如何操作。

安全容器

[edit | edit source]

使用 Tomcat,您可以选择在容器中启动实例,这样可以确保即使有人在最坏的情况下入侵服务器,他们也只能访问容器内的资源和文件。但是,这需要您花时间才能让 OC 正常工作,因为它已知会导致(并且对我来说确实会)安装中断。如果您有时间和知识让它正常工作,可能值得尝试。

否则,使用起来非常简单,在启动 Web 服务器时添加 -secure 标志。

/usr/local/tomcat/bin/startup.sh -secure

这就是关于 Tomcat 的所有内容。

PostgreSQL

[edit | edit source]

在安全方面,您无法对 PostgreSQL 进行太多配置,但可以进行一些访问控制。

更改 pgsql 文件夹的所有权

sudo chown -R postgres:postgres /usr/local/pgsql

更改权限

sudo chmod -R 700 /usr/local/pgsql

您还应该仔细配置位于 `/usr/local/pgsql/data/` 的 pg_hba.conf 文件。此文件控制对您数据库的不同访问权限。您需要为本地连接的 clinica 用户提供对 openclinica 数据库的访问权限,但阻止所有其他连接尝试。身份验证方法应设置为 `md5`,绝不使用 `password`,因为它会以明文形式发送密码。如果您将直接从远程机器访问数据库,则需要在此处为其添加相应的行。

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# allow user clinica to connect to openclinica locally, using encrypted password based authentication (needed to automate backups)
local   openclinica clinica                           md5
# IPv4 local connections:
host    openclinica clinica     127.0.0.1/32          md5
# "local" is for Unix domain socket connections only
local   all         all                               reject
# IPv6 local connections:
host    all         all         ::1/128               reject

此配置对于稍后将介绍的自动备份也很重要。

注意:如果您更改了此文件的内容,则需要重新启动 postgres 服务器才能使更改生效。

防火墙

[edit | edit source]

为任何 Web 服务器设置防火墙都是必须的。这使您可以限制和监控发生在服务器和外部世界之间的所有流量。这里的主要目标是只保留 Web 应用程序正常运行所需的端口。在这种情况下,这意味着

  • 端口 80/tcp,预期接收来自该端口的 http 流量;
  • 端口 443/tcp,预期接收来自该端口的 https 流量;
  • 端口 22/tcp,ssh 流量通过该端口进行。

您可能需要进行一些尝试才能确定关闭某个端口是否会破坏任何功能,但对我来说,只允许这 3 个端口打开就足够了。

FirewallD

[edit | edit source]

如果您已经习惯使用 FirewallD,则可以跳到下一节(**设置 FirewallD**)。

CentOS 预装了 FirewallD,它是一个强大的工具,用于管理这些连接。网上有很多资源可以帮助您了解更多信息,例如这个

(更新:本文中描述的一种现象已过时。无法处理其分配区域的数据包不会“上移”到下一个区域(“区域漂移”的概念)。这被认为是不安全的,将在未来的 FirewallD 版本中删除。如果您真的想使用这种行为,可以在 FirewallD 的配置文件中启用区域漂移。)

首先,确保 firewalld 已安装并在您的系统上启用。默认启用的区域是 `Public`,您可以将其保持为这种状态。您可以检查此区域中默认启用了哪些服务

sudo firewall-cmd --zone=public --list-all

服务不是一些特殊的实体,它们只是代表给定服务需要打开才能正常运行的端口。这些端口在 `/usr/lib/firewalld/services` 中定义为不言自明的 xml 文件。如果您想定义自己的服务,您可以将这些 xml 文件中的一个复制到 `/etc/firewalld/services` 中,并根据您的需要对其进行自定义。您可以通过以下命令将任何服务添加到防火墙区域:

sudo firewall-cmd --zone=public --add-service=<your service> --permanent

您可以通过以下命令删除任何不必要的服务:

sudo firewall-cmd --zone=public --remove-service=<unnecessary service> --permanent

您还可以直接添加/删除所需的端口

firewall-cmd --zone=public --add-port=<your_custom_portnumber>/tcp --permanent

如果没有 `permanent` 标志,更改将在 FirewallD 重新加载或重新启动后重置。您可以在没有标志的情况下尝试规则,一旦发现适合您的规则,就可以通过添加 `--permanent` 标志来最终确定这些规则。

设置 FirewallD

[edit | edit source]

以下配置假设您使用 ssh 访问远程服务器,但是,如果不是这种情况,您可以跳过设置内部区域。

将为防火墙设置三个区域:public、internal 和 trusted。public 应处理来自任何请求 IP 地址的所有 http/s 请求。internal 区域应添加一个源,其中包含您的 IP 或 MAC 地址,因此(理论上),只有当您的机器与服务器通信时,此区域才会处理数据传输。这也是启用了 ssh 服务的区域(=打开了端口 22)。

在开始配置 FirewallD 之前,您应该确保已禁用 iptables,并将其屏蔽,使其永远不会启动。否则,它可能会干扰 FirewallD,并导致一些奇怪的行为。

systemctl mask iptables

systemctl disable iptables

首先,从 public 和 internal 区域中删除任何不必要的服务。使用 `--list-all` 标志查看当前允许的内容。您应该只保留(或添加,如果需要)http/https。在 internal 区域中,还应添加 ssh 服务。

您应该将面向外部的网络接口分配到 public 区域(因此来自外部的所有请求都将由此区域处理)。您可以通过以下命令列出所有可用的接口:

ip link show

您可以使用 `--add-interface=<interface> ` 标志添加接口。

不幸的是,这些接口的命名并非易事(至少对我来说,我的接口名为 `ens192`),因此您可能需要进行一些研究才能了解情况。

您还应将自己的 IP/MAC 添加到 internal 区域的源,以便只有来自此 IP/MAC 地址的请求才能由此区域处理,例如:

sudo firewall-cmd --zone=internal --permanent --add-source=154.112.12.18

如果您想让 ssh 可用,例如从某个特定 VPN 使用 ssh,也可以使此 IP 更通用

sudo firewall-cmd --zone=internal --permanent --add-source=154.112.0.0/16

这将允许来自 154.112.0.0-154.112.255.255 的任何人使用 ssh。(注意,只有当至少有一个接口或源分配给区域时,区域才处于活动状态!)

public 区域的目标应设置为 DROP,这样在请求到达无效端口时,不会返回任何消息,而是直接丢弃请求,而不是发送拒绝消息。这被认为更加安全。

sudo firewall-cmd --permanent --zone=public --set-target=DROP

接下来,创建端口转发规则,以限制与 https 的通信,并适应 Tomcat 的端口约定(它使用 8080 代替 80,使用 8443 代替 443)。

sudo firewall-cmd --zone=public --permanent --add-forward-port=port=443:proto=tcp:toport=8443
sudo firewall-cmd --zone=public --permanent --add-forward-port=port=80:proto=tcp:toport=8443

sudo firewall-cmd --zone=internal --permanent --add-forward-port=port=443:proto=tcp:toport=8443
sudo firewall-cmd --zone=internal --permanent --add-forward-port=port=80:proto=tcp:toport=8443

要使端口转发正常工作,您还需要启用伪装(https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/security_guide/sec-port_forwarding)。

sudo firewall-cmd --zone=public --add-masquerade --permanent

sudo firewall-cmd --zone=internal --add-masquerade --permanent

现在,这一步我不太确定,因为我找不到太多关于它的信息。我将 lo(环回)接口分配给了 trusted 区域。这是从同一台机器(localhost,127.0.0.1)与您的 Web 服务器通信的接口。理想情况下,它无法从外部世界访问,因此我假设 trusted 区域适合它,但同样,我在这里可能错了。

如果您需要 ping 正常工作,请运行此命令(将区域替换为您需要 ping 正常工作的区域):

sudo firewall-cmd --permanent --zone=<YOUR_PINGING_ZONE> --add-rich-rule='rule protocol value="icmp" accept'

您必须重新加载 firewalld 才能使更改生效

sudo firewall-cmd --reload

现在,您已经配置了 FirewallD,它只允许与外部世界的 http/s 通信,但仍然允许来自您的个人机器/您的 VPN 网络的 ssh 连接。

您可以使用 nmap 包测试您的防火墙,以查看哪些端口是开放的。

OpenClinica

[edit | edit source]

您已经完成了大部分可以做的事情,以使 OC 变得安全,但是您仍然可以在 OC 本身中做一些事情。如果您以 root 身份登录 Web 界面,导航到 `Tasks/Administartion/Users/Configure Password Requirements`,将有一些选项可以打开/关闭和调整以满足您的需求。您还应该绝对启用在尝试 X 次后锁定用户帐户的选项(`Tasks/Administartion/Users/Lockout`)。作为 root,您可以在 Web 界面上解锁这些帐户,如果它们被锁定了。我自己采取的另一个措施,但不确定是否有必要:要求我的 OpenClinica 实例的用户将其密码挑战问题设置为一个长的(不可猜测的)字符串。我之所以这样做,是因为我不确定 OC 是如何发送密码重置电子邮件的,以及是否可以被潜在的攻击者劫持。一个更安全(尽管诚然更不方便,如果您有太多用户,甚至不切实际)的解决方案是,以 root 身份从 Web 界面重置其密码,并自己发送给他们。

备份

[edit | edit source]

这也绝对是必须的。我在这里分享的解决方案只是其中一种方法,如果您有更好的方法,请不要犹豫,以您自己的方式进行。

这里有一个指南是关于如何在 OC 中实施备份的指南。基本上,您需要定期保存您的 OC 配置文件、您的研究目录($TOMCAT_ROOT/openclinica.data)和您的 PostgreSQL 数据库。

我已附上一个脚本,如果执行该脚本,它将备份所有这些,将它们打包成一个 tarball 文件并保存到 `/usr/local/OpenClinica_backups`。您可以(并且应该)通过编辑脚本中的 BCKP_path 变量来更改备份位置,使其位于服务器外部。此外,您还必须创建一个 .pgpass 文件才能使其正常工作,更多详细信息见下文。

我对于上述链接指南的补充是让这些备份自动执行,例如每天执行一次。为此,我使用了 `cron` 服务,该服务预装在 CentOS 8 上。

要使您的脚本每天执行,请将其放置在 `/etc/cron.daily/` 下。通常,要获取 pg_dump,您需要 openclinica 数据库的密码。要允许自动更新,您需要在 `/var/lib/pgsql/` 下创建 .pgpass 文件。其内容应如下所示:

localhost:5432:openclinica:clinica:<YOUR_DATABASE_PASSWORD>

为了让 Postgres 能够使用此文件,它必须由 postgres 拥有

sudo chown postgres:postgres .pgpass

并且该文件的权限必须设置为 0600

sudo chmod 0600 .pgpass

如果您遇到身份验证问题,请查看 pgpass 的文档[5]

要创建 pg_dump,postgres 需要能够写入您的备份文件夹。将文件夹的组更改为 postgres 并授予组 rwx 权限

sudo chown root:postgres <YOUR_BACKUP_FOLDER>

sudo chmod g+rwx <YOUR_BACKUP_FOLDER>

从备份恢复 postgres 数据库

[edit | edit source]

由 pg_dump 创建的备份实际上是一个很长的 SQL 命令列表,当执行这些命令时,会重新创建备份的数据库。您可以创建一个新的(空的)数据库来恢复您的备份,或者删除 openclinica 数据库并将其重新创建为空的数据库。注意:如果您选择创建一个新数据库,您可能会遇到权限问题,因为 pg_hba.conf(在 /usr/local/pgsql/data/ 中)文件设置的方式(见上文)。为了能够访问新创建的数据库,您需要添加一行,该行允许特定用户访问特定数据库,例如:

local newly_created_database clinica md5

要创建新的空数据库,您需要通过以下方式连接到 Postgres 数据库:

sudo -u postgres /usr/local/pgsql/bin/psql -U clinica openclinica

创建一个新的空数据库,您将恢复您的备份到该数据库

CREATE DATABASE name_of_your_database_you_want_backup_be_restored_to;

然后,您需要通过以下方式执行存储在备份转储文件中的 SQL 命令:

sudo -u postgres /usr/local/pgsql/bin/psql -U clinica -d name_of_your_database_you_want_backup_be_restored_to < path_to_uncompressed_pg_dump


最后一点

[edit | edit source]

为了使工作更清晰,最好禁用 tomcat、clinica 和 postgres 用户的登录

usermode -L tomcat
usermode -L clinica
usermode -L postgres

就这样

[edit | edit source]

干得好,您刚刚使您的 OpenClinica 安装更加安全!不幸的是,您必须记住,我们一直在加固的软件是过时的软件(非常过时),因此您只能做这么多,并希望一切顺利。我能给出的最佳建议是,如果可能,请不要包含允许识别您受试者的受试者信息。这样,即使一切都失败了,至少您的受试者也不必担心个人身份被盗。

自动备份脚本

[edit | edit source]
#!

BCKP_path='/usr/local/OpenClinica_backups'
DATE=`date +"%Y-%m-%d"`

cd $BCKP_path
# create a database dump with pg_dump
sudo -u postgres /usr/local/pgsql/bin/pg_dump -U clinica openclinica -w > pg_dump
# backup the data directory of OC with CRF, XML, etc.. data
sudo tar -cf oc_data.tar /usr/local/tomcat/openclinica.data
# backup OC configuration
sudo cp /usr/local/tomcat/openclinica.config/datainfo.properties datainfo.properties

# tar all the above created files and assign a date
sudo tar -czf ${DATE}_openclinica_backup.tar.gz datainfo.properties  oc_data.tar  pg_dump

# remove created temporary files
sudo rm datainfo.properties
sudo rm oc_data.tar
sudo rm pg_dump

# add a bit of security
sudo chmod 400 *.tar.gz

参考文献

[edit | edit source]
华夏公益教科书