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 伺服器,因此這絕對應該是你的第一道防線。
此檔案位於 `/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 = <your@email.com>
sender = <your@email.com>
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.apache.org/tomcat-7.0-doc/ssl-howto.html)。 您必須確保本指南中列出的所有步驟都是使用 `tomcat` 使用者完成的,因為如果以其他方式完成,`.keystore` 檔案將在該其他使用者的 home 目錄下建立,而 tomcat 無法找到並讀取它。 理論上,您也可以註釋掉 HTTP 聯結器,因為強制使用 HTTPS 對於 OC 來說是最佳實踐。 埠轉發將在防火牆級別啟用,因此理論上 Tomcat 永遠不會收到對埠 8080 的請求,但我還沒有實際測試過。
配置好後,您應該能夠使用 HTTPS 與您的 Web 伺服器通訊(在 https://: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