標籤:style color os 檔案 io art
為了提高系統的安全性,我們採用虛擬使用者而非系統(匿名)使用者的形式訪問FTP。整體思路是通過開啟vsftp中的虛擬賬戶功能並調用新的pam認證模組,然後再修改pam模組使得可以通過mysql驗證使用者的合法性。以下為實驗過程。
第一步裝包:
yum install -y vsftpd mysql-server mysql-devel pam-devel
yum groupinstall -y Development tools
tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/
cd /usr/src/pam_mysql-0.7RC1
./configure
make && make install
第二步配置mysql
service mysqld start
mysql -p
create database ftpusers;
use ftpusers;
create table users( id int AUTO_INCREMENT NOT NULL,name char(20) NOT NULL UNIQUE KEY, passwd char(48) NOT NULL, primary key(id) );
insert into users(name,passwd)values(‘nick‘,password(‘redhat‘));
grant select on ftpusers.* to [email protected] identified by ‘vftpadm‘;
flush privileges;
第三步編輯vsftpd.conf,以下是我的配置:
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
xferlog_std_format=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
user_config_dir=/etc/vsftpd/user_config
local_root=/var/ftp/pub
guest_enable=YES
guest_username=virftp
pam_service_name=vftp
userlist_enable=YES
tcp_wrappers=YES
userlist_deny=YES
第四步編輯pam檔案:vim /etc/pam.d/vftp
session optional pam_keyinit.so force revoke
auth sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
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 sufficient /lib64/security/pam_mysql.so user=virftp passwd=vftpadm host=localhost db=ftpusers table=users usercolumn=name passwdcolumn=passwd crypt=2
account include password-auth
session required pam_loginuid.so
session include password-auth
上面紅色字型是驗證虛擬賬戶用的,其餘為預設vsftpd驗證,local賬戶驗證時用得到。
第五步:添加虛擬賬戶
useradd virftp -s /sbin/nologin -d /home/virftp virftp
chown virftp. -R /home/virftp/
第六步:建立虛擬賬戶設定檔
mkdir /etc/vsftpd/user_config
cd /etc/vsftpd/user_config
建立虛擬賬戶nick:
vim nick
local_root=/home/virftp/
這裡只限制了其根目錄,這裡不定義的一律繼承主設定檔的設定(/etc/vsftp/vsftpd.conf)
cp一個檔案到此目錄來驗證實驗
cp /etc/inittab /home/virftp
service vsftpd restart
最後登陸賬戶nick 密碼redhat 查看結果
實驗總結:開始我在pam檔案中mysql驗證沒用sufficient而用了required,直接導致不能用local賬戶登入。
這裡解釋下兩者的含義,sufficient代表一旦滿足這條規則,則直接退出不往下匹配了,如果不滿足,則往下繼續匹配。
required說明如果不匹配則直接退出,如果匹配則繼續往下匹配。
所以當我用required時,local賬戶不匹配直接退出。