文件共享服务:
应用层,ftp
NFS:Network File System(RPC远程过程调用)
Samba:CIFS/SMB
FTP:命令连接和数据连接
命令连接端口21/tcp,是主动连接
数据连接:主动模式(20/tcp)和被动模式(端口随机)
数据传输模式:二进制和文本。自动选择哪种传输方式
服务器端程序:wu-ftpd、vsftpd、proftpd、pureftpd、serv-u(windows)
客户端程序:ftp、lftp、gftpd、flashfxp、cuteftp、filezillo
vsftp默认安装情况下配置文件在/etc/vsftpd,服务脚本在/etc/init.d/vsftpd,主程序/usr/sbin/vsftpd
基于PAM实现用户认证/etc/pam.d/*,/lib/security/* 支持虚拟用户
vsftpd.conf选项
#write_enable=YES 为允许用户有写的权限
#dirmessage_enable=YES 此目录存放文件的信息
#当用户进入某个目录时,如果该目录存在.message文件,则会显示该文件的内容,通常用来告知
#nopriv_user=ftpsecure
#指定vsftpd以何帐号提供FTP服务,默认值是nobody。这样即使被cracker入侵vsftpd,cracker也仅能取得nobody的权限。
#ls_recurse_enable=YES
#ls_recurse_enable默认值为YES,代表禁用ls -Rl /,因为这个指令会耗费大量系统资源。
#no_anon_password=NO
#no_anon_password默认值为NO,代表anonymous不用输入密码就可登录FTP服务器。
#hide_ids=YES
#默认值为NO,若设置为YES,则登录FTP服务器会发现所有文件及目录其所有者及群组均为ftp
####################################################################
# Local FTP user Settings
# 有关本机用户的FTP相关设置(/etc/passwd中普通用户帐号)
####################################################################
#local_enable=YES
#local_enable默认值为NO,代表/etc/passwd中普通用户不能使用FTP服务。
#local_umask=022
#local-umask的意义是Local User上传文件时,文件权限会使用所指定的umask加以运算,默认值为077
#chroot_local_user=YES
#chroot_local_user的用途是将用户的HOME目录变为其FTP登录后的根目录,如此一来,所有Local User
#便不能离开起home目录。其默认值为NO。
#chroot_list_enable=YES
# chroot_list_file=/etc/vsftpd.chroot_list
#若不想利用chroot_local_user=YES把所有本地用户(Local User)都限制在其home目录,可利用chroot_list_enable=YES设定值,将某些帐号限制在home目录下。当chroot_list_enable=YES时,登录用户名字若在/etc/vsftpd.chroot_list内,则会启用chroot机制,将这个用户限制在其home目录下。
#chroot_list_enable默认值是NO,chroot_list_file默认值为/etc/vsftpd.chroot_list
#local_max_rate=7200
#local_max_rate用来限制Local user每秒的最高传输速度,其单位是bytes/sec,默认值为0,就是没有限制。
################################################################
# Anonymous用户的相关配置
################################################################
#anonymous_enable=YES
#anonymous_enable=YES,允许用户可用匿名(anonymous)或ftp帐号,不用密码就可登录FTP服务器,默认值是YES。
#anon_world_readable_only=YES
#anon_world_readable_only=YES,用来限制匿名(anonymous)用户只能下载有开放Other可以write的文件,其默认值为YES。
#anon_upload_enable=YES
#anon_upload_enable用来限制匿名(anonymous)用户可否上传文件,默认值为NO。
#anon_umask=022
#anon_umask的意义是匿名(anonymous)用户上传文件时,文件权限会用所指定的umask加以运算,默认值为077。
#anon_mkdir_write_enable=YES
#anon_mkdir_write_enable允不允许anonymous用户建立目录,其默认值为NO。
#anon_other_write_enable=YES
#所否允许anonymous用户有write的权限,不过记得通过anon_other_write_enable的限制后,
#还得看打算写的目录或文件的权限允不允许anonymous用户write。
#chown_uploads=YES
#chown_username=whoever
#chown_uploads用户指定anonymous帐号上传的文件是否要改变其所有者。
#chown_uploads默认值为NO,chown_username用来指定新的所有者。
#anon_max_rate=7200
#anon_max_rate用来限制anonymous用户每秒的最高传输速度,
#其单位是bytes/sec,默认值是0,就是没有限制。
###############################################################
# Log Settings
# 有关FTP日志的相关规定
###############################################################
#syslog_enable=YES
#syslog_enable=YES会将本来应记录在/var/log/vsftpd.log的信息,转而传给syslogd daemon,
#由syslogd的配置文件决定存于何位置。syslog_enable默认值为NO。
#log_ftp_protocol=YES
#log_ftp_protocol=YES会将所有FTP有关的请求和回应全部记录,其默认值为NO。
#xferlog_enable=YES
#xferlog_enable=YES会详细记录有关上传/下载的信息,其默认值为NO。
#vsftpd_log_file=/var/log/vsftpd.log
#vsftpd_log_file可用来指定vsftpd的log文件位置。
#xferlog_std_format=YES
#xferlog_std_format默认值为NO,若设定为YES,则log内容会采用标准xferlog格式(wu-ftpd日志文件所采用的格式)。
#xferlog_file=/var/log/xferlog
#xferlog_file用来指定wu-ftpd格式的log的存放位置。
#dual_log_enable=YES
#dual_log_enable默认值为NO,若设定为YES,则/var/log/xferlog和/var/log/vsftpd.log均会记录FTP相关日志。
#setproctitle_enable=YES
#setproctitle_enable默认值为NO,若设定为YES,则查看系统进程状态时,会列出ftp连接的状态。
#例如执行 ps -ef | grep vsftp 可看到谁正在连接。
#nobody 4424 ... vsftpd: 127.0.0.1: not logged in
################################################################
# Transfer Settings
# 传输文件的相关规定
################################################################
#connect_from_port_20=YES
#connect_from_port_20=YES代表主动模式的数据连接是用端口20,其默认值为NO。
#idle_session_timeout=600
#idle_session_timeout设定FTP客户端多久未执行任何ftp指令操作,便将其断线,默认值为300秒。
#data_connection_timeout=120
#允许数据传输时idle的秒数,默认值是300秒。
#async_abor_enable=YES
#async_abor_enable的默认值为NO,必须要FTP客户端有支持async_abort的机制才可以打开。
#ascii_upload_enable=YES
#ascii_upload_enable的默认值为NO,若设为YES则用户可用ascii方式上传数据,不过若启用此参数可能会
#导致Dos攻击,所以采用默认值。
#ascii_download_enable=YES
#同上,ascii_download_enable默认值为NO,若设为YES则用户可用ascii方式下载数据,不过若启用此参数可能会
#导致Dos攻击,所以采用默认值。
#pasv_enable=NO
#pasv_enable默认值为YES,若设为NO,FTP客户端则无法使用被动模式FTP。
#pam_service_name=vsftpd
#vsftpd PAM模块的名称,起存放在/etc/pam.d/目录。
#listen=YES
#listen默认值为NO,若设定为YES,则vsftpd会用standalone方式启动。
配置vsftpd支持证书
cd /etc/pki/CA
mkdir certs newcerts crl
touch index.txt serial
echo 01 > serial
(umask 077;openssl genrsa -out private/cakey.pem 2048)
openssl req -new -x509 -key private/cakey.pem -out cakey.key -days 3650
mkdir /etc/vsftpd/ssl
cd /etc/vsftpd/ssl/
(umask 077;openss genrsa -out vsftpd.key 2048)
openssl req -new -key vsftpd.key -out vsftpd.csr -days 3650
openssl ca -in vsftpd.csr -out vsftpd.crt
vim /etc/vsftpd/vsftpd.conf 修改配置文件,添加如下几行
ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv3=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.key
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.crt
service vsftpd restart
vsftpd利用pam_mysql实现mysql虚拟用户认证
yum groupinstall "Development Libraries" 安装开发库
yum install mysql-server mysql-devel -y
wget -b http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1
./configure --with-mysql=/usr --with-openssl
make
make install
创建虚拟用户帐号
mysql>create database vsftpd
mysql>user vsftpd
mysql>grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql>grant select on vsftpd.* to [email protected] identified by '123456';
mysql>flush privileges
mysql>create table users;
mysql>create table users(id int auto_increment not null,name char(20) not null,password char(20) not null,primary key(id));
mysql>insert into users(name,password) values('a','123456');
mysql>insert into users(name,password) values('b','123456');
vim /etc/pam.d/vsftpd.mysql #添加如下两行
auth required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
#建立虚拟用户映射的系统用户及对应的目录
useradd -s /sbin/nologin -d /var/ftproot vuser
chmod go+rw /var/ftproot
修改vsftpd.conf,确保匿名用户的访问
vim/etc/vsftpd/vsftpd.conf
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES
末尾添加:
guest_enable=YES
guest_username=vuser
pam_service_name=/etc/pam.d/vsftpd.mysql
service vsftpd start
配置虚拟用户具有不同的访问权限
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir 可以是任意未使用的目录
mkdir -pv /etc/vsftpd/vuser_dir
cd /etc/vsftpd/vuser_dir
touch a b
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让a用户具有上传文件的权限,可以修改/etc/vsftpd/vusers/a文件,在里面添加如下选项即可。
anon_upload_enable=YES
#anon_write_enable=YES