本文章介紹經過docker搭建的vsftpd實踐,若有任何問題,請聯繫我,一塊兒交流。
請訪問git地址:
https://code.aliyun.com/jy1779/vsftpd.git
git
執行指令:docker
root@elk:/docker# git clone https://code.aliyun.com/jy1779/vsftpd.git
目錄結構:
bash
root@elk:/docker/vsftpd# ls conf data docker-compose.yml Dockerfile log pam.d sources.list
root@elk:/docker/vsftpd# tree -l . ├── conf #宿主機目錄,存放vsftpd全部配置文件,僅用於宿主機。 │ ├── vsftpd #vsftpd配置文件目錄,主要存放自定義腳本,虛擬用戶配置文件,等等 │ │ ├── bin #自定義腳本目錄 │ │ │ ├── add_vuser.sh #用於添加虛擬用戶 │ │ │ ├── del_vuser.sh #用於刪除虛擬用戶 │ │ │ └── run_vsftpd.sh #用於運行vsftpd服務 │ │ ├── chroot_list #限制用戶家目錄 │ │ ├── user_config_dir #虛擬用戶配置文件目錄 │ │ │ └── jonny #虛擬用戶配置文件 │ │ ├── user_list #限制虛擬用戶訪問,虛擬用戶須要添加到該文件才能夠訪問 │ │ ├── v_user_password.db #虛擬用戶驗證文件 │ │ ├── v_user_password.txt #虛擬用戶驗證前文本 │ │ └── welcome.txt #登陸vsftpd後顯示歡迎信息 │ └── vsftpd.conf #vsftpd主配置文件 ├── data #vsftpd掛載出來的根目錄 │ └── jonny #虛擬用戶家目錄 │ └── test ├── docker-compose.yml #docker-compose管理 ├── Dockerfile #Dockerfile 構建 ├── log #日誌目錄 │ ├── vsftpd.log │ └── xferlog ├── pam.d │ └── vsftpd #PAM驗證 └── sources.list
啓動vsftpd(由於本地有鏡像因此不須要拉取鏡像)ide
root@elk:/docker/vsftpd# docker-compose up -d vsftpd Creating vsftpd.1 ... Creating vsftpd.1 ... done root@elk:/docker/vsftpd# docker-compose logs vsftpd Attaching to vsftpd.1 vsftpd.1 | ************************************************* vsftpd.1 | * * vsftpd.1 | * VSFTPD SERVER * vsftpd.1 | * * vsftpd.1 | ************************************************* vsftpd.1 | ADD VIRTUAL USER vsftpd.1 | ---------------- vsftpd.1 | · Default virtual user: vsftpd.1 | - username: jonny vsftpd.1 | - password: 123456 vsftpd.1 | · You can use the command "ftp localhost", enter the virtual user and password. vsftpd.1 | · Add new Virtual user to /etc/vsftpd/bin/add_vuser.sh vsftpd.1 | · Del Virtual user to /etc/vsftpd/bin/del_vuser.sh
登陸ftp:日誌
默認建立了一個虛擬用戶:jonny,能夠直接登陸。
code
root@elk:/docker/vsftpd# ftp localhost ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. 220-welcome to ftp ! 220 Name (localhost:jonny): jonny 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ls #查看該虛擬用戶的家目錄 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. -rw-r--r-- 1 0 0 0 Jan 20 10:24 test 226 Directory send OK.
添加用戶:(添加用戶須要進入容器內部運行指令或者在容器外部調用容器內部腳本)ci
root@elk:/docker/vsftpd# docker exec -it vsftpd.1 bash #進入容器內部 root@elk:/srv/ftp# cd /etc/vsftpd/bin/ root@elk:/etc/vsftpd/bin# ls add_vuser.sh del_vuser.sh run_vsftpd.sh root@elk:/etc/vsftpd/bin# ./add_vuser.sh jaye 123456 #執行腳本,兩個參數,一個是新增的用戶名,一個是密碼 root@elk:/etc/vsftpd/bin# exit #退出容器 exit root@elk:/docker/vsftpd# ftp localhost #使用新添加的虛擬用戶登陸 ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. 220-welcome to ftp ! 220 Name (localhost:jonny): jaye 331 Please specify the password. Password: 230 Login successful. #登陸成功 Remote system type is UNIX. Using binary mode to transfer files. ftp> ls #由於剛剛建立的虛擬用戶,因此虛擬用戶的家目錄沒有任何文件或目錄 200 PORT command successful. Consider using PASV. 150 Here comes the directory listing. 226 Directory send OK.
刪除用戶:(跟添加用戶同樣,進入容器內部或者在外部調用指令)get
root@elk:/docker/vsftpd# docker exec -it vsftpd.1 bash root@elk:/srv/ftp# cd /etc/vsftpd/bin root@elk:/etc/vsftpd/bin# ls add_vuser.sh del_vuser.sh run_vsftpd.sh root@elk:/etc/vsftpd/bin# ./del_vuser.sh jaye #刪除虛擬用戶,只須要一個參數,就是用戶名 root@elk:/etc/vsftpd/bin# exit exit root@elk:/docker/vsftpd# ftp localhost ftp: connect to address ::1: Connection refused Trying 127.0.0.1... Connected to localhost. 220-welcome to ftp ! 220 Name (localhost:jonny): jaye #這時已經登陸不上了。 530 Permission denied. Login failed.