环境
10.0.2.107 centos7.9 安装mariadb
10.0.2.108 centos7.9 安装vsftpd和pam_mysql
关闭selinux,关闭防火墙
两台服务器都要做
永久关闭selinux 重启电脑生效
sed -i '/^SELINUX/s/=.*/=disabled/' /etc/selinux/config
禁止防火墙开机启动
systemctl disable firewalld
systemctl stop firewalld
安装配置mariadb
yum install -y mariadb-server
启动
systemctl start mariadb
设置开机自动启动
systemctl enable mariadb
安全初始化数据库
[root@localhost ~]# mysql_secure_installation
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Set root password? [Y/n] y 设置root密码
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
Remove anonymous users? [Y/n] y 移除匿名用户
... Success!
Disallow root login remotely? [Y/n] n 不禁用root远程登录
... skipping.
Remove test database and access to it? [Y/n] n 不删除test库
... skipping.
Reload privilege tables now? [Y/n] y 刷新权限
... Success!
Thanks for using MariaDB!
[root@localhost ~]#
登录并创建数据
mysql -uroot -h127.0.0.1 -ppassword
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'password';
CREATE DATABASE vsftpdb;
GRANT SELECT ON vsftpdb.* TO 'ftpuser'@'10.0.2.108' IDENTIFIED BY 'ftpuserpwd';
use vsftpdb;
CREATE TABLE users (id int AUTO_INCREMENT NOT NULL PRIMARY KEY,name char(20) BINARY NOT NULL,password char(48) BINARY NOT NULL);
INSERT INTO users(name,password) VALUES ('tom',password('abc123'));
INSERT INTO users(name,password) VALUES ('jerry',password('abc123'));
INSERT INTO users(name,password) VALUES ('spike',password('abc123'));
下载pam_mysql源码
编译安装pam_mysql
由于centos7 epel源不提供pam_mysql,所以我们要自己编译安装
安装依赖程序
yum install -y mariadb-devel pam-devel
tar -zxvf pam_mysql-0.7RC1.tar.gz
./configure --with-pam-mods-dir=/usr/lib64/security/
make && make install
安装配置vsftpd
yum install -y vsftpd
创建pam认证文件
vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=ftpuser passwd=ftpuserpwd host=10.0.2.107 db=vsftpdb table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=ftpuser passwd=ftpuserpwd host=10.0.2.107 db=vsftpdb table=users usercolumn=name passwdcolumn=password crypt=2
创建虚拟用户映射系统用户对应的目录
useradd -s /sbin/nologin -d /var/ftpdir vuser
chmod -R 755 /var/ftpdir
配置/etc/vsftpd/vsftpd.conf
anonymous_enable=NO #禁止匿名用户登录
#匿名用户上传,写入,其他权限,保持注释,因为这些权限在/etc/vsftpd/vuser.d/这个目录下每个用户单独提供
#anon_upload_enable=YES
#anon_mkdir_write_enable=YES
#anon_other_write_enable=YES
anon_umask=073 用户上传文件权限为604,文件夹为704
chroot_local_user=YES 禁锢用户家目录
allow_writeable_chroot=YES 禁锢用户家目录后如果家目录有写入权限就禁止等陆,所以加上这个选项在家目录有写入权限的时候允许登录
reverse_lookup_enable=NO #ftp客户端登录的时候很慢,添加这个参数解决
user_config_dir=/etc/vsftpd/vuser.d #为每一用户提供上传下载删除权限配置的文件夹
pam_service_name=vsftpd.mysql #pam认证的配置文件
guest_enable=YES #开启虚拟用户模式
guest_username=vuser #指定虚拟用户对应的系统用户
配置虚拟用户拥有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
mkdir /etc/vsftpd/vuser.d
touch tom
touch jerry
tom 可读可写可删除
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
jerry 可读可写不可删
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
spike 只读权限
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
启动FTP
systemctl start vsftpd
开机自动启动
systemctl enable vsftpd
测试
tom用户
lftp tom@10.0.2.108:/> put ifcfg-eth0 上传ok
137 bytes transferred
lftp tom@10.0.2.108:/> mv ifcfg-eth0 ifcfg-eth0.bak 重命名ok
rename successful
lftp tom@10.0.2.108:/> rm ifcfg-eth0.bak 删除ok
rm ok, `ifcfg-eth0.bak' removed
lftp tom@10.0.2.108:/> get 子网掩码计算器.exe 下载OK
54272 bytes transferred
jerry用户
lftp jerry@10.0.2.108:/> put install.log 删除ok
8901 bytes transferred
lftp jerry@10.0.2.108:/> get 丢包测试.exe 下载ok
209920 bytes transferred
lftp jerry@10.0.2.108:/> mv install.log install.log.bak 重命名拒绝
Access failed: 550 Permission denied. (install.log)
lftp jerry@10.0.2.108:/> rm install.log
rm: Access failed: 550 Permission denied. (install.log) 删除拒绝
spike用户
lftp spike@10.0.2.108:/> put fstab
put: Access failed: 550 Permission denied. (fstab) 上传拒绝
lftp spike@10.0.2.108:/> rm user.csv
rm: Access failed: 550 Permission denied. (user.csv) 删除拒绝
lftp spike@10.0.2.108:/> get readme.txt 下载OK
233 bytes transferred