架设FTP服务器有好几次了,以前搭建好以后,没有记录操作的详细步骤,过阵时间又忘记了。此次架设FTP服务的需求要点: vsftpd mysql 虚拟用户 虚拟目录 只读用户 只写用户 读写用户。
1.安装软件:
sudo apt-get install vsftpd libpam-mysql mysql-server安装MySQL过程中会询问MYSQL的root密码,输入两遍,以后程序自动完成安装。
2.测试VSFTPD:
修改vsftpd.conf激活匿名用户。
sudo vim /etc/vsftpd.conf编辑 anonymous_enable=YES , 保存; 执行:
sudo /etc/init.d/vsftpd restart && ps -e | grep vsftpd重启服务,并确保程序已启动。如果命令有输出进程号,证明VSFTPD已启动。匿名用户地俄权限为系统本地用户ftp的权限。
此时使用匿名账户登录,检测vsftpd服务和局域网络配置是否正常。
3.建立目录结构:
sudo mkdir /ftp sudo mkdir /ftp/upload sudo mkdir /ftp/pub sudo mkdir /ftp/test其中/ftp 为FTP文件系统根目录,下面有存放只读数据的pub目录,存放上传数据的upload目录,用户test个人目录。
4.创建VSFTPD虚拟用户,用户名暂定为vsftpd
sudo useradd -d /ftp -s /bin/false vsftpd
5.创建用户数据库:
mysql -uroot -p输入密码,进入,然后创建数据库和表,并赋予权限:
create database company_passwd;
use company_passwd;
create table vsftpd ( -> id int AUTO_INCREMENT NOT NULL, -> name char(20) NOT NULL, -> passwd char(50) NOT NULL, -> primary key(id) -> );
describe vsftpd;
insert into vsftpd (name,passwd) values ('test',password'123456');
insert into vsftpd (name,passwd) values ('pub',password'123456');
insert into vsftpd (name,passwd) values ('upload',password'123456');
grant select on company.vsftpd to vsftpd@localhost identified by 'aaa';
quit6.测试vsftpd用户对数据库能否访问:
mysql -uvsftpd -paaa
use company_passwd;
select * from vsftpd;如果看到test用户,表明正常。
sudo mv /etc/pam.d/vsftpd{,-bak} sudo vim /etc/pam.d/vsftpd先清空内容,然后输入下面代码:
auth required pam_mysql.so user=vsftpd passwd=aaa host=localhost db=company_passwd table=vsftpd usercolumn=name passwdcolumn=passwd crypt=2 account required pam_mysql.so user=vsftpd passwd=aaa host=localhost db=company_passwd table=vsftpd usercolumn=name passwdcolumn=passwd crypt=28.备份并更新VSFTPD配置文件:
sudo mv /etc/vsftpd.conf{,-bak} sudo vim /etc/vsftpd.conf清空所有内容,输入:
# listen=YES anonymous_enable=NO local_enable=YES write_enable=NO guest_enable=YES guest_username=vsftpd local_umask=022 connect_from_port_20=YES dirmessage_enable=YES ftpd_banner=Welcome to Embedded Lab FTP Server! nopriv_user=vsftpd chroot_local_user=YES #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd.chroot_list user_config_dir=/etc/vsftpd_user_conf local_root=/ftp/$USER user_sub_token=$USER virtual_use_local_privs=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/vsftpd.pem xferlog_enable=YES xferlog_file=/var/log/vsftpd.log data_connection_timeout=15保存。
9.重启VSFTP服务,并确保程序已运行。
sudo /etc/init.d/vsftpd restart && ps -e | grep vsftpd
10.权限设定:
sudo chown vsftpd.nogroup /ftp
A. 只读用户pub,只有对/ftp/pub的读权限。
sudo chown root.root /ftp/pub
B.上传用户upload,只对upload目录有写权限,无读权限。
sudo chown root.root /ftp/upload
sudo vim /etc/vsftpd_user_conf/upload输入:
# write_enable=YES anon_upload_enable=YES chown_uploads=YES download_enable=NOC.个人用户,对test目录有读写权限,对upload目录只读,对pub只读。
sudo mkdir /ftp/test/pub sudo mkdir /ftp/test/upload sudo cd /ftp/test sudo mount --bind /ftp/pub pub sudo mount --bind /ftp/upload upload sudo chown root.root pub sudo chown root.root upload sudo chown vsftpd.nogroup /ftp/test编辑test用户私人vsftpd配置:
sudo vim /etc/vsftpd_user_conf/test输入:
# write_enable=YES
Interesting Tips:
1.使用local_enable=YES可以开启本地用户,权限亦为本地用户权限。
2.使用guest_enable=YES可以开启虚拟用户,之后所有虚拟用户(包括使用PAM机制允许的本地用户)的权限皆为虚拟用户的权限。故而,如果希望开启虚拟用户,同时保留本地用户仍有本地用户的权限,可以在各个本地用户的用户私有配置里面,添加guest_enable=NO,刷新主配置文件中得设置。
3.如果匿名用户开启,其权限为本地用户ftp的权限。同时匿名用户不受local_root和user_sub_token的影响。
4.虚拟用户默认是同匿名用户拥有一样的权限。若要改变这个,则virtual_use_local_privs=YES. 让虚拟用户拥有和本地用户一样的权限,即本地用户拥有读写权限的文件,虚拟用户也照样拥有。对于匿名的上传文件的属性(属主,属组)可以通过chown_uploads和chown_username重新赋予。