FTP服務歷史是比較悠久的,但由于其出現的比較早,所以設計之初也沒考慮到安全問題,發展至今,FTP服務仍然采用明文傳輸協議,但由于其搭建及使用比較便捷,使其保留至今。今天就給大家分享一下如何搭建服務器,并讓之滿足實際生產環境中的相應需求。為了演示方便,我們這里把防火墻和SELinux提前關閉掉,如果忘記關閉后續過程會出現一些另人費解的報錯信息。
創新互聯是一家集網站建設,綠園企業網站建設,綠園品牌網站建設,網站定制,綠園網站建設報價,網絡營銷,網絡優化,綠園網站推廣為一體的創新建站企業,幫助傳統企業提升企業形象加強企業競爭力。可充分滿足這一群體相比中小企業更為豐富、高端、多元的互聯網需求。同時我們時刻保持專業、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們為更多的企業打造出實用型網站。
第一步:YUM安裝ftp服務器端vs-ftpd
yum install -y vsftpd
第二步:配置vs-ftpd
vim /etc/vsftpd/vsftpd.conf
xferlog_enable=YES
xferlog_file=/var/log/xferlog
pam_service_name=vsftpd.MySQL
guest_enable=YES
guest_username=vsftpd
第三步:編譯安裝pam-mysql(編譯環境肯定是要有的)
[root@centos730g ~]#yum install -y mariadb-devel pam-devel openssl-deve
[root@centos730g ~]# ls
anaconda-ks.cfg pam_mysql-0.7RC1.tar.gz
[root@centos730g ~]# tar xf pam_mysql-0.7RC1.tar.gz
[root@centos730g ~]# cd pam_mysql-0.7RC1/
[root@centos730g pam_mysql-0.7RC1]# ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
[root@centos730g pam_mysql-0.7RC1]# make
/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -g -O2 -I/usr/include/mysql -c pam_mysql.c
mkdir .libs
gcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/security -I/usr/include -g -O2 -g -O2 -I/usr/include/mysql -c pam_mysql.c -fPIC -DPIC -o .libs/pam_mysql.o
pam_mysql.c: In function 'pam_mysql_converse':
pam_mysql.c:3192:4: warning: passing argument 2 of 'conv->conv' from incompatible pointer type [enabled by default]
conv->appdata_ptr))) { //這里出現了一個報錯信息,不影響最終結果,無需理會
^
pam_mysql.c:3192:4: note: expected 'const struct pam_message **' but argument is of type 'struct pam_message **'
/bin/sh ./libtool --mode=link gcc -g -O2 -I/usr/include/mysql -o pam_mysql.la -rpath /usr/lib64/security -module -avoid-version pam_mysql.lo -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl -lcrypt
gcc -shared .libs/pam_mysql.o -L/usr/lib64/mysql -lmysqlclient -lpthread -lz -lm -lssl -lcrypto -ldl -lcrypt -Wl,-soname -Wl,pam_mysql.so -o .libs/pam_mysql.so
creating pam_mysql.la
(cd .libs && rm -f pam_mysql.la && ln -s ../pam_mysql.la pam_mysql.la)
[root@centos730g pam_mysql-0.7RC1]#
[root@centos730g pam_mysql-0.7RC1]# make install
第四步:安裝、配置mariadb-server并啟動之
[root@centos730g ~]# yum install -y mariadb-server
[root@centos730g ~]# systemctl start mariadb
[root@centos730g ~]# mysql_secure_installation //運行安全配置腳本(設置管理員密碼、刪除匿名帳戶、開啟管理員遠程登錄、刪除測試數據庫)
第五步:進入數據庫創建FTP用戶帳戶數據庫
MariaDB [(none)]> create database vsftpd;
MariaDB [(none)]> create table vsftpd.users (id int not null auto_increment primary key,name char(30) not null unique key,password char(48));
MariaDB [(none)]> insert into vsftpd.users (name,password) values ('admin',password('adminpass')),('guest',password('guestpass'));
MariaDB [(none)]> grant all on vsftpd.* to 'vsftpd'@'127.0.0.1' identified by 'vsftpdpass;
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit
第六步:手動編寫ftp連接mysql的配置文件
[root@centos730g ~]# vim /etc/pam.d/vsftpd.mysql
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vsftpdpass host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
第七步:創建FTP根目錄,創建數據庫中FTP帳戶映射到本地的帳戶,并指定其家目錄為FTP根目錄,設置FTP根目錄的相應權限
mkdir -pv /ftproot/{pub,upload} //為了方便后面驗證效果,創建兩個目錄(pub用于下載,upload用于用戶上傳)
chmod -w /ftproot //ftp根目錄不能有寫入權限
useradd -r -d /ftproot vsftpd
第八步:啟動vsftpd服務,安裝ftp客戶端工具lftp,并檢驗登錄效果
[root@centos730g ~]# yum install -y lftp
[root@centos730g ~]# lftp -u admin 192.168.1.71
Password:
lftp admin@192.168.1.71:~> ls
ls: Login failed: 530 Login incorrect.
lftp admin@192.168.1.71:~>
確保密碼沒有輸入錯誤的情況下出現此報錯信息,原因就是SELinux沒有關閉。于此同時,安全模塊的日志文件里面也有相應的錯誤記錄。
[root@centos730g ~]# cat /var/log/secure
Oct 18 20:00:50 centos730g vsftpd[13492]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))
Oct 18 20:02:30 centos730g vsftpd[13514]: pam_mysql - MySQL error (Can't connect to MySQL server on '127.0.0.1' (13))
關閉SELinux再嘗試登錄,一切正常
[root@centos730g ~]# getenforce
Enforcing
[root@centos730g ~]# setenforce 0
[root@centos730g ~]# getenforce
Permissive
[root@centos730g ~]# !lftp
lftp -u admin 192.168.1.71
Password:
lftp admin@192.168.1.71:~> ls
drwxr-xr-x 2 0 0 4096 Oct 18 12:05 pub
drwxr-xr-x 2 0 0 4096 Oct 18 12:05 upload
lftp admin@192.168.1.71:/>
lftp admin@192.168.1.71:/> cd upload/
lftp admin@192.168.1.71:/upload> put /etc/fstab
put: Access failed: 550 Permission denied. (fstab)
lftp admin@192.168.1.71:/upload>
lftp admin@192.168.1.71:/upload> exit
[root@centos730g ~]# lftp -u guest 192.168.1.71
Password:
lftp guest@192.168.1.71:~> ls
drwxr-xr-x 2 0 0 4096 Oct 18 12:05 pub
drwxr-xr-x 2 0 0 4096 Oct 18 12:05 upload
lftp guest@192.168.1.71:/> cd upload/
lftp guest@192.168.1.71:/upload> put /etc/issue
put: Access failed: 550 Permission denied. (issue)
lftp guest@192.168.1.71:/upload>
至此為到,admin,guest兩個虛擬用戶都可以順利通過mysql的驗證后登錄到ftp服務器,并下載文件了,但如果要想擁有上傳權限,必需對單個虛擬帳戶單獨配置權限
第九步:為管理員帳戶admin配置上傳及修改權限
編輯vsftpd配置文件,添加一行
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/users_conf
創建用于存放單個用戶權限配置文件的目錄
mkdir /etc/vsftpd/users_conf
手動編寫權限配置文件內容
vim /etc/vsftpd/users_conf/admin
anon_upload_enable=YES //允許上傳
anon_other_write_enable=YES //允許刪除
anon_mkdir_write_enable=YES //允許創建目錄
給本地映射帳戶vsftpd用戶授予/ftproot/upload目錄擁有寫入權限
[root@centos730g ~]# setfacl -m u:vsftpd:rwx /ftproot/upload/
[root@centos730g ~]# getfacl /ftproot/upload/
getfacl: Removing leading '/' from absolute path names
# file: ftproot/upload/
# owner: root
# group: root
user::rwx
user:vsftpd:rwx
group::r-x
mask::rwx
other::r-x
[root@centos730g ~]#
注意,雖然此時vsftp擁有寫入權限,但只有在單獨授權文件里面開放相應權限后,寫入權限才會對該用戶正式生效。
配置完成后,重啟vsftpd服務,讓剛才所做的配置正式生效
[root@centos730g ~]# systemctl restart vsftpd
再次使用admin帳戶登錄,驗證上傳及修改權限
[root@centos730g ~]# lftp -u admin 192.168.1.71
Password:
lftp admin@192.168.1.71:~> cd upload/
lftp admin@192.168.1.71:/upload> put /etc/fstab
574 bytes transferred
lftp admin@192.168.1.71:/upload> ls
-rw------- 1 996 994 574 Oct 18 12:47 fstab
lftp admin@192.168.1.71:/upload> mkdir admin
mkdir ok, `admin' created
lftp admin@192.168.1.71:/upload> ls
drwx------ 2 996 994 4096 Oct 18 12:47 admin
-rw------- 1 996 994 574 Oct 18 12:47 fstab
lftp admin@192.168.1.71:/upload> rm fstab
rm ok, `fstab' removed
lftp admin@192.168.1.71:/upload> ls
drwx------ 2 996 994 4096 Oct 18 12:47 admin
lftp admin@192.168.1.71:/upload> rm -rf admin
rm ok, `admin' removed
lftp admin@192.168.1.71:/upload> ls
lftp admin@192.168.1.71:/upload>
lftp admin@192.168.1.71:/upload> exit
[root@centos730g ~]# lftp -u guest 192.168.1.71
Password:
lftp guest@192.168.1.71:~> cd upload/
lftp guest@192.168.1.71:/upload> put /etc/issue
put: Access failed: 550 Permission denied. (issue)
lftp guest@192.168.1.71:/upload>
admin是單獨做了上傳修改授權的配置的,所以upload的寫入權限對它是生效的,而guest沒有單獨授權,寫入權限對其是無效的。
至此,對ftp服務的需求,在實際生產環境中基本滿足,當然ftp服務的用戶帳戶一般不會多到使用數據庫來存儲,所以這就需要根據實際需求來決定采用何種方式來存儲ftp的用戶帳戶了。但這里一定要提醒大家的是,ftp服務對目錄的權限要求是非常嚴格的,稍有不慎,便會出各式各樣的報錯信息,所以大家在配置過程中,一定要細心對待。
當前文章:如何把FTP用戶帳號存放進MariaDB數據庫中
網站URL:http://m.newbst.com/article34/pjdhpe.html
成都網站建設公司_創新互聯,為您提供外貿網站建設、企業建站、網站制作、網站建設、商城網站、ChatGPT
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯