vsftpd 安装与配置,ftp/sftp
应用层协议ftp监听在tcp协议的21号端口,ftp的连接模式分为命令连接和数据连接两种,命令连接为管理类连接,只传输数据,数据连接按需传送及时关闭。两种连接方式都可以打开多个。上传数据或下载数据的端口是随机的,是50000+端口。ftp是明文传输。
安装
安装vsftpd:
yum -y install vsftpd ftp
vsftpd是服务端,ftp是客户端,使用rpm -ql vsftpd可以查看安装信息,/usr/sbin/vsftpd是主程序文件。匿名用户默认目录,也是共享文件资源目录:/var/ftp/pub。
vsftpd的三种用户模式:
1、匿名用户:系统自动映射为ftp用户,共享资源位置为/var/ftp目录,使用finger ftp命令即可查看到该用户的信息,该用户实际也是linux用户。
2、系统用户:用户默认登陆的位置为linux系统的家目录。
3、虚拟用户:给虚拟用户指定映射为一个系统用户,访问的为这个用户的家目录。虚拟用户仅用于访问特定服务中的资源。
使用
windows客户端登陆ftp:
一般windows都会有ftp客户端,使用cmd工具即可登录。ftp默认登录的是默认匿名用户anonymous或ftp,密码为空,登录后使用ls命令可查看目录下的文件,使用help命令可查看命令列表。
C:\Users\thinkpad>ftp 192.168.96.128 连接到 192.168.96.128。 220 (vsFTPd 2.2.2) 200 Always in UTF8 mode. 用户(192.168.96.128:(none)): ftp #账户为匿名账户anonymous或ftp 331 Please specify the password. 密码: #密码为空 230 Login successful.
客户端工具lftp:支持命令补全
安装:
yum installl lftp -y
登陆:
lftp qiyang@192.168.96.128 lftp -u qiyang 192.168.96.128
lftpget:调用lftp直接下载文件。还有其他工具,axel、wget、curl
客户端常用命令:tab命令提示
lcd 切换本地目录
cd 切换服务器目录
get 下载命令
mget 一次下载多个文件
put 上传文件
mput 一次上传多个文件
mkdir 创建目录
rename 修改文件名
查看更多命令的使用方法使用: help command,如: help ls
vsftpd.conf的配置
主配置文件:重启生效
/etc/vsftpd/vsftpd.conf
用户设置:
anonymous_enable=YES #启用匿名用户 local_enable=YES #允许本地用户,就是linux系统上的用户
匿名用户上传文件:
匿名用户目录默认位置:
/var/ftp/pub/
开启匿名用户上传权限:
配置文件中:开启匿名上传
anon_upload_enable=YES
设置facl权限:
mkdir /var/ftp/upload setfacl -m ftp:rwx upload
切换本地目录:客户端使用匿名用户anonymous登录
lcd /etc
切换服务器端目录:
cd upload
上传文件:
put fstab
匿名用户创建文件:
anon_mkdir_write_enable=YES #允许匿名用户创建目录
匿名用户删除目录:客户端使用delete filename删除目录
anon_other_write_enable=YES
本地用户写权限:本地用户的写写权限
write_enable=YES
显示欢迎信息:
dirmessage_enable=YES,切换到某个目录是否显示欢迎信息,欢迎信息只要在那个目录下创建 .message隐藏文件就可以了。
上传后的文件权限:用户上传文件后文件的默认权限。
local_umask=022
锁定所有用户家目录:
chroot_local_user=YES allow_writeable_chroot=YES
将本地用户锁定在家目录中。在2.3.5版本之前只要开启第一项即可,在此之后的版本都要开启第二项,或者去掉用户家目录的写权限chmod a-w /home/username,a表示所有用户。两种方式选一种即可。因为2.3.5之后要求跟目录默认不可写。而allow_writeable_chroot这一项定义了根目录可写。
锁定部分用户家目录:
chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list allow_writeable_chroot=YES
有时候某些用户需要锁定家目录,有些则不需要。这个功能是将指定用户的家目录锁定,这两个选项第一个选项是开启锁定家目录功能,第二个功能是指定要锁定用户的列表,在这个列表里面的用户都会被锁定家目录。第三项是允许根目录可写。
开启日志:
xferlog_enable=YES xferlog_file=/var/log/xferlog xferlog_std_format=YES
第一项是否打开传输日志,日志信息包括上传下载等信息。第二项指定日志文件,日志文件默认位置在 /var/log/xferlog,第三项表示是否启用标准格式。
上传文件的属主:
chown_uploads=YES chown_username=whoever
第一项表示上传后文件的属主是否改变,第二项表示把属主改为谁的,后面的值为用户名。
会话控制:
idle_session_timeout=600 data_connection_timeout=120
第一项是空闲超时时长,第二项是数据连接超时时长,如下载数据断开又没有任何操作时的超时时长,超过这个时间就会断开连接。
传输编码:
ascii_upload_enable=YES #文本模式上传文件,强制性,不建议开启 ascii_download_enable=YES #文本模式下载文件,强制性,不建议开启
使用pam用户认证:
pam_service_name=vsftpd,pam是linux系统内置共用的用户认证模块,vsftpd默认使用pam功能实现用户认证。每个使用pam的应用都要提供一个单独为自己服务的配置文件。这个参数的后面就是这个配置文件的名称。pam配置文件的目录在/etc/pam.d/下,这个目录下有一个vsftpd的文件。这个文件配置了vsftpd的认证方式。
黑名单功能:
所有写在/etc/vsftpd/ftpusers文件中的所有用户都禁止登陆,这个文件的路径是在/etc/pam.d/vsftpd文件中定义的。这个是基于pam的功能实现的,下面有一个vsftpd自己的访问控制功能。
访问控制:
userlist_enable=YES userlist_deny=YES
第一项表示是否开启访问控制功能,第二项表示这个访问控制的类型,userlist deny表示是否拒绝访问,当值等于YES时就是表示拒绝,为NO时表示不拒绝。这个名单文件为/etc/vsftpd/user_list文件,相当于黑名单或白名单。
连接限制:
max_clients= # 最大并发连接量 max_per_ip= # 每个ip最大连接数 anno_max_rate #匿名用户最大传输速率,单位字节/秒 local_max_rate #本地用户最大传输速率
其他:
listen=YES #是否定义为独立守护进程
虚拟用户:
虚拟用户被映射为某个系统用户,但是虚拟用户可以有不同的访问权限。虚拟用户的账户的存储方式有两种。
第一种为通过文件形式存储,将一个文件的第一行写上用户名第二行写上用户密码,如此格式的文件,再将文件编码为hash格式。
第二种方式是将行号和密码存放在关系型数据库中,常用的为mysql,但是vsftpd依赖于pam实现认证,这就需要pam能够访问mysql数据库,此时就需要用到pam_mysql模块了,默认情况下pam没有此模块,需要安装第三方模块。
安装pam_mysql模块需要epel yum源,yum install pam_mysql。
配置文件:
anonymous_enable=YES 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=YES # 修改目录权限,权限755,777访问不了 local_root=/home/disk2 chroot_local_user=YES anon_root=/home/disk2
匿名用户上传配置:
cat /etc/vsftpd/vsftpd.conf anonymous_enable=YES anon_upload_enable=YES anon_other_write_enable=YES anon_mkdir_write_enable=YES # 匿名用户不提示密码 no_anon_password=YES # 设置匿名用户为ftp,默认为anonymous ftp_username=ftp 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=YES
设置目录权限:直接设置777
chmod -R 777 /var/ftp/pub
sftp
创建用户:
mkdir /data/user1 -pv # 以root用户创建 useradd user1 -s /sbin/nologin -d /data/user1/user1 # /data/user1/这一段属主必须为root,后面要做chroot, /data/user1/user1这级目录才是用户的家目录
配置只允许sftp登陆,不允许ssh:
vim /etc/ssh/sshd_config PasswordAuthentication no # 在全局处关闭密码登录,关闭后只能使用秘钥方式登录(ftp用户在User模块中打开密码登录) ChrootDirectory none # 公共的关掉 Subsystem sftp internal-sftp # internal-sftp表示使用内部的sftp子系统来处理sftp请求,可提高安全性 Match User user1 PasswordAuthentication yes X11Forwarding no AllowTcpForwarding no PermitTTY no ForceCommand internal-sftp ChrootDirectory /data/user1/ # 指定到/data/user1/而不是/data/user1/user1,有些客户端用户登录的时候默认是到/data/user1/也就是用户的根目录,里面还有一个user1就是用户端的home目录 Match User user2 #使用User模块对用户user2进行详细配置 PasswordAuthentication yes # 针对user2用户打开密码登录 X11Forwarding no #禁止X11转发,防止用户在通过SSH连接后使用图形界面程序 AllowTcpForwarding no #禁止TCP转发,避免用户通过SSH隧道访问其他服务 PermitTTY no #不允许用户获取完整的shell终端,即使其登录成功也无法执行命令 ForceCommand internal-sftp #限制用户只能执行sftp中的命令 ChrootDirectory /data/user2/
登陆测试:ssh不可登陆测试。
~]# ssh algo@192.168.199.8 algo@192.168.199.8's password: PTY allocation request failed on channel 0 This service allows sftp connections only. Connection to 192.168.199.8 closed.
sftp测试:
随便找个客户端,端口为22
只允许ftp密码登录禁止ssh密码登录:如果想ssh登录到节点只能用秘钥的方式登录。
PasswordAuthentication no # 全局的关掉密码登录 Match User user1 PasswordAuthentication yes # 针对特定的用户可以打开密码登录 X11Forwarding no AllowTcpForwarding no PermitTTY no ForceCommand internal-sftp ChrootDirectory /data/user1/
然后针对特定用户可以在/etc/passwd中设置/sbin/nologin来禁止登录,这样实现的效果就是用账号密码可以登录ftp但是无法登录ssh。