雖然這個沒什麼,其他文件都寫爛了,不過別人都是 selinux = 0 的狀態,這篇是以 selinux=1 的狀態來寫的
[Server]
SERVER 背景資料 CentOS release 5.5 (Final)
# sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 21
Policy from config file: targeted
# uname -a
Linux rsync3 2.6.18-194.el5 #1 SMP Fri Apr 2 14:58:14 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
1. 安裝
rsync 預設是住在 xinetd 中,讓他啟動
# vi /etc/xinetd.d/rsync
找到 disable = yes 修改為 disable = no,然後重新啟動 xinetd
# service xinetd restart
正在停止 xinetd: [ 確定 ]
正在啟動 xinetd: [ 確定 ]
如果無法啟動,請先檢查你是否有安裝xinetd 這個套件(預設不一定有裝)
# yum install xinetd
查看狀態,rsync為 tcp 873
tcp 0 0 *:rsync *:* LISTEN
2. 建立密碼檔
# vi /etc/rsyncd.secrets 存檔後修改權限為 600
內容為 rsync使用者:密碼,可以多伺服器共用一組帳密,也可以各伺服器使用不用帳密
dbuser:123456789
ftpuser:123456
wwwuser:1234
3. 建立備份位置的設定檔 /etc/rsyncd.conf,內容設定範例:
[ldap] <== [模組名]
path = /backup/ldap <== 存放位置,此例存放在 ldap 下,請先建立 /backup/ldap 這個目錄
auth users = ldapuser <== 授權的使用者,由 /etc/rsyncd.secrets 中所定義
uid = root <== 執行的角色
gid = root <== 執行的群組
secrets file = /etc/rsyncd.secrets <== 定義密碼檔位置
read only = no <== 可寫入
4. 修改 SeLinux 權限
讓無權限的使用者可以寫入
# setsebool -P allow_rsync_anon_write=1
設定目錄寫入權限
# chcon -t public_content_rw_t /backup/ldap
這樣就ok了
[Clinet]
列出簡單的範例,其他的參數可以參考這篇或其他相關文件
設定方式很簡單,只有2步驟
1. 建立密碼檔
# vi /root/rsync.secret
裡面只要一行密碼即可:
1234
然後存檔離開
修改權限
# chmod 600 /root/rsync.secret
2. 設定要備份的指令:
[Linux]
# /usr/bin/rsync -aHSv --password-file=/root/rsync.secret /root/mysql_backup wwwuser@163.17.x.x::www
其中
/root/mysql_backup: 為要備份的本機資料夾,備份到 163.17.x.x 後會建立一個同名的 mysql_backup/ 資料夾,因此可以多台伺服器共用一組帳密
wwwuser: 備份的帳號
www: 備份的模組名:也就是/etc/rsyncd.conf上的模組設定
[FreeBSD]
freebsd 上有2點要注意的,1 rsync 的位置不同 2 備份內容的寫法,如果要備份整個目錄的話,最後面的斜線不要加
# /usr/local/bin/rsync -aHS --password-file=/root/rsync.secret /var/named/chroot/var/named dns1user@163.17.x.x::dns1
[除錯]
1. client 執行後無反應,停留很久
A.. 可能是伺服端的防火牆問題,請檢查 TCP873埠
2. password file must not be other-accessible
continuing without password file
Password:
@ERROR: auth failed on module diamond
A.. 請將密碼檔修改為 600 即可解決
3. @ERROR: chroot failed
A.. 可能是未建立目的目錄,請在伺服器上建立目的目錄
如果確定目錄有建也正確,你就得看看他的上層或上上層目錄是否有同樣的 selinux 權限,例如,你儲存在 /backup/path/to/module,則 backup/ path/ to/ module/ 這些目錄都要 chcon
4. building file list ... done
rsync: recv_generator: mkdir "/html" (in diamond) failed: Permission denied (13)
A.. 可能為selinux 權限錯誤,此例解決方法請參考 [Server] 第4點。
[參考資料]
1. man rsync
2. man rsync_selinux
留言列表