CentOS7 FTP及Rsync服務搭建

CentOS7 FTP及Rsync服務搭建

文章來源: 陶老師運維筆記- 微信公衆號html

FTP_RSYNC.jpg

生活及工做中,會攢下一些有用的軟件及文檔。而且隨時間會愈來愈多,這時可能會但願有一個自已的FTP-Server或Rsync-Server作爲文件倉庫。 本文介紹下過程。linux

1. FTP服務搭建

ftp 命令使用文件傳輸協議(File Transfer Protocol, FTP)在本地主機和遠程主機之間或者在兩個遠程主機之間進行文件傳輸。git

1.1 安裝vsftp軟件

#安裝
yum install -y vsftpd

#設置開機啓動
systemctl enable vsftpd.service
#啓動
systemctl start vsftpd.service
#中止
systemctl stop vsftpd.service
#查看狀態
systemctl status vsftpd.service
複製代碼

1.2 配置vsftpd

  • 備份vsftpd的默認配置文件。
$cd /etc/vsftpd/ 
$cp vsftpd.conf vsftpd.conf.bak
複製代碼
  • 修改配置vsftpd.conf
#打開配置文件
vim /etc/vsftpd/vsftpd.conf

#顯示行號
:set number

#修改配置 12 行
anonymous_enable=NO

#修改配置 33 行
anon_mkdir_write_enable=YES

#修改配置48行
chown_uploads=YES

#修改配置72行
async_abor_enable=YES

#修改配置82行
ascii_upload_enable=YES

#修改配置83行
ascii_download_enable=YES

#修改配置86行
ftpd_banner=Welcome to blah FTP service.

#修改配置100行
chroot_local_user=YES

#添加下列內容到vsftpd.conf末尾
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
複製代碼

最終配置:shell

cat /etc/vsftpd/vsftpd.conf |grep -v '#' |grep -v '^$'
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_std_format=YES
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to blah FTP service.
chroot_local_user=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
use_localtime=YES
listen_port=21
idle_session_timeout=300
guest_enable=YES
guest_username=vsftpd
user_config_dir=/etc/vsftpd/vconf
data_connection_timeout=1
virtual_use_local_privs=YES
pasv_min_port=40000
pasv_max_port=40010
accept_timeout=5
connect_timeout=1
allow_writeable_chroot=YES
複製代碼

1.3 創建系統用戶vsftpd

#用戶登陸終端設爲/bin/false(即:使之不能登陸系統)
useradd vsftpd -d /data1/vsftpd -s /bin/false
chown -R vsftpd:vsftpd /vsftpd/vsftpd
複製代碼

1.4 創建ftp用戶

創建用戶文件 vim /etc/vsftpd/virtusers 第一行爲用戶名,第二行爲密碼。不能使用root做爲用戶名數據庫

cat /etc/vsftpd/virtusers
guest
guestguest
ftpadmin
ftp123456
複製代碼

1.5 生成用戶數據文件

db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
#設定PAM驗證文件,並指定對虛擬用戶數據庫文件進行讀取
chmod 600 /etc/vsftpd/virtusers.db 
複製代碼

1.6 修改 /etc/pam.d/vsftpd 文件

#修改前先備份 
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vim /etc/pam.d/vsftpd
#先將配置文件中原有的 auth 及 account,session的全部配置行均註釋掉
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers 
#session optional pam_keyinit.so force revoke
#auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
#auth required pam_shells.so
#auth include password-auth
#account include password-auth
#session required pam_loginuid.so
#session include password-auth
複製代碼

1.7 創建虛擬我的目錄

分別創建guest及ftpadmin用戶。vim

mkdir /etc/vsftpd/vconf
cd /etc/vsftpd/vconf
複製代碼

ftpadmin用戶:segmentfault

#創建虛擬用戶ftpadmin配置文件
cat /etc/vsftpd/vconf/ftpadmin
local_root=/data1/vsftpd
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

#創建目錄
mkdir /data1/vsftpd/
複製代碼

guest用戶:瀏覽器

#創建虛擬用戶guest配置文件
touch guest
#編輯guest用戶配置文件,內容以下
/etc/vsftpd/vconf/guest
local_root=/data1/vsftpd/pub
anon_world_readable_only=NO
#創建目錄
mkdir /data1/vsftpd/pub
複製代碼

1.8 修改目錄屬性及重啓FTP

配置完成後結構以下:安全

tree /etc/vsftpd/
/etc/vsftpd/
├── ftpusers
├── user_list
├── vconf
│   ├── ftpadmin
│   ├── ftpuser
│   └── guest
├── virtusers
├── virtusers.db
├── vsftpd.conf
├── vsftpd.conf.bak
└── vsftpd_conf_migrate.sh
複製代碼

修改目錄屬性:bash

chmod -R 775 /data1/vsftpd/
複製代碼

重啓ftp:

#重啓
systemctl restart vsftpd.service
systemctl status vsftpd.service
複製代碼

1.9 防火牆

配置前能夠關閉setenforce及設置防火牆。

chkconfig iptables off 
setenforce 0
#IPtables 的設置方式:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 40000:40010 -j ACCEPT
複製代碼

1.10 FTP命令

FTP 登陸:

$man ftp
#登陸 
ftp ftp.tao-ops.com   #輸入帳號/密碼
複製代碼

FTP經常使用命令:

#ftp命令 描述
ls  列出遠程機的當前目錄
cd  在遠程機上改變工做目錄
lcd 在本地機上改變工做目錄
ascii   設置文件傳輸方式爲 ASCII 模式
binary  設置文件傳輸方式爲二進制模式
close   終止當前的 ftp 會話
get (mget)  從遠程機傳送指定文件到本地機
put (mput)  從本地機傳送指定文件到遠程機
open    鏈接遠程 ftp 站點
quit    斷開與遠程機的鏈接並退出 ftp
?   顯示本地幫助信息
!   轉到 Shell 中
prompt 1    關閉交互模式
複製代碼

1.11 文件下載:

文件下載除了用ftp get命令外,還能夠用ftp客戶程序,wget或瀏覽器等完成。

  • wget下載:
wget -P /tmp  ftp://ftp.tao-ops.com:21/README.md  --ftp-user=xx --ftp-password=xxxx 
複製代碼
  • mac 下載: 直接在瀏覽器上輸入ftp地址,鏈接ftp服務進行下載。
    ftp.png

2. Rsync服務搭建

rsync 是一款高效的遠程數據備份和鏡象工具,可快速地同步多臺主機間的文件。官網: rsync.samba.org/ Rsync具備以下特性:

  • 支持連接、全部者、組信息以及權限信息的拷貝;
  • 經過遠程 shell(ssh, rsh)進行傳輸;
  • 無須特殊權限便可安裝使用;
  • 流水線式文件傳輸模式,文件傳輸效率高;
  • 支持匿名操做;

2.1 rsync 安裝

#檢查是否安裝
$whereis rsync
$rpm -qa|grep rsync -i
#yum安裝rsync
$yum install rsync
複製代碼

查看版本:

#查看版本:
rsync --version
複製代碼

2.2 配置文件

配置文件有/rsyncd.conf,rsyncd.secrets 等。

vim /etc/rsyncd.conf          #主配置文件
touch /etc/rsyncd.secrets       #用戶名密碼文件,一組用戶一行,用戶名和密碼使用 : 分割
touch /etc/rsyncd/rsyncd.motd          #非必須,鏈接上rsyncd顯示的歡迎信息,此文件可不建立
複製代碼

yum安裝後會有主配置文件 /etc/rsyncd.conf。可使用 man rsyncd.conf 查看說明。

$man rsyncd.conf
rsyncd.conf(5) 
                                             rsyncd.conf(5)
NAME
       rsyncd.conf - configuration file for rsync in daemon mode
複製代碼

配置說明

man rsyncd.conf
$cat /etc/rsyncd.conf 
uid = rsync #訪問/backup的用戶
gid = rsync #訪問/backup的用戶組
use chroot = no #和安全相關的設置,不用。
max connections = 200 #併發鏈接數
timeout = 300 #超時時間
pid file = /var/run/rsyncd.pid #進程號所在的文件
lock file = /var/run/rsync.lock #鎖文件
log file = /var/log/rsyncd.log #日誌文件 服務運行不正常 第一時間看日誌。
ignore errors #忽略錯誤
read only = false #可讀寫
list = false #不能ls(列表)
hosts allow =172.16.1.0/24 #內網網段。
hosts deny = 0.0.0.0/32 #什麼網段不讓連。
auth users = rsync_backup #認證虛擬用戶(客戶端鏈接使用的用戶)。
secrets file = /etc/rsync.password ##認證虛擬用戶密碼文件。
[backup] #模塊標籤
comment = ""#註釋
path = /data1/backup #備份的路徑
複製代碼

配置示例:

uid = nobody
gid = nobody
pid file = /var/run/rsync.pid
port = 873
use chroot=yes
list = no
max connections = 20
log file=/var/log/rsyncd.log
#模塊配置(可多個)
[dbatemp]
uid=root
gid=root
path = /data1/dbatemp
auth users = dba
secrets file = /etc/rsyncd.secrets
read only=no

[software]
uid = root
git = root
auth users = ops
path = /data1/vsftpd/software
secrets file = /etc/rsyncd.secrets
read only = no
複製代碼

2.3 密碼文件及權限

爲了安全該把主配置文件中的list設置爲No,並配置密碼文件並受權。 密碼文件: 建立密碼文件syncd.secrets 以下。

$vim /etc/rsyncd.secrets       #用戶名密碼文件,一組用戶一行,用戶名和密碼使用 : 分割
$cat /etc/rsyncd.secrets
ops:opspwd123
dba:dbapwd123
複製代碼

設置文件權限: 說明:rsyncd服務的密碼文件權限必須是600。

chmod 600 /etc/rsyncd.secrets
複製代碼

2.4 啓動/中止

####啓動: rsync 運行能夠用rsync --daemon或xinetd方式。 1) daemon命令運行: rsync --daemon #默認配置文件是/etc/rsyncd.conf

#默認配置文件是/etc/rsyncd.conf,可能須要顯式的指定配置文件
/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

$netstat -lanpt |grep 873
tcp        0      0 0.0.0.0:873             0.0.0.0:*               LISTEN      3746/rsync          
tcp6       0      0 :::873                  :::*                    LISTEN      3746/rsync
複製代碼

爲保證開機時自動啓動,須要手動加上面的命令(/usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf)加入 /etc/rc.local 文件中。 2)xinetd方式運行 xinetd的rsync配置文件是/etc/xinetd.d/rsync,注意修改server_args行。

#yum intall xinetd
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args     = --daemon --config=/etc/rsyncd/rsyncd.conf
log_on_failure += USERID
}
複製代碼

設置自啓動:

chkconfig rsync on
service xinetd restart
複製代碼

####中止:

ps aux|grep rsync
kill pid
複製代碼

2.5 客戶端

rsync客戶端配置: 配置rsync客戶端密碼文件並受權,權限要爲600。

#格式:用戶:密碼
vim /etc/rsyncd.secrets.passfile 
opspwd123

$chmod 600  /etc/rsyncd.secrets.passfile 
複製代碼

可使用rsync --password-file=xxx或直接export RSYNC_PASSWORD=pwdxxx;

#--password-file=FILE 從FILE中獲得密碼。
$rsync --password-file=/etc/rsyncd.secrets.passfile  ops@192.168.0.3::software 
#export RSYNC_PASSWORD=
$export RSYNC_PASSWORD=opspwd123  ; rsync  ops@192.168.0.3::software  
複製代碼

2.6 防火牆

若是服務器開啓了防火牆,必須保證端口能穿過防火牆。

iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
複製代碼

2.7 經常使用命令

rsync語法:

rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@][host]:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]

$rsync -avzP data1user@192.168.1.2::data1 ~/data1
保持傳輸原有文件權限,用戶,用戶組,時間,遞歸的把data1模塊數據複製到用戶家目錄的data1目錄裏.
參數 a的意思就是 保留文件原有權限,用戶,用戶組,時間且遞歸的copy包括連接文件,塊設備在內的全部文件,這個參數很經常使用
參數 v是顯示傳輸信息
參數 P顯示傳輸進度
參數 z是壓縮傳輸內容進行傳輸
複製代碼

經常使用命令:

$export RSYNC_PASSWORD=opspwd123 ;
#限速
$rsync macdown071.zip ops@rsync.tao-ops.com::software/   --bwlimit=50000 -arv 
$rsync  --password-file=/etc/rsyncd.secrets.passfile ops@ip::software . --bwlimit=50000 -arv

#備份
$rsync -avzP data1user@192.168.1.2::data1 ~/data1
保持傳輸原有文件權限,用戶,用戶組,時間,遞歸的把data1模塊數據複製到用戶家的data1目錄裏。

#刪除--delete
rsync -avzP --delete data1user@192.168.1.2::data1 ~/data1
#保持data1模塊和用戶家目錄模塊內容徹底一致,加上參數 --delete,這樣會刪除在~/data1目錄裏可是不在data1
複製代碼

參考:

相關文章
相關標籤/搜索