要求 :完成vsftpd配置,
(1) 禁錮系統用戶于家目錄;
(2) 基于mysql進行用戶認證;
(3) 不同的虛擬用戶擁有不同的權限設定.
解答:
(1) 首先安裝需要的系統環境和軟件
yum groupinstall -y "Development Tools" yum install -y mariadb-server vsftpd mariadb-devel pam-devel
(2) 用戶的驗證如果要基于mysql, 需要借助pam, 將vsftpd的認證功能托管給pam. 需要安裝連接pam和mysql的模塊文件pam_mysql, 下載獲取pam_mysql的壓縮文件,解壓,編譯安裝
tar xf pam_mysql-0.7RC1.tar.gz #解壓文件 cd pam_mysql-0.7RC1 #切換工作目錄 ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security make && make install
(3)準備數據庫文件
MariaDB [(none)]> CREATE DATABASE vsftpd; #首先創建需要的數據庫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));# 添加表格users, 存儲授權用戶的認證信息 MariaDB [(none)]> INSERT INTO vsftpd.users (name,password) VALUES ('tom',PASSWORD('mageedu')), ('jerry',PASSWORD('mageedu')); #在users表中,插入兩個用戶 MariaDB [(none)]> GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'mageedu';#給vsftpd授權 MariaDB [(none)]> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'mageedu'; MariaDB [(none)]> FLUSH PRIVILEGES;
(4)創建和配置vsftpd通過pam_mysql認證的配置文件
vsftpd通過pam_mysql進行認證的配置文件在/etc/pam.d/目錄下, 創建一個vsftpd.mysql的配置文件, 添加如下選項:
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu 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=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
上述文件中:
user : 為連接mysql服務器的用戶名, 此用戶要有權限訪問認證vsftpd服務的數據庫;
passwd : 上面用戶的密碼;
host : mysql服務器主機的地址, 此處為本機地址;
db : 認證vsftpd富翁2u的數據庫名稱;
table : 存放了用戶和密碼的表;
usercolumn : 用戶名對應的字段;
passwdcolumn : 密碼對應的字段;
crypt : 密碼加密的方法.
(5)準備匿名用戶映射的系統用戶賬號
mkdir /ftproot # 創建映射的系統賬號的家目錄 useradd -d /ftproot vsuser #創建用戶 mkdir /ftproot/{pub,upload} #創建工作目錄 setfacl -m u:vuser:rwx /ftproot/upload #為vuser用戶添加對目錄的權限
(6)配置vsftpd的主機配置文件vsftpd.conf
修改配置文件,如下:
anonymous_enable=NO #禁止匿名用戶登錄 pam_service_name=vsftpd.mysql guest_enable=YES #開始來賓用戶登錄 guest_username=vsuser #設置來賓用戶名 user_config_dir=/etc/vsftpd/users_conf #每個來賓用戶的權限設置
配置每個匿名來賓用戶的單獨權限設定:
mkdir /etc/vsftpd/users_conf
設定tom的權限
vim /etc/vsftpd/users_conf/tom #添加下面的選項 anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
設定jerry的權限
vim /etc/vsftpd/users_conf/tom #添加下面的選項, 設定jerry只能上傳 anon_upload_enable=YES
(7) 禁錮系統用戶于自己的家目錄
啟用如下選項
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
默認chroot_list文件是不存在的,需要手動創建
touch /etc/vsftpd/chroot_list awk -F: '$3<1000{print $1}' /etc/passwd > /etc/vsftpd/chroot_list
(8) 重啟服務, systemctl restart vsftpd.service, 在另外一臺主機上測試
[root@localhost ~]# lftp -u tom 10.1.52.44 Password: lftp tom@10.1.52.44:~> ls drwxr-xr-x 2 0 0 6 Oct 13 19:25 pub drwxrwxr-x 2 0 0 6 Oct 13 19:25 upload lftp tom@10.1.52.44:/> cd upload/ lftp tom@10.1.52.44:/upload> put /etc/issue 79 bytes transferred lftp tom@10.1.52.44:/upload> ls -rw------- 1 1000 1000 79 Oct 13 19:46 issue lftp tom@10.1.52.44:/upload> rm issue rm ok, `issue' removed lftp tom@10.1.52.44:/upload> ls lftp tom@10.1.52.44:/upload>
測試tom用戶成功
然后測試ben用戶, ben只有上傳功能
[root@localhost ~]# lftp -u ben 10.1.52.44 Password: lftp ben@10.1.52.44:~> ls drwxr-xr-x 2 0 0 6 Oct 13 19:25 pub drwxrwxr-x 2 0 0 6 Oct 13 19:46 upload lftp ben@10.1.52.44:/> cd upload/ lftp ben@10.1.52.44:/upload> put /etc/issue 79 bytes transferred lftp ben@10.1.52.44:/upload> ls -rw------- 1 1000 1000 79 Oct 13 19:49 issue lftp ben@10.1.52.44:/upload> rm issue rm: Access failed: 550 Permission denied. (issue) lftp ben@10.1.52.44:/upload>
禁錮系統用戶于自己的家目錄, 且沒有任何權限
[root@localhost ~]# lftp -u root 10.1.52.44 Password: lftp root@10.1.52.44:~> ls ls: Login failed: 530 Permission denied. lftp root@10.1.52.44:~> pwd ftp://root@10.1.52.44 lftp root@10.1.52.44:~>
原創文章,作者:black_fish,如若轉載,請注明出處:http://www.www58058.com/53475