FTP服务
FTP file transfer protocol 文件传输协议明文传输
vsftp(相对来说安全性较高) wu-ftp proftp
ftp功能
1将使用者划分等级 user guest anonymous (可以是普通用户,可以是匿名用户,可以是访客)
2命令记录和登录记录(通过系统日志服务对其进行记录)
3限制使用者活动范围
FTP两种工作模式
1主动模式:client向server发送连接请求(默认21),服务器接受连接,建立控制通道,需要数据传输时,客户端在控制通道用PORT命令告诉服务器:"我打开了XX端口,你过来连我",服务器从20端口向客户端XX端口发送连接请求,建立数据传输通道
2被动模式:client向server发送连接请求(默认21),服务器接受连接,建立控制通道,需要数据传输时,服务器在控制通道用PASV命令告诉客户端:"我打开了XX端口,你过来连我",客户端从yy端口向服务器XX端口发送连接请求,建立数据传输通道。(服务器端的XX端口并不固定)
总结
主动模式里,控制端口21固定, 数据传输端口20固定, 所以有防火墙时,主动模式用的会多一些。(建立数据传输通道时,是服务器主动去连客户端)
被动模式里,控制端口21固定,数据传输端口不固定(建立数据传输通道时,是客户端主动去连服务端)
替代方案sftp(SSH提供的一种解决方案)
装包 yum install vsftpd –y
相关文件
/etc/vsftpd/vsftpd.conf 主配置文件 参数=设定值
/etc/pam.d/vsftpd 跟pam相关的验证文件(pam是一种验证机制)
/etc/vsftpd/ftpusers 指定哪些用户无法登录,是一个访问控制文件
/etc/vsftpd/user_list 这个文件是否生效取决于主配置文件中的两个参数
userlist_enable userlist_deny
/etc/vsftpd/chroot_list 需要手动建立将使用者限制在家目录若要生效需添加两个条目 chroot_list_enable chroot_list_file
/usr/sbin/vsftpd 启动文件
/var/ftp/ 匿名用户登录时的根目录
与服务器环境相关的设置
connect_from_port_20=YES/NO 控制.服务器是否使用20端口进行数据传输
listen_port=21定义vsftp 服务器监听端口(命令通道的端口)若出现该条目,则必须是 独立的服务(不是由xinetd管理的),改端口就改这儿。
dirmessage_enable=YES/NO 用户进入某个目录时,需要显示的该目录要注意的内容
message_file=.message 使用该条目指定从哪儿读取要显示的信息
listen=YES/NO 定义vsftp是否以独立的方式启动
pasv_enable=YES/NO 定义是否开启被动模式
use_localtime=YES/NO 定义是否使用本地时间
write_enable=YES/NO 定义是否允许上传
connect_timeout=60 主动模式数据传输连接超时时间(单位秒)
accept_timeout=60 PASV模式数据传输连接超时时间
data_connection_timeout=300 数据传输的超时时间
idle_session_timeout=300 空闲等待超时时间
max_clients=0 FTP是以独立方式启动的,同一时间能连多少客户端,0是无限制
max_per_ip=0 定义同一ip的连接数,0是无限制
pasv_min_port=2046,pasv_max_port=2056 定义被动模式数据传输的最小端口和最大端口(因为被动 模式的端口是不固定的)
ftpd_banner=fdafdsa 定义登录时显示的说明
banner_file=/path/file 定义欢迎信息
与真实用户的相关设置
guest_enable=YES/NO 定义将真实帐号登录后映射成指定的用户名(相当于所有用户都会被 贬)
guest_username=ftp 指定访客身份(当上面是YES的时候,下面才生效,相当于贬成了ftp用 户)
local_enable=YES/NO 是否允许本地用户登录
local_max_rate=0 定义真实用户的传输速度 byte/s 0是不限制
chroot_local_user=YES/NO 是否将真实用户的活动范围限制在家目录
chroot_list_enable=YES/NO 是否启用限制活动范围,即是否启用chroot列表功能
chroot_list_file=/etc/vsftpd/chroot_list指定用户列表文件
userlist_enable=YES/NO 是否启用用户列表功能
userlist_deny=YES/NO 设置用户是否可以登录YES:不能登录 NO:可以登录
userlist_file=/PATH/FILE 指定存放用户名的文件
匿名用户相关设置
anonymous_enable=YES/NO 是否允许匿名用户登录,默认YES
anon_world_readable_only=YES/NO 是否允许匿名用户下载
anon_other_write_enable=YES/NO 是否允许匿名用户具有写以外的权限(
anon_mkdir_write_enable=YES/NO 匿名用户是否可以建立目录
anon_upload_enable=YES/NO 是否允许上传
deny_email_enable=YES/NO 是否通过邮件拒绝
banned_email_file=/path/file 定义存放邮件内容的文件
no_anon_password=YES/NO 匿名用户登录是否需要密码
anon_max_rate=0 匿名用户传输速率,0是无限制
anon_umask=077 匿名用户上传文件的权限(777-077)
安全相关
ascii_download_enable=YES/NO 下载时使用ASCII模式进行数据传输(数据传输相对安全)默认NO
ascii_upload_enable=YES/NO 上传时使用ASCII模式,默认NOone_process_model=YES/NO 是否为每一个连接开启一个独立的进程,此模式消耗资源高,安全性差,性能好
tcp_wrappers=YES/NO 是否支持tcp wrappers(一种安全机制)
xferlog_enable=YES/NO 是否记录使用者上传下载信息
xferlog_file=/var/log/xferlog 定义记录文件位置
dual_log_enable=YES,vsftpd_log_file=/var/log/vsftpd.log 两种方式
nopriv_user=nobody 定义启动者的身份
pam_service_name=vsftpd 定义pam验证模块的名称
注意权限的冲突,权限取交集
注意,能读就能下载
能写就能上传,建立目录,修改文件
在/etc/vsftpd/下并没有chroot_list文件需要手工建立。
chown_uploads=YES,匿名用户上传的文件属主转换为别的用户,一般建议为root。
chown_username=whoever,改此处的whoever为要转换的属主,建议root
nopriv_user=ftpsecure,指定一个安全账户,让ftp完全隔离和没有特权的账户
local_root=/var/ftp 可以指定共享目录 已实验
常见问题:
1为什么会显示没有FTP命令呢?如下图所示:
这是因为没有安装ftp客户端引起的。安装上ftp客户端即可。可从这个地址去下载相关的软件包。http://rpmfind.net/
安装上之后,就可以使用ftp这个命令了。
似乎 yum install ftp –y 就可以了。 未试验
2在vsftpd.conf配置文件中设置了匿名用户上传,修改,删除权限,登录之后为什么没有权限上传,修改呢?最后终于找到问题的原因了。配置文件的设置的确没有问题,但权限是取交集的,如果共享目录没有写权限,那你依然无法上传,修改。匿名用户默认的共享目录是/var/ftp,修改其下pub目录的权限,chmod 777 pub 这样,匿名用户登录后在pub目录下就有上传,修改的权限了。
3在/var/ftp下创建一个目录aaa(默认权限是755),并在里面创建一个文件111.txt(默认权限是644),然后以匿名用户身份登录(ftp://192.168.1.250),你会发现,你可以下载aaa目录,可以下载111.txt,也可以打开111.txt,但无法上传,无法重命名,无法修改,无法删除,虽然你在vsftpd.conf配置文件里面给予了相应的权限,如下图所示,这是什么原因呢?
Chmod 757 aaa -R 这时候就可以上传,重命名,删除了(因为“其它人”有了写权限)。
4你ftp://192.168.1.250匿名登上FTP服务器后,假设你在aaa目录下新建了一个目录ddd,在ddd目录里上传了一张图片1.png,并在aaa目录下上传了一个文件333.txt 。这时问题又出现了,你会发现你无法打开上传的333.txt文件,你没有权限。而且当你再次登录FTP服务器的时候,你会发现在ddd目录为空,但以管理员身份登录FTP服务器你确实会发现在ddd目录下有一张图片1.png。那这到底是什么原因呢?
原因很简单,原因是这样的,你上传的图片以及文件的权限为600,也就是说,你只要告诉管理员登录FTP服务器将权限改为607,那么,你再次登录服务器就可以看到你上传的图片和打开你上传的文了。
5若想将本地用户禁锢在宿主目录中,开启chroot_local_user=YES 即可。
以下这两项不必开启,这是实验得出的结果。
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
6可不可以指定共享目录呢?
可以local_root=/var/ftp 可以指定共享目录。
7 linux下能否为不同的用户指定不同的共享目录呢?
这个是可以的。chroot_local_user=YES该命令将用户的共享目录限定为用户家目录,即/home/$user .那么,我们只要将用户的家目录修改,那么就相当于是为不同的用户指定了不同的共享目录。Eg: usermod –d /opt/nginx/html lixun ,那么用户lixun的共享目录就是/opt/nginx/html
8那如何给不同的用户设置不同的权限呢?比如,A只可以下载, B可以上传,修改,删除。应用到生产环境下就是,普通用户用B账号登录下载,上传文件的用户用A账号登录。
在配置文件中,禁用匿名用户登录anonymous_enable=NO
在配置文件中添加guest_enable=YES
User_config_dir=/etc/vsftpd_user_conf/
Mkdir /etc/vsftpd_user_conf
Cd /etc/vsftpd_user_conf
Vi aaa
guest_username=aaa
write_enable=YES //允许上传
chroot_local_user=YES //限定共享目录为家目录(可以在创建用户时指定启始目录 useradd – d /var/tmp/aaa aaa)
anon_mkdir_write_enable=YES //允许建立
anon_upload_enable=YES/NO //允午上传
anon_other_write_enable=YES //拥有写以外的权限(重命名,删除)
vi bbb
guest_username=bbb
write_enable=NO
chroot_local_user=YES
anon_world_readable_only=YES
最后的实验结果为以aaa账号登录FTP服务器可以上传,新建目录,修改,删除,
以bbb用户登录,但是却不能下载,这是为什么呢?
这很正常,因为aaa用户传上去的文件只有所有者才有权限,需要管理员把权限改动一下才行。例 chmod 645 111.txt 098 –R .因为文件夹需要执行权限(098是文件夹)。这样,bbb账号登录后就可以下载了。
有时会遇到这样的情况,aaa自已建的文件夹却删除不了。原因很可能是所有者没有了执行权限。
以上的方法是通过建立虚拟用户来实现的不同用户不同权限的。适用于对计算机操作系统不是很了解的客服,销售,人力,行政。
那么还有一种方法就是建立上传账号。适用于开发等IT部门。
具体操作如下
创建用户aaa,
查看/var/ftp下的pub文件夹的权限。执行如下操作chmod 757 pub –R 因为“其它人”有写的权限才可以。否则aaa用户登录后没有权限往pub文件夹里写东西,即无法上传。
Su – aaa
Cd /var/ftp/pub
Rz 上传东西就可以了。
这时,当其它用户以匿名方式登录后就可以下载aaa上传的文件了。
FTP日志 以及 FTP命令 是遗留问题