-
配置FTP服务器
1.在FTP服务器上安装vsftpd和pam_mysql包
centos6.x中安装 pam_mysql需要先安装,epel源yum -y install epel
安装完成后可用命令 :yum repolist 检查是否安装成功
接下来安装pam_mysql 和vsftpd yum install vsftpd pam_mysql -
创建FTP所需PAM模块认证文件
在/etc/pam.d/目录下创建一个名为vsftpd.mysql存放PAM模块的配置文件 cd /etc/pam.d/ touch vsftpd.mysql vim vsftpd.mysql 添加如下几行: auth required /lib64/security/pam_mysql.so user=root passwd=$root@ipaynow_test host=192.168.103.98 db=ftp_mysql_test table=ftpuser usercolumn=username passwdcolumn=password crypt=0 account required /lib64/security/pam_mysql.so user=root passwd=$root@ipaynow_test host=192.168.103.98 db=ftp_mysql_test table=ftpuser usercolumn=username passwdcolumn=password crypt=0 配置字段说明 • auth 表示认证 • account 验证账号密码正常使用 • required 表示认证要通过 • pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路 径而言,也可以写绝对路径;后面为给此模块传递的参数 • user=vsftpd为登录mysql的用户 • passwd=magedu 登录mysql的的密码 • host=mysqlserver mysql服务器的主机名或ip地址 • db=vsftpd 指定连接msyql的数据库名称 • table=users 指定连接数据库中的表名 • usercolumn=name 当做用户名的字段 • passwdcolumn=password 当做用户名字段的密码 • crypt=2 密码的加密方式为mysql password()函数加密 注意 :crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示 使用mysql password()函数加密,3表示md5加密,4表示sha1 加密
-
建立系统普通用户,用作于虚拟用户映射的用户
1.创建系统用户,配置共享目录
#创建虚拟用户映射的系统用户及对应的目录 useradd -s /sbin/nologin -d /opt/ftpdic ftpuser #修改对应的目录权限,因为FTP共享根目录不能有写权限 chmod 555 /opt/ftpdic #创建可以上传下载的共享目录 mkdir /opt/ftpdic/{upload,pub} #并给vuser用户ACL权限 setfacl –m u:ftpuser:rwx /opt/ftpdic/
修改主配置文件
确认/etc/vsftpd.conf中是否已经启用了以下选项
#支持匿名用户登入
anonymous_enable=YES
#添加下面两项 ,作用是支持虚拟用户映射为某一个系统用户
guest_enable=YES
guest_username=ftpuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql
启动vsftpd服务
#启动服务
service vsftpd start
#开机自动启动
chkconfig vsftpd on
#查看端口打开情况
ss -ntlp|grep :21
-
实现每个虚拟用户具有各自不同的权限
1,修改主配置文件
vim /etc/vsftpd/vsftpd.conf 添加如下选项,作用是让虚拟用户支持独立权限配置文件,可以自定义存放目录。 user_config_dir=/etc/vsftpd/vsftpd_user_conf/
2,在/etc/vsftpd/vusers_config/目录下创建每个虚拟用户的权限配置文件,文件名对应用户名
mkdir /etc/vsftpd/vsftpd_user_conf/ cd /etc/vsftpd/vsftpd_user_conf/ touch wang touch li "注意:虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关 指令进行的。 " 下面的权限都可以添加至文件中,需要什么权限添加什么权限 #是否支持上传功能 anon_upload_enable={YES|NO} #是否支持创建文件功能 anon_mkdir_write_enable={YES|NO} #是否支持删除文件功能 anon_other_write_enable={YES|NO} #指定虚拟账户登入的共享目录 //只读权限可以使共享目录的子目录,即虚拟用户家目录 local_root=/opt/ftpdic/upload1/ 例如:让wang用户可读/opt/ftpdic/upload/ vim wang local_root=/opt/ftpdic/upload1/
-
程序实现添加用户后自动创建虚拟用户家目录,并赋只读权限
//单个参数 public static boolean execute(String shellFile, String param) { ProcessBuilder pb = new ProcessBuilder(shellFile, param.trim()); //pb.directory(new File(CASPERJS_FILE_DIR)); int runningStatus = 0; String s = null; try { Process p = pb.start(); BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); while ((s = stdInput.readLine()) != null) { log.info(s); } while ((s = stdError.readLine()) != null) { log.info(s); } try { runningStatus = p.waitFor(); return runningStatus == 0; } catch (InterruptedException e) { log.error(e.getMessage(),e); return false; } } catch (IOException e) { log.error(e.getMessage(),e); return false; } }
通过java执行liunx脚本的方式在 /opt/ftpdic/ 下创建一个与用户的家目录,并在/etc/vsftpd/vsftpd_user_conf/ 下创建一个该用户的配置文件。脚本如下:
#!/bin/bash echo "当前执行的bash shell为:${0}" mch_id=${1} if [${1} == '']; then echo "请输入商户号" exit fi echo "传入的商户号为:${mch_id}" ftp_dir=/opt/ftpdic echo "当前目录为:${ftp_dir}" echo "在当前目录创建以商户号命名的文件夹" mkdir "${ftp_dir}/${mch_id}" ftp_user_conf_dir=/etc/vsftpd/vsftpd_user_conf echo "创建用户配置 ${mch_id}" echo "local_root=/opt/ftpdic/${mch_id}/ anon_upload_enable=YES" > ${ftp_user_conf_dir}/${mch_id}
至此,就完成了