天天看點

linux centos 搭建 ftp 建立虛拟使用者 并使用 ftp 指令上傳和下載下傳檔案

#!/bin/bash
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
echo "
配置檔案為空,#開始安裝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 重命名
# 注意配置檔案每行末尾不能有空格或注釋
echo "
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
sleep 3
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
echo "
# 允許可寫
allow_writeable_chroot=YES
#設定支援ASCII模式的上傳和下載下傳功能
ascii_upload_enable=YES
ascii_download_enable=YES
local_root=/var/ftp/virtual/username
#指定虛拟使用者的具體主路徑
anonymous_enable=NO
#設定不允許匿名使用者通路
write_enable=YES
#設定允許寫操作
local_umask=022
#設定上傳檔案權限掩碼
anon_upload_enable=NO
#設定不允許匿名使用者上傳
anon_mkdir_write_enable=NO
#設定不允許匿名使用者建立目錄
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 "完成"
else
echo "已經安裝vsftpd"
fi
}
vsftpdinstall
echo "
#----------------  建立虛拟使用者 ----------------
請輸入ftp賬戶名确認後輸入密碼
 "
if read -t 5 -p "Please enter you name: " username
then
   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
          db_load -T -t hash -f /etc/vsftpd/virtusers /etc/vsftpd/virtusers.db
      mkdir -p /var/ftp/virtual/$username
      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
else
   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   # 修改使用者家目錄
fi

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