1.linux
FTP的安裝nginx
檢查vim
rpm -q vsftpd vsftpd -v
安裝bash
yum -y install vsftpd ft
查看安裝位置服務器
[root@ftp ~]# whereis vsftpd vsftpd: /usr/sbin/vsftpd /etc/vsftpd /usr/share/man/man8/vsftpd.8.gz [root@ftp ~]# vsftpd -v vsftpd: version 3.0.
關閉防火牆session
systemctl disable firewalld.service systemctl stop firewalld.service #若是不關閉防火牆則添加FTP服務: firewall-cmd --permanent --zone=public --add-service=ftp firewall-cmd --reload
關閉selinuxide
setenforce 0 sed -i 's#SELINUX=enforcing#SELINUX=disabled#' /etc/selinux/config #若是不關閉selinux則設置FTP服務: getsebool -a | grep ftp setsebool -P ftpd_full_access on
啓動vsftp服務網站
[root@ftp ~]# systemctl start vsftpd [root@ftp ~]# systemctl enable vsftpd
匿名用戶登陸ui
#安裝完默認開啓匿名登陸,對應的是 /var/ftp ,默認用戶名是ftp,密碼爲空。 [root@ftp ~]# ftp localhost Trying ::1... Connected to localhost (::1). 220 (vsFTPd 3.0.2) Name (localhost:root): ftp 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. #退出 ftp> bye 421 Timeout.
配置文件解析rest
1# 不容許匿名訪問,禁用匿名登陸 2anonymous_enable=NO 3 4# 啓用限定用戶在其主目錄下 5chroot_local_user=YES 6 7# 使用本地時(自行添加) 8use_localtime=YES 9 10# 容許使用本地賬戶進行FTP用戶登陸驗證 11local_enable=YES 12 13# 若是啓用了限定用戶在其主目錄下須要添加這個配置,解決報錯 500 OOPS: vsftpd: refusing to run with writable root inside chroot() 14allow_writeable_chroot=YES 15 16# 啓用上傳和下載的日誌功能,默認開啓 17xferlog_enable=YES 18 19# 設置本地用戶默認文件掩碼022 20local_umask=022
配置多用戶
cat >>/etc/vsftpd/vsftpd.conf <<EOF # 使用本地時(自行添加) use_localtime=YES #監聽端口 listen_port=21 # 啓用限定用戶在其主目錄下 chroot_local_user=YES # 數據鏈接超時時間 idle_session_timeout=300 # 設定啓用虛擬用戶功能 guest_enable=YES # 指定虛擬用戶的宿主用戶 ftpuser guest_username=ftpuser # guest_username=www # 若是ftp目錄是指向網站根目錄,能夠指定虛擬用戶的宿主用戶爲nginx運行帳戶www,能夠避免不少權限設置問題 。 # 虛擬用戶配置文件目錄 user_config_dir=/etc/vsftpd/vuser_conf # 虛擬用戶配置文件目錄 user_config_dir=/etc/vsftpd/vuser_conf # 爲NO時,虛擬用戶和匿名用戶有相同的權限,默認是NO virtual_use_local_privs=NO #數據鏈接超時時間 data_connection_timeout=1 # 被動模式最小端口號10060 pasv_min_port=10060 # 被動模式最大端口號10090 pasv_max_port=10090 #訪問超時時間 accept_timeout=5 #鏈接超時時間 connect_timeout=1 EOF
建立宿主用戶
#新建系統用戶ftpuser,用戶目錄爲/home/vsftpd, 用戶登陸終端設爲/bin/false(即便之不能登陸系統) # 方法一 建立用戶 ftpuser並指定用戶目錄爲 /home/vsftpd/ mkdir -p /home/vsftpd/ useradd -g root -M -d /home/vsftpd -s /sbin/nologin ftpuser #設置用戶 ftpuser 的密碼 passwd ftpuser #把 /home/vsftpd 的全部權給ftpuser.root chown -R ftpuser.root /home/vsftpd # 方法二 useradd ftpuser -d /home/vsftpd -s /bin/false chown ftpuser:ftpuser /home/vsftpd -R # 若是虛擬用戶的宿主用戶爲www,須要這樣設置 chown www:www /home/www -R
創建虛擬用戶文件
#第一行帳號,第二行密碼,注意:不能使用root作用戶名,系統保留) vim /etc/vsftpd/vuser_passwd test 123456 #保存退出
生成虛擬用戶數據文件
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db chmod -R 777 /etc/vsftpd/vuser_passwd.db
建立用戶配置
# 創建虛擬用戶我的vsftp的配置文件 mkdir /etc/vsftpd/vuser_conf # 進入目錄 cd /etc/vsftpd/vuser_conf # 建立虛擬用戶配置文件 vim test local_root=/home/vsftpd/test # 用戶 hss 配置目錄 write_enable=YES # 容許本地用戶對FTP服務器文件具備寫權限 anon_world_readable_only=NO anon_upload_enable=YES # 容許匿名用戶上傳文件(默認YES) anon_mkdir_write_enable=YES # 容許匿名用戶建立目錄 anon_other_write_enable=YES # 容許匿名用戶刪除和重命名權限 #保存退出
建立用戶目錄
mkdir -p /home/vsftpd/test/upload chmod -R 777 /home/vsftpd/test/upload # 在/var/ftp下新建一個目錄來實現匿名用戶上傳 mkdir /var/ftp/upload
重啓vsftpd服務器
systemctl restart vsftpd.servic
vsftpd中幾種用戶的區分
本地用戶:
用戶在FTP服務器擁有帳號,且該帳號爲本地用戶的帳號,能夠經過本身的帳號和口令進行受權登陸,登陸目錄爲本身的home目錄。
虛擬用戶:
用戶在FTP服務器上擁有帳號,但該帳號只能用於文件傳輸服務,登陸目錄爲某一特定的目錄,一般能夠上傳和下載 。
匿名用戶:
用戶在FTP服務器上沒有帳號,登陸目錄爲/var/ftp。
FTP狀態碼
230 # 登陸成功 200 # 命令執行成功 150 # 文件狀態正常,開啓數據鏈接端口 250 # 目錄切換操做完成 226 # 關閉數據鏈接端口,請求的文件操做成功
FTP命令
# 設定以ASCII方式傳送文件(缺省值) ftp> ascii # 每完成一次文件傳送,報警提示. ftp> bell # 設定以二進制方式傳送文件. ftp> binary # 終止主機FTP進程,並退出FTP管理方式. ftp>bye # 當爲ON時,用MGET命令拷貝的文件名到本地機器中,所有轉換爲小寫字母. ftp>case # 同UNIX的CD命令. ftp>cd # 返回上一級目錄. ftp> cdup # 改變遠端主機的文件權限. ftp> chmod # 終止遠端的FTP進程,返回到FTP命令狀態, 全部的宏定義都被刪除. ftp> close # 刪除遠端主機中的文件. ftp> delete # 列出當前遠端主機目錄中的文件.若是有本地文件,就將結果寫至本地文件. ftp> dir [remote-directory] [local-file] # 從遠端主機中傳送至本地主機中. ftp> get [remote-file] [local-file] # 輸出命令的解釋. ftp> help [command] # 改變當前本地主機的工做目錄,若是缺省,就轉到當前用戶的HOME目錄. ftp> lcd # 同DIR. ftp> ls [remote-directory] [local-file] # 定義宏命令. ftp> macdef # 刪除一批文件. ftp> mdelete [remote-files] # 從遠端主機接收一批文件至本地主機. ftp> mget [remote-files] # 在遠端主機中創建目錄. ftp> mkdir directory-name # 將本地主機中一批文件傳送至遠端主機. ftp> mput local-files # 從新創建一個新的鏈接. ftp> open host [port] # 交互提示模式. ftp> prompt # 將本地一個文件傳送至遠端主機中. ftp> put local-file [remote-file] # 列出當前遠端主機目錄. ftp>pwd # 同BYE. ftp> quit # 同GET. ftp> recv remote-file [local-file] # 改變遠端主機中的文件名. ftp> rename [from] [to] # 刪除遠端主機中的目錄. ftp> rmdir directory-name # 同PUT. ftp> send local-file [remote-file] # 顯示當前FTP的狀態. ftp> status # 顯示遠端主機系統類型. ftp> system # 從新以別的用戶名登陸遠端主機. ftp> user user-name [password] [account] # 同HELP. [command]指定須要幫助的命令名稱。若是沒有指定 command,ftp 將顯示所有命令的列表。 ftp> ? [command] # 從 ftp 子系統退出到外殼。 ftp> ! #關閉FTP鏈接 ftp>bye ftp>exit ftp> quit
2
FTP上傳腳本
#!/bin/bash #FileName:ftp_upload.sh #Function:從本地客戶端向ftp服務器上傳一個文件 # $#表示傳遞給此Shell腳本的參數個數。 # -ne表示不等於。 if [ $# -ne 2 ] then echo "Usage $0 <local_dir/filename> <remote_dir>" #若是傳遞的參數個數不等於2個,即提示傳參報錯信息。 exit 1 fi # ftp的服務器ip地址。 IP=127.0.0.1 # FULLNAME獲取本地文件全路徑名。 FULLNAME=$1 # DESTDIR獲取須要上傳的ftp遠程目錄路徑。 DESTDIR=$2 # basename返回一個路徑中的文件名部分。 # 如FULLNAME="/home/Sunrier/Proj/log/test.log"; # 當local_filename=`basename $FULLNAME` # 最終local_filename="test.log" local_filename=`basename $FULLNAME` # DESTFILE表示ftp服務器的路徑,以及保存後的文件名。 DESTFILE=$DESTDIR/$local_filename # 自動上傳文件到ftp服務器,免交互方式 ftp -i -n <<FTPIT open $IP user Sunrier redhat bin passive cd /home/remote/log/ftpfile put $FULLNAME $DESTFILE quit FTPIT exit 0
3
FTP下載腳本
#!/bin/bash #FileName:ftp_download.sh #Function:從ftp服務器下載一個文件到本地客戶端 # $#表示傳遞給此Shell腳本的參數個數。 # -ne表示不等於。 if [ $# -ne 2 ] then echo "Usage $0 <remote_dir/filename> <local_dir>" exit 1 fi # IP表示ftp的服務器ip地址。 IP=127.0.0.1 # FULLNAME獲取從ftp服務器上下載的文件全路徑名。 FULLNAME=$1 # DESTDIR獲取從ftp服務器上下載的文件所存放的本地計算機的目錄路徑。 DESTDIR=$2 # remote_filename獲取從ftp服務器上下載的文件名。 remote_filename=`basename $FULLNAME` # DESTFILE表示下載文件所存放的本地路徑,以及本地保存後的文件名。 DESTFILE=$DESTDIR/$remote_filename # 自動下載文件到本地,免交互方式。 ftp -i -n <<FTPIT open $IP user Sunrier redhat bin cd /home/remote/log/ftpfile get $FULLNAME $DESTFILE quit FTPIT exit 0