文件共享服务:

应用层,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