Linux FTP服务器的搭建
参考
ubuntu 下新建的用户无法进行FTP连接:
原因:该用户的参数不完整,在useradd创建用户时需要指定-m - d - s 参数
简单的解决办法 使用adduser来添加用户。
ftp工作是会启动两个通道:控制通道(TCP21) , 数据通道(TCP20).
在ftp协议中,控制连接均是由客户端发起的,而数据连接有两种模式:port模式(主动模式)和pasv(被动模式)
PORT模式:
在客户端需要接收数据时,ftp_client(大于1024的随机端口)-PORT命令->ftp_server(21) 发送PORT命令,这个PORT命令包含了客户端是用什么端口来接收数据(大于1024的随机端口),在传送数据时,ftp_server将通过自己的TCP 20 端口和PORT中包含的端口建立新的连接来传送数据。
PASV模式:
传送数据时,ftp_client–PASV命令–>ftp_server(21) 发送PASV命令时,ftp_server自动打开一个1024–5000之间的随机端口并且通知ftp_client在这个端口上传送数据,然后客户端向指定的端口发出请求连接,建立一条数据链路进行数据传输。
安装ftp
安装FTP服务端
yum install vsftpd
修改配置文件
vi /etc/vsftpd/vsftpd.conf
FTP服务端目录和文件详解。
/etc/logrotate.d/vsftpd. // vsftpd的日志文件
/etc/pam.d/vsftpd // PAM认证文件
/etc/rc.d/init.d/vsftpd //启动脚本
/etc/vsftpd //vsftpd的配置文件存放的目录
/etc/vsftpd/ftpusers // 禁止使用vsftpd的用户列表文件
/etc/vsftpd/user_list // 禁止或允许使用vsftpd的用户列表文件
/etc/vsftpd/vsftpd.conf //主配置文件
/etc/vsftpd/vsftpd_conf_migrate.sh //vsftpd操作的一些变量和设置
/usr/sbin/vsftpd //vsftpd的主程序
/var/ftp //匿名用户主目录
/var/ftp/pub //匿名用户的下载目录
匿名访问的权限管理
anonymous_enable=NO //禁用匿名访问
anon_umask=022 //匿名用户上传文件的权限!!!!!
anon_root=/var/anony //修改匿名用户的根目录
anon_upload_enable=YES // 上传
anon_mkdir_write_enable=YES // 创建
anon_other_write_enable=YES // 删除
//匿名用户的登录名:anonymous 密码空
用匿名用户登录的时候默认是只有下载的权限,没有上传,创建和删除的权限:
创建一个直接登录系统用户来登录ftp:
useradd -s /sbin/nologin abc
//使用户只能用于特殊服务,比如FTP,不能用于登录系统。
passwd abc
用户具有 上传 创建 下载 切换目录
//########################
使用useradd -d 可以实现不同用户登陆后到达不同的目录下。
//指定某个用户登录时到某个特定的目录
加强vsftp安全设置:
限制系统用户锁定在家目录:默认不锁定。
如果开启锁定,则在列表中的用户不被锁定。
vi /etc/vsftpd/vsftpd.conf //编辑vsftpd配置文件
chroot_local_user=YES //开启禁锢目录功能,不能跳出家目录
!!!如果开启此功能,则在列表中的用户可以跳出家目录,其他用户不能跳出!
chroot_list_enable=YES //启用列表文件
chroot_list_file=/etc/vsftpd/chroot_list //指定列表文件
//把用户加入/etc/vsftpd/chroot_list中即可
touch /etc/vsftpd/chroot_list //创建该文件
cut -d: -f 1 /etc/passwd >>/etc/vsftpd/chroot_list
//将本地用户都加入到chroot_list 也可以手动在列表中添加用户名,一行一个。
chroot 参数的四种组合,导致四种不同的情况,local_user和list_enable是平级的关系,各有各的作用。
//当chroot_local_user=YES时,启用列表则是允许列表中的用户跳出
//当chroot_local_user=NO时,启用用户列表则是禁锢某些用户
默认情况下,出于安全原因,Centos 7 中 新版 vsftpd 不允许 chroot 目录具有可写权限,拥有写权限时会被拒绝登录。然而,我们可以通过选项来取消该限制。
(Red Hat6.5中没有此限制)
allow_writeable_chroot=YES
限制重要系统用户不能登录ftp
在此目录中的用户不能登录FTP,即使下边的用户策略允许登录,也不能进行登录。
cat /etc/vsftpd/ftpusers 默认已经添加了系统中一些比较重要的用户
echo "viong" >>/etc/vsftpd/ftpusers 此时viong不能登录ftp
利用ftp用户策略允许登录ftp的系统用户:
/etc/vsftpd/user_list 在这个文件中的用户不能登录系统:
vim /etc/vsftpd/vsftpd.conf
userlist_enable=YES //启用用户列表功能
userlist_deny=YES //设置拒绝列表中的用户登录
//此时 在user_list中的用户不能登录,如果为NO ,则是文件内的用户可以登录。
userlist_file=/etc/vsftpd/user_list 指定用户列表文件。
当list_enable=NO
则列表不生效,直接不进行限制用户
当list_enable=YES
则启用列表,是否允许参考deny的情况。
开启服务
service vsftpd start //启动FTP服务端
service vsftpd restart //重启 FTP服务端
chkconfig vsftpd on //设置开机自启
//启动服务错误时,可能会提示哪里出错,一定要看输出信息。
不同版本的FTP服务器配置文件不同 可能默认没有写出相应的配置条目 需要手工添加。
注意
FTP存放文件的根目录下 要有相应的文件权限才能正常使用FTP服务。
如果在FTP中可以创建文件和目录但是看不到,说明这个目录的权限设置不正确。应修改为755.
/var/ftp 这个FTP根目录权限755 内部目录的权限可以进行修改成777
附录
【虚拟用户的FTP】
anonymous_enable=NO //设定不允许匿名访问
local_enable=YES //设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问
chroot_list_enable=YES //使用户不能离开主目录
ascii_upload_enable=YES
ascii_download_enable=YES //设定支持ASCII模式的上传和下载功能
pam_service_name=vsftpd //PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
以下这些是关于vsftpd虚拟用户支持的重要配置项,默认vsftpd.conf中不包含这些设定项目,需要自己手动添加
guest_enable=YES //设定启用虚拟用户功能
guest_username=ftp //指定虚拟用户的宿主用户,CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf //设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名