前些日子因为工作需要需要写一个ftp服务器,因为是第一次所以跳了不少坑,废话不多说,下面是正文。
系统:archlinux 64位
其实写一个ftp服务器也就是把vsftpd的配置文件按照你的需求重新编写一下,不需要你了解太多的东西,有一定linux使用经验的人都能了解其中的含义(配置文件中的条例)。
ftp服务器有主动模式和被动模式
被动模式
客户—————————————Login————————————————>ftp服务器 port21
ftp服务器 port21—————————告知端口号(随机的)———————————————>客户
客户———————————数据传输——————————————>ftp服务器(之前告知的port)
主动模式
客户————————————Login——————————————————>ftp服务器 port21
客户————————————发送 随机的port > 1024(客)————————>ftp服务器 port21
ftp服务器(port20)————————————数据传输————————>客户(之前发送的port)
———————————————————————————————————————————————————————————
配置vsftpd:
vsftpd的配置文件为/etc/vsftpd.conf,先备份再配置
基本配置文件
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- local_umask=022
- dirmessage_enable=YES
- xferlog_enable=YES
- connect_from_port_20=YES
- xferlog_std_format=YES
- listen=NO
- listen_ipv6=YES
- pam_service_name=vsftpd
- userlist_enable=YES
- tcp_wrappers=NO
这些东西网上一大堆,pam_service_name=vsftpd,这里的vsftpd是/etc/pam.d文件夹中的配置文件
下面说虚拟用户
虚拟用户需要一个宿主用户,虚拟用户的总体权限集中寄托于虚拟宿主用户,虚拟宿主用户本身的权限影响着虚拟用户
useradd -s /sbin/nologin overlord
因为vsftpd服务的宿主用户是root,root的权限太大了,所以建立一个新的宿主用户
useradd -s /sbin/nologin vsftp
又因为vsftpd服务的宿主用户未手动建立的vsftp,所以要给予该用户日志写入权
建立虚拟用户名单文件
vim /etc/vsftpd/vusers
在文件中写入用户名、密码单行用户名双行密码,一行一个
生成虚拟用户数据文件
db_load -T -t hash -f /etc/vsftpd/vusers /etc/vsftpd/vusers.db
编辑pam.d中的vsftpd文件
vim /etc/pam.d/vsftpd
注释掉之前的内容
写入 auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/vusers
创建虚拟用户的主路径
mkdir /opt/vsftp
mkdir /opt/vsftp/bigmao
虚拟配置:
- guest_enable=YES
- guest_username=overlord #overlord为虚拟宿主用户
- allow_writeable_chroot=YES
- user_config_dir=/etc/vsftpd/vusers_profile #虚拟用户的个人配置文件
- pam_service_name=vsftpd
- userlist_enable=YES
- chown_uploads=NO #禁止上传文件更改宿主
- user_deny=YES #启用黑名单
- nopriv_user=vsftp
- async_abor_enable=YES
- ascii_upload_enable=YES
- ascii_download_enable=YES
- chroot_list_enable=NO
- ls_recurse_enable=NO
- virtual_use_local_privs=YES
- chroot_local_user=YES
虚拟个人用户配置
- anonymous_enable=NO
- write_enable=YES
- local_umask=022
- anon_upload_enable=NO
- anon_mkdir_write_enable=NO
- idle_session_timeout=600
- data_connection_timeout=120
- max_clients=10
- max_per_ip=5
- local_max_rate=50000
说一下心得,遇到问题最好还是看日志文件,知道问题出在哪才能对症下药