FTP服務(wù)歷史是比較悠久的,但由于其出現(xiàn)的比較早,所以設(shè)計之初也沒考慮到安全問題,發(fā)展至今,F(xiàn)TP服務(wù)仍然采用明文傳輸協(xié)議,但由于其搭建及使用比較便捷,使其保留至今。今天就給大家分享一下如何搭建服務(wù)器,并讓之滿足實(shí)際生產(chǎn)環(huán)境中的相應(yīng)需求。為了演示方便,我們這里把防火墻和SELinux提前關(guān)閉掉,如果忘記關(guān)閉后續(xù)過程會出現(xiàn)一些另人費(fèi)解的報錯信息。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),綠園企業(yè)網(wǎng)站建設(shè),綠園品牌網(wǎng)站建設(shè),網(wǎng)站定制,綠園網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,綠園網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
第一步:YUM安裝ftp服務(wù)器端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(編譯環(huán)境肯定是要有的)
[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))) { //這里出現(xiàn)了一個報錯信息,不影響最終結(jié)果,無需理會
^
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 //運(yùn)行安全配置腳本(設(shè)置管理員密碼、刪除匿名帳戶、開啟管理員遠(yuǎn)程登錄、刪除測試數(shù)據(jù)庫)
第五步:進(jìn)入數(shù)據(jù)庫創(chuàng)建FTP用戶帳戶數(shù)據(jù)庫
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
第七步:創(chuàng)建FTP根目錄,創(chuàng)建數(shù)據(jù)庫中FTP帳戶映射到本地的帳戶,并指定其家目錄為FTP根目錄,設(shè)置FTP根目錄的相應(yīng)權(quán)限
mkdir -pv /ftproot/{pub,upload} //為了方便后面驗證效果,創(chuàng)建兩個目錄(pub用于下載,upload用于用戶上傳)
chmod -w /ftproot //ftp根目錄不能有寫入權(quán)限
useradd -r -d /ftproot vsftpd
第八步:啟動vsftpd服務(wù),安裝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:~>
確保密碼沒有輸入錯誤的情況下出現(xiàn)此報錯信息,原因就是SELinux沒有關(guān)閉。于此同時,安全模塊的日志文件里面也有相應(yīng)的錯誤記錄。
[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))
關(guān)閉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服務(wù)器,并下載文件了,但如果要想擁有上傳權(quán)限,必需對單個虛擬帳戶單獨(dú)配置權(quán)限
第九步:為管理員帳戶admin配置上傳及修改權(quán)限
編輯vsftpd配置文件,添加一行
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/users_conf
創(chuàng)建用于存放單個用戶權(quán)限配置文件的目錄
mkdir /etc/vsftpd/users_conf
手動編寫權(quán)限配置文件內(nèi)容
vim /etc/vsftpd/users_conf/admin
anon_upload_enable=YES //允許上傳
anon_other_write_enable=YES //允許刪除
anon_mkdir_write_enable=YES //允許創(chuàng)建目錄
給本地映射帳戶vsftpd用戶授予/ftproot/upload目錄擁有寫入權(quán)限
[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擁有寫入權(quán)限,但只有在單獨(dú)授權(quán)文件里面開放相應(yīng)權(quán)限后,寫入權(quán)限才會對該用戶正式生效。
配置完成后,重啟vsftpd服務(wù),讓剛才所做的配置正式生效
[root@centos730g ~]# systemctl restart vsftpd
再次使用admin帳戶登錄,驗證上傳及修改權(quán)限
[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是單獨(dú)做了上傳修改授權(quán)的配置的,所以upload的寫入權(quán)限對它是生效的,而guest沒有單獨(dú)授權(quán),寫入權(quán)限對其是無效的。
至此,對ftp服務(wù)的需求,在實(shí)際生產(chǎn)環(huán)境中基本滿足,當(dāng)然ftp服務(wù)的用戶帳戶一般不會多到使用數(shù)據(jù)庫來存儲,所以這就需要根據(jù)實(shí)際需求來決定采用何種方式來存儲ftp的用戶帳戶了。但這里一定要提醒大家的是,ftp服務(wù)對目錄的權(quán)限要求是非常嚴(yán)格的,稍有不慎,便會出各式各樣的報錯信息,所以大家在配置過程中,一定要細(xì)心對待。
當(dāng)前文章:如何把FTP用戶帳號存放進(jìn)MariaDB數(shù)據(jù)庫中
網(wǎng)站URL:http://aaarwkj.com/article34/pjdhpe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、企業(yè)建站、網(wǎng)站制作、網(wǎng)站建設(shè)、商城網(wǎng)站、ChatGPT
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)