#!/bin/bash
setenforce 0 # 臨時關閉selinux
getenforce # 檢視selinux狀态
sed -i "s/SELINUX\=.*/SELINUX=disabled/g" /etc/selinux/config
# 永久關閉selinux,重新開機系統生效
repo="centos-yum.sh"
if [ ! -e $repo ]; then # -e 判斷檔案存在;參考:Shell if 條件判斷檔案或目錄
yum install -y wget
wget www.eisc.cn/file/shell/centos-yum.sh ; sh centos-yum.sh
else
echo "yum已經切換"
fi
vsftpdinstall(){
vsftpdc=(`find /etc/vsftpd -name "vsftpd.conf" | sed "s/ //g"`) # shell 小括号屬性是 定義數組變量 lsnginx 它的值是一條指令的執行結 果
echo "
vsftpd 配置檔案總個數為:${#vsftpdc[*]}
列出 nginx 配置檔案" ${vsftpdc[*]} # [*] 星号列出所有元素, 星号改成1 為指定角标1,含義為第二個元素,預設從0開始
if [ ${#vsftpdc[*]} -lt 1 ] # -lt 小于; $ 為空,! 非運算; $? 判斷上一條指令執行狀态,0正常; 參考:linux shell $$,$! 等的特殊用法
then
配置檔案為空,#開始安裝vsftpd
安裝vsftp需要的密碼驗證子產品等環境"
#yum -y install pam pam-devel db4 de4-devel db4-tcl vsftpd
yum -y install vsftpd
mkdir -p /var/ftp/virtual # -p 自動建立父目錄檔案夾: [?v?? t??(?) l] 虛拟
useradd vsftpd -M -s /sbin/nologin # 建立 vsftpd 使用者: ,如果此目錄不存在,則同時使用-m選項,可以建立主目錄。
# -s Shell檔案 指定使用者的登入Shell。
useradd ftpvload -d /var/ftp/ -s /sbin/nologin
# -d 目錄 指定使用者主目錄
sleep 3 # 等待 3 秒
chown -R ftpvload.ftpvload /var/ftp/ # -R 目錄擁有者ftpvload:ftpvload 其中 . 可以換成 :
sleep 5
echo "#-------------------------- 開始配置vsftpd --------------------------#"
mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.back
# mv 重命名
# 注意配置檔案每行末尾不能有空格或注釋
pasv_promiscuous=YES
#[prəˈmɪskjʊəs] 混雜 ,否則導緻被動模式無法ls檢視檔案
anonymous_enable=NO
# [?? n? n? m? s] 匿名:匿名登入
local_enable=YES
# [?l?? k(?)l] 本地 [?? ne? b(?)l] 允許
write_enable=YES
# [r?? t] 寫,權限
local_umask=022
#umask = 022 時,建立的目錄 權限是755,檔案的權限是 644
#umask = 077 時,建立的目錄 權限是700,檔案的權限時 600
#vsftpd的local_umask和anon_umask借鑒了它
anon_upload_enable=NO
# anonymous 的簡寫:匿名,上傳檔案
anon_mkdir_write_enable=NO
dirmessage_enable=YES
# 允許為目錄配置顯示資訊,顯示每個目錄下面的message_file檔案的内容。
xferlog_enable=YES
# 啟用記錄上傳/下載下傳活動日志功能。
connect_from_port_20=YES
# [k?? n? k t] 連接配接 啟用FTP資料端口的連接配接請求
chown_uploads=NO
# 是否具有上傳權限.使用者由chown_username參數指定。
xferlog_file=/var/log/vsftpd.log
# 日志目錄
xferlog_std_format=YES
# 使用标準的ftpdxferlog日志格式
async_abor_enable=no
# 強烈建議不要啟用該選項,否則将可能導緻出錯!
ascii_upload_enable=YES
ascii_download_enable=YES
# ascii 編碼的上傳下載下傳啟動
ftpd_banner=Welcome to FTP Server
# [?ba n?] 智語
chroot_local_user=YES
# 虛拟清單使用者是不受限制目錄
ls_recurse_enable=NO
listen=YES
# [?l? s(?)n] 聽,監聽端口
hide_ids=YES
# [h??d] 隐藏
pam_service_name=vsftpd
# 設定PAM認證服務的配置檔案名稱,該檔案存放在/etc/pam.d/
userlist_enable=YES
tcp_wrappers=NO
# [?r? p?z] 包裝 在VSFTPD中使用TCP_Wrappers遠端通路控制機制,強烈建議改為 NO 否則ls 無法
guest_enable=YES
# [?? s t] 客人
guest_username=ftpvload
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vconf
# 使用者的配置檔案,類似于nginx多網站一樣
#------- 配置被動模式 ----------
pasv_enable=YES
pasv_min_port=63000
pasv_max_port=65535
" > /etc/vsftpd/vsftpd.conf # 将echo 列印的内容寫入配置檔案
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup
# cp 複制,備份檔案
sed -i s/^/#/g /etc/pam.d/vsftpd # 删除開頭為 # 符号的行
echo "auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/virtusers" >> /etc/pam.d/vsftpd
sleep 3
echo "#-------------------------- 配置虛拟使用者 --------------------------#"
touch /var/log/vsftpd.log
chown vsftpd.vsftpd /var/log/vsftpd.log
mkdir /etc/vsftpd/vconf/ -p
echo -e "test\ntest1234" >> /etc/vsftpd/virtusers
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 生效虛拟使用者配置
mkdir /var/ftp/virtual/test
# 允許可寫
allow_writeable_chroot=YES
#設定支援ASCII模式的上傳和下載下傳功能
local_root=/var/ftp/virtual/username
#指定虛拟使用者的具體主路徑
#設定不允許匿名使用者通路
#設定允許寫操作
#設定上傳檔案權限掩碼
#設定不允許匿名使用者上傳
#設定不允許匿名使用者建立目錄
idle_session_timeout=600
#設定空閑連接配接逾時時間
data_connection_timeout=120
#設定單次連續傳輸最大時間
max_clients=10
#設定并發用戶端通路個數
max_per_ip=5
#設定單個用戶端的最大線程數,這個配置主要來照顧Flashget、迅雷等多線程下載下傳軟體
#local_max_rate=50000
#設定該使用者的最大傳輸速率,機關b/s" >> /etc/vsftpd/vconf/vconf.tmp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/test
sed -i s/username/test/g /etc/vsftpd/vconf/test
echo "完成"
echo "已經安裝vsftpd"
}
vsftpdinstall
#---------------- 建立虛拟使用者 ----------------
請輸入ftp賬戶名确認後輸入密碼
"
if read -t 5 -p "Please enter you name: " username
if [ -f /etc/vsftpd/vconf/$username ] #判斷使用者是否存在
then
echo "The $username is exists, please input another name."
else
read -s -p "Please enter your password: " passwd
echo -e "$username\n$passwd" >> /etc/vsftpd/virtusers
# 将ftp賬戶密碼寫入配置檔案
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
# 将密碼生成密鑰
mkdir -p /var/ftp/virtual/$username
# 建立ftp 使用者的家目錄
chown -R ftpvload.ftpvload /var/ftp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/$username
sed -i s/username/$username/g /etc/vsftpd/vconf/$username
echo "The config is over."
fi
echo -e "\n 您超過5s沒有配置資訊,系統自動建立預設ftp賬戶
ftp 使用者名:eisc 密碼:eisc.cn 預設路徑:/var/ftp/virtual/eisc
"
echo -e "eisc\neisc.cn" >> /etc/vsftpd/virtusers
db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
mkdir -p /var/ftp/virtual/eisc
chown -R ftpvload.ftpvload /var/ftp
cp /etc/vsftpd/vconf/vconf.tmp /etc/vsftpd/vconf/eisc
sed -i s/username/eisc/g /etc/vsftpd/vconf/eisc # 修改使用者家目錄
chmod 755 /var/ftp/*
systemctl restart firewalld
firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=63000-65535/tcp
# 開放端口範圍:3000到4000
systemctl restart firewalld vsftpd
# 開放防火牆端口和重新開機vsftpd
#---------------- win 檔案管理通路ftp出現問題 ----------------
#解決辦法:設定IE浏覽器>>Internet選項>>進階>>将“使用被動FTP(用于防火牆和DSL數據機的相容)”選項去掉>>确定即可
#---------------- ftp 下載下傳檔案以及常用指令 ----------------
#open # 與ftp伺服器相連接配接;
#send(put) # 上傳檔案
#get: # 下載下傳檔案
#mget: # 下載下傳多個檔案;
#cd: # 切換目錄;
# 腳本執行:wget eisc.cn/file/shell/vsftpd.sh ; sh vsftpd.sh
################################ftp報錯含義#############################
FTP 數字代碼的意義
110 重新啟動标記應答。
120 服務在多久時間内ready。
125 資料鍊路埠開啟,準備傳送。
150 檔案狀态正常,開啟資料連接配接端口。
200 指令執行成功。
202 指令執行失敗。
211 系統狀态或是系統求助響應。
212 目錄的狀态。
213 檔案的狀态。
214 求助的訊息。
215 名稱系統類型。
220 新的聯機服務ready。
221 服務的控制連接配接埠關閉,可以登出。
225 資料連結開啟,但無傳輸動作。
226 關閉資料連接配接端口,請求的檔案操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的檔案操作完成。
257 顯示目前的路徑名稱。
331 使用者名稱正确,需要密碼。
332 登入時需要賬号資訊。
350 請求的操作需要進一部的指令。
421 無法提供服務,關閉控制連結。
425 無法開啟資料鍊路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 指令終止:有本地的錯誤。
452 未執行指令:磁盤空間不足。
500 格式錯誤,無法識别指令: 伺服器處理:ftp 500 使用者ftp配置檔案綁定了不存在的家目錄路徑
501 參數文法錯誤。
502 指令執行失敗。
503 指令順序錯誤。
504 指令所接的參數不正确。
530 未登入。
532 儲存檔案需要賬戶登入。
550 未執行請求的操作: 沒有讀寫權限
551 請求的指令終止,類型未知。
552 請求的檔案終止,儲存位溢出。
553 未執行請求的的指令,名稱不正确。