基於虛擬用戶的方式使用vsftp

1、主動和被動模式簡介
一、Port模式(主動模式):
當客戶端C向服務端S鏈接後,使用的是Port模式,那麼客戶端C會發送一條命令告訴服務端S(客戶端C在本地打開了一個端口N在等着你進行數據鏈接),當服務端S收到這個Port命令後 就會向客戶端打開的那個端口N進行鏈接,這種數據鏈接就生成了。
二、Pasv模式(被動模式):
當客戶端C向服務端S鏈接後,服務端S會發信息給客戶端C,這個信息是(服務端S在本地打開了一個端口M,你如今去鏈接我吧),當客戶端C收到這個信息後,就能夠向服務端S的M端口進行鏈接,鏈接成功後,數據鏈接也創建了。
2、安裝vsftpd
一、yum安裝vsftp
#yum ‐y install vsftpd
二、啓動服務
#systemctl start vsftpd.service
三、配置文件路徑
/etc/vsftpd
3、配置vsftpd用匿名用戶方式登陸
一、首先咱們在企業中ftp服務器,通常狀況下都會有個共享服務器,容許員工下載一些公司的軟件或者經常使用的軟件包(方便,不用再去外網去下載,也省帶寬)
二、vsftp提供了匿名登陸,默認anonymous_enable=YES的狀況下,就啓用了匿名訪問,這種狀況下你只能把須要給用戶的文件,存放到/var/ftp/pub下(默認路徑),若是想更改的話須要添加anon_root= /data/pub,後面的路徑就是匿名登陸後實際訪問的目錄。若是匿名用戶也須要上傳的功能的話。
anonymous_enable=YES # 容許匿名訪問
anon_root= /data/pub # 匿名訪問的本地實際目錄
local_enable=YES
anon_upload_enable=YES # 容許匿名用戶上傳文件(須將全局的write_enable=YES,默認YES)
anon_mkdir_write_enable=YES # 容許匿名用戶建立目錄
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
vsftpd.conf
三、咱們設置了匿名訪問的目錄是/data/pub裏面,仍是上傳不了文件,有人說直接改爲777就能夠,可是改爲777就沒法訪問了,這是因爲vsftpd的安全性設置,咱們須要在pub裏面再建立一個子文件夾,而後給這個子文件夾777的權限就OK了,這樣就能夠在這個子文件夾中進行操做了。
4、配置虛擬用戶登陸方式
【虛擬用戶必須關閉虛擬用戶anonymous_enable=NO】
一、配置文件內容
anonymous_enable=NO
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd
use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120
data_connection_timeout=120
guest_enable=YES
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vuser_conf
virtual_use_local_privs=YES
pasv_min_port=10060
pasv_max_port=10090
accept_timeout=5
connect_timeout=1
二、建立宿主用戶
建立用戶 ftpuser 指定 `/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
三、創建虛擬用戶文件
touch /etc/vsftpd/vuser_passwd
# 編輯虛擬用戶名單文件:(# 第一行帳號,第二行密碼,注意:不能使用root作用戶名,系統保留)
vi /etc/vsftpd/vuser_passwd
編輯內容,下面是 vuser_passwd 內容
ftp1
12345678
ftp2
12345678
四、生成虛擬用戶數據文件
db_load ‐T ‐t hash ‐f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
chmod 600 /etc/vsftpd/vuser_passwd.db
五、建立用戶配置
mkdir /etc/vsftpd/vuser_conf # 創建虛擬用戶我的vsftp的配置文件
cd /etc/vsftpd/vuser_conf # 進入目錄
touch ftp1 ftp2
(ftp1和ftp2寫入以下內容,local_root=/home/vsftpd/ftp1#這裏寫入這個用戶的實際存儲路勁)。
ftp1文件中內容以下
vim ftp1
local_root=/home/vsftpd/ftp1
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
vim ftp2
local_root=/home/vsftpd/ftp2
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
六、建立用戶目錄
# mkdir ‐p /home/vsftpd/ftp1
# mkdir ‐p /home/vsftpd/ftp2
七、服務運維
systemctl restart vsftpd.service      # 重啓服務
systemctl start vsftpd.service         # 啓動服務
systemctl status vsftpd.service      # 服務狀態查看
八、生成虛擬用戶的PAM文件
# cd /etc/pam.d/
備份vsftpd文件
# cp vsftpd vsftpd.bak
修改vsftpd文件內容(加入第二和第三行,下面的都所有註釋,注意下面是64位操做系統,若是是32位的話lib64須要改爲lib)
#%PAM‐1.0
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
#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
九、新增長用戶
新增用戶的話,須要在/etc/vsftpd/vsuser.passwd裏面追加用戶(刪除就是刪除用戶),記得使用db_load從新生成vsuser.passwd文件便可,vuser_confi裏面新建一個新建帳戶的權限文件,宿主目錄記得新建存儲文件。
5、處理報錯
一、上面每一個配置文件中的內容最好是手動鍵入。
二、客戶端windows打開cmd到後臺進行鏈接,網頁和資源管理器裏面都會有緩存也看不到報錯。
三、用windows的cmd連接ftp會報錯,信息是:chroot沒有讀到/etc/vsftpd/chroot_list這個文件,解決方法就是直接新建這個文件就行,記得重啓服務。
四、虛擬用戶登陸到本身的宿主目錄後,不能上傳文件,這是由於vsftpd爲了安全,不能讓匿名用戶在本身的家目錄下直接建立文件,解決方式就是在每一個虛擬用戶的宿主目錄裏面再新建一個文件夾,給這文件夾777權限,就能夠了。
 6、實戰,模擬學生資料系統。只有學生本身和任課老師能看到學生本人文件,別人不能夠。老師能夠看到所教學生的文件。
 一、準備name.txt,name.txt中的第一列爲學生名、第二列爲本人的任課老師,一會須要遍歷此文件新建帳號。
[root@localhost ~]# cat name.txt
lishuai         jiacai 
yuanhongbin     jiacai 
liduo           gongshengsheng
liuqi           lirongxia
nixueging       lirongxia
congshuanjian   lixi
liuxuesheng     gongshengsheng
yubaiyan        jiacai 
shenxiaojiao    lixi
xujianggao      shaozuguang
sunguangshuai   gongshengsheng
xiaoshuyue      congshen
cuijingwen      congshen
lixinju         jina
jinpengyuan     jina
caoqishao       xiaoyang
lienbo          xiaoyang
sunyuqing       jina
gianshunsheng   congshen
yangguangming   xiaoyang
fengxueying     congshen
liuyanshao      shaozuguang
xuhuasheng      lirongxia
lihongwei       jiacai 
licong          lixi
gaoxingjia      gongshengsheng
lishen          lixi
huangyu         shaozuguang
lixihan         lirongxia
shengzimo       shaozuguang
liujiaxin       shaozuguang
二、利用shell腳本,安裝配置vsftpd,以及新建用戶設置密碼等操做。shell腳本以下:
#!bin/bash
yum install -y vsftpd                                                       ##安裝vsftpd
systemctl start vsftpd                                                     ##啓動vsftpd
mkdir -pv /home/vsftpd                                                  ##建立vsftpd的家目錄
read -p "請輸入用戶名(用戶名必須是:ftpuser):" uname
if useradd -g root -M -d /home/vsftpd -s /sbin/nologin $uname &>/dev/null;then    ##建立用戶
echo "$uname" | passwd --stdin $uname &>/dev/null                                             ##設置密碼
echo "建立用戶 "$uname" 成功,密碼和用戶名相同"
else
echo "建立用戶 "$uname" 失敗 "$uname"已存在並被刪除,請重新執行腳本"
userdel $uname                                                                                                      ##刪除用戶
exit 6
fi

chown -R $uname.root /home/vsftpd                      ##把/home/vsftpd的全部權給ftpuser.root    
while read line                                                        ##輸入重定向
do
    stu=`echo $line | awk '{print $1}'`                        ## 定義變量 stu
    tea=`echo $line | awk '{print $2}'`                        ##定義變量 tea

    if [ -e $tea ];then                                                 ##若是tea存在
            echo "$tea 存在"
            mkdir -pv /bishe/0301/$tea/$stu/upload     ##建立/$tea/$stu/upload 
    else
            echo "$tea 不存在" 
            mkdir -pv /bishe/0301/$tea/{$stu/upload,upload}    ##建立/$tea/{$stu/upload,upload} 
    fi
    chmod 777 /bishe/0301/$tea/upload                   ##給/$tea/upload權限
    chmod 777 /bishe/0301/$tea/$stu                       ##給/$tea/$stu權限  
    chmod 777 /bishe/0301/$tea/$stu/upload           ##給/$tea/$stu/upload權限

    mkdir -pv /etc/vsftpd/vuser_conf        ##建立虛擬用戶我的vsftp的配置
    cd /etc/vsftpd/vuser_conf                   ##進入目錄

    echo "local_root=/bishe/0301/$tea/$stu" >$stu
    echo "write_enable=YES" >>$stu
    echo "anon_world_readable_only=NO" >>$stu
    echo "anon_upload_enable=YES" >>$stu
    echo "anon_mkdir_write_enable=YES" >>$stu
    echo "anon_other_write_enable=YES" >>$stu

    echo "local_root=/bishe/0301/$tea" >$tea
    echo "write_enable=YES" >>$tea
    echo "anon_world_readable_only=NO" >>$tea
    echo "anon_upload_enable=YES" >>$tea
    echo "anon_mkdir_write_enable=YES" >>$tea
    echo "anon_other_write_enable=YES" >>$tea

    mkdir -pv /etc/vsftpd/chroot_list                                           ##建立文件夾

    Pwd=`openssl rand -hex 8 | cksum | cut -c1-6`                   
    echo "$stu">>/etc/vsftpd/vuser_passwd                              ##追加學生姓名到/etc/vsftpd/vuser_passwd
    echo "$Pwd">>/etc/vsftpd/vuser_passwd                            ##追加密碼到 /etc/vsftpd/vuser_passwd
    echo | awk '{print $2}' /root/new1.txt | sort | uniq >tea.txt     ##把老師名字統計到tea.txt
done<./name.txt

while read line     ###給老師建立密碼
do
                 tea1=`echo $line | awk '{print $1}'`
                 Pwd=`openssl rand -hex 8 | cksum | cut -c1-8`
                 echo "$tea1">>/etc/vsftpd/vuser_passwd
                 echo "$Pwd">>/etc/vsftpd/vuser_passwd
done<./tea.txt
db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db 
chmod 600 /etc/vsftpd/vuser_passwd.db 

echo "anonymous_enable=NO
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
use_localtime=YES
local_enable=YES
allow_writeable_chroot=YES
xferlog_enable=YES
local_umask=022
pam_service_name=vsftpd

use_localtime=YES
listen_port=21
chroot_local_user=YES
idle_session_timeout=120

data_connection_timeout=120
guest_enable=YES
guest_username=ftpuser

user_config_dir=/etc/vsftpd/vuser_conf
virtual_use_local_privs=YES

pasv_min_port=10060
pasv_max_port=10090

accept_timeout=5
connect_timeout=1 " >/etc/vsftpd/vsftpd.conf
cd /etc/pam.d/
echo  "#%PAM-1.0 
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd 
#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 " > vsftpd
systemctl restart vsftpd              ##重啓服務
三、設置定時任務、完成數據的定時備份
crontab -l
5 7-21 * * * /usr/bin/rsync -az /bishe/ /bak-bishe/ &>/dev/null
30 23 * * *  /bin/bash /bin/backup.sh &>/dev/null

博主小白,歡迎各位指出不足和改進意見,感謝觀看。
這個世界上根本沒有正確的選擇,咱們只不過是要努力奮鬥,使當初的選擇變得正確!
相關文章
相關標籤/搜索