灌水唠嗑区
其他
文章
FTP文件服务器配置
发表于2024-03-05 15:33:2349次浏览0个评论
- FTP概述
- vsftpd(very secure FTP daemon)是Linux操作系统下的一款小巧轻快、安全易用的FTP服务器软件。
- FTP(File Transfer Protocol)是一种文件传输协议,基于客户端/服务器架构,默认情况下FTP协议使用 20和21端口,20用于传输数据,21用于传输控制信息。支持以下两种工作模式:
- 主动模式(PORT):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。数据传输端口就是20;
- 被动模式(PASV):FTP服务器开启并发送端口信息给客户端,由客户端连接该端口,服务器被动接受连接。使用哪个端口要服务器端和客户端协商决定
- 主动模式(PORT):客户端向FTP服务器发送端口信息,由服务器主动连接该端口。数据传输端口就是20;
- FTP支持以下三种认证模式:
- 匿名用户模式:
- 任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用来传输不重要的公开文件,不推荐在生产环境中使用。
- 匿名用户使用的登陆名为ftp或anonymous,口令为空;
- 匿名用户不能离开匿名用户家目录/var/ftp,且默认只能下载不能上传。
- pwd命名查看的目录是/,这个目录是/var/ftp,不是linux 根目录/,
- 任何人无需密码验证就可以直接登录FTP服务器。该模式不安全,一般只用来传输不重要的公开文件,不推荐在生产环境中使用。
- 本地用户模式:
- 通过Linux操作系统本地用户验证登录权限,相较于匿名用户模式更安全。
- vsftp的本地用户模式密码校验是使用系统的本地用户的 /etc/passwd 和/etc/shadow两个文件来检验的
- 通过Linux操作系统本地用户验证登录权限,相较于匿名用户模式更安全。
- 虚拟用户模式:
- 通过虚拟用户验证登录权限,虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源。该模式相较于其他两种模式更加安全,适用于对服务器的数据有较高的安全性要求场景。推荐使用
- 通过虚拟用户验证登录权限,虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其它资源。该模式相较于其他两种模式更加安全,适用于对服务器的数据有较高的安全性要求场景。推荐使用
- 匿名用户模式:
- vsftpd(very secure FTP daemon)是Linux操作系统下的一款小巧轻快、安全易用的FTP服务器软件。
- FTP服务端安装配置
- rpm -qa |grep vsftpd 检查是否安装vsftpd
- yum install vsftpd -y 安装vsftpd
- yum install ftp --安装ftp客户端
- ftp主要有3个配置文件,位于/etc/vsftpd/目录下,分别是:
- vsftpd.conf —vsftpd的主配置文件
- ftpusers: 黑名单,该文件用来指定那些用户不能访问ftp服务器。
- user_list: 白名单,指定的用户是否可以访问ftp服务器,通过vsftpd.conf文件中的userlist_deny的配置来决定配置中的用户是否可以访问,userlist_enable=YES ,userlist_deny=YES ,userlist_file=/etc/vsftpd/user_list 这三个配置允许文件中的用户访问FTP
- vsftpd.conf —vsftpd的主配置文件
- vsftpd之chroot权限的设置有几种方法:
- 1,直接在配置文件中添加:
- allow_writeable_chroot=YES 所有的用户都将拥有chroot权限。都可以访问家目录外的目录
- allow_writeable_chroot=YES 所有的用户都将拥有chroot权限。都可以访问家目录外的目录
- 2,所有用户都没有chroot权限,都限制在自己的家目录为根目录。
- chroot_local_user=YES
- chroot_local_user=YES
- 3,可以自定义用户是否有chroot权限
- chroot_local_user:用户是否限制在家目录
- chroot_list_enable:是否启用例外名单,默认NO
- chroot_list_file:例外名单文件
- 示例:
- chroot_local_user=NO
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
- 意思是:启用例外名单,除名单为/etc/vsftpd/chroot_list中用户以外的用户都只能访问用户家目录
- chroot_local_user=NO
- chroot_local_user:用户是否限制在家目录
- 1,直接在配置文件中添加:
- rpm -qa |grep vsftpd 检查是否安装vsftpd
- FTP认证模式配置
- 1、匿名用户模式
- 去掉配置文件vsftpd.conf 里面以下注释#,重启服务:
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- 就可以完成匿名用户的配置,此时匿名用户既可以登录上传、下载文件。记得修改配置文件后需要重启服务
- anon_upload_enable=YES
- 配置文件如下:
- 修改/var/ftp/pub目录属组权限,否则匿名用户无法上传文件
- chmod ftp:ftp /var/ftp/pub
- chmod ftp:ftp /var/ftp/pub
- mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 备份配置文件
- cat<<EOF>>/etc/vsftpd/vsftpd.conf
- 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=YES
- pam_service_name=vsftpd
- userlist_enable=YES
- tcp_wrappers=YES
- anon_upload_enable=YES #允许上传文件
- anon_mkdir_write_enable=YES #允许新建文件夹
- chroot_local_user=YES #
- anon_other_write_enable=yes #允许删除文件
- EOF
- 修改/var/ftp/pub目录属组权限,否则匿名用户无法上传文件
- 登录测试
- ftp 127.0.0.1(使用ftp或者anonymous,无需输入密码)

- ftp 127.0.0.1(使用ftp或者anonymous,无需输入密码)
- 去掉配置文件vsftpd.conf 里面以下注释#,重启服务:
- 本地用户模式
- 这里特别要注意的是如果新建用户的时候设置了无登录权限
- useradd zsk -s /sbin/nologin,需将/etc/pam.d/vsftpd文件中pam_shells.so替换为pam_nologin.so,否则ftp即使配置的在正确,也会无法登录的,报pam_nologin.so/530 Login incorrect。
- useradd zsk -s /sbin/nologin,需将/etc/pam.d/vsftpd文件中pam_shells.so替换为pam_nologin.so,否则ftp即使配置的在正确,也会无法登录的,报pam_nologin.so/530 Login incorrect。
- 配置本地模式
- 创建本地ftp用户cftp
- groupadd ftpusers
- useradd -g ftpusers -m -d /ftp/cftp -s /sbin/nologin cftp
- echo '1001'| passwd --stdin cftp
- mkdir -p /ftp/cftp
- chown -R cftp:ftpusers /ftp/cftp
- chmod 755 /ftp/cftp
- groupadd ftpusers
- 配置vsftp的PAM认证
- 如果ftp用户无登录权限,即useradd zsk -s /sbin/nologin
- 需将/etc/pam.d/vsftpd文件中pam_shells.so替换为pam_nologin.so,否则ftp即使配置的在正确,也会无法登录的,报pam_nologin.so/530 Login incorrect。
- 如果ftp用户无登录权限,即useradd zsk -s /sbin/nologin
- 配置本地模式
- mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 备份配置文件
- cat <<EOF>/etc/vsftpd/vsftpd.conf
- anonymous_enable=NO
- local_enable=YES
- write_enable=YES
- local_umask=022
- dirmessage_enable=YES
- xferlog_enable=YES
- connect_from_port_20=YES
- xferlog_std_format=YES
- ascii_upload_enable=YES
- ascii_download_enable=YES
- ftpd_banner=Welcome to FTP service.
- chroot_local_user=YES
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
- allow_writeable_chroot=YES
- listen=YES
- #listen_ipv6=YES
- pam_service_name=vsftpd
- tcp_wrappers=YES
- local_root=/ftp/cftp
- userlist_enable=YES
- userlist_deny=no
- userlist_file=/etc/vsftpd/user_list
- EOF
- 注意:多个用户,使用不同目录时,可以参考虚拟用户配置
- user_config_dir=/etc/vsftpd/vuser_conf
- 配置不同用户的根目录和权限
- user_config_dir=/etc/vsftpd/vuser_conf
- mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak 备份配置文件
- 创建本地ftp用户cftp
- 这里特别要注意的是如果新建用户的时候设置了无登录权限
- 虚拟用户模式
- 创建本地用户cftp
- groupadd ftpuser
- useradd -g ftpuser -M -d /ftp -s /sbin/nologin cftp
- echo '1001' | passwd --stdin cftp
- groupadd ftpuser
- 建立虚拟用户及要访问的目录并设置相应的权限:
- mkdir -p /ftp/cftp-1
- mkdir -p /ftp/cftp-2
- chown -R cftp:ftpuser /ftp
- chmod -R 755 /ftp
- 或者 chmod 700 /ftp/cftp-2
- mkdir -p /ftp/cftp-1
- 创建虚拟账户密码信息文件(奇数行为用户名 ,偶数行为密码)
- cat<<EOF>/etc/vsftpd/vuser_passwd.txt
- cftp-1
- 1001
- cftp-2
- 1002
- cftp-3
- 1003
- EOF
- cat<<EOF>/etc/vsftpd/vuser_passwd.txt
- 生成vsftpd 的db认证文件
- db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/cftp.db
- chmod 600 /etc/vsftpd/cftp.db
- db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/cftp.db
- 建立虚拟用户所需的PAM配置文件(注意文件名与vsftpd配置文件中pam_service_name参数一致)--32位系统路径为/lib/security/pam_userdb.so
- cat<<EOF>/etc/pam.d/vsftpd_vir
- auth required pam_nologin.so
- auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/cftp
- account required /lib64/security/pam_userdb.so db=/etc/vsftpd/cftp
- EOF
- cat<<EOF>/etc/pam.d/vsftpd_vir
- 对不同的虚拟用户设置不同的权限(注意文件名与虚拟用户名一致,local_root与前面创建的根目录一致)
- 为虚拟用户建立单独的配置文件
- 在/etc/vsftpd/vuser_conf目录中可以为每个虚拟用户建立独立的配置文件,配置文件名称和用户名相同。
- anon_world_readable_only=NO --表示用户可以浏览FTP目录和下载文件,YES理解比较复杂,建议设置NO即可
- anon_upload_enable=YES --表示用户可以上传文件
- anon_mkdir_write_enable=YES --表示用户具有建立和删除目录的权利
- anon_other_write_enable=YES --表示用户具有文件改名和删除文件的权限
- 通过对以上配置项的组合设置,vsftpd可以为每个虚拟用户配置不同的FTP权限,用户配置文件中没有的配置项将按照vsftpd.conf配置文件中的内容设置。
- 在/etc/vsftpd/vuser_conf目录中可以为每个虚拟用户建立独立的配置文件,配置文件名称和用户名相同。
- mkdir -p /etc/vsftpd/vuser_conf
- cat<<EOF>/etc/vsftpd/vuser_conf/cftp-1
- local_root=/ftp/cftp-1
- write_enable=YES
- anon_umask=022
- anon_world_readable_only=NO
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES
- EOF
- cat<<EOF>/etc/vsftpd/vuser_conf/cftp-2
- local_root=/ftp/cftp-1
- write_enable=YES
- anon_umask=022
- anon_world_readable_only=NO
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
- anon_other_write_enable=YES
- EOF
- 配置参数说明:
- 1.设置主配置文件
- 在vsftpd.conf配置文件中添加user_config_dir配置项,并设置用户配置文件的保存目录
- user_config_dir=/etc/vsftpd/vuser_conf
- user_config_dir=/etc/vsftpd/vuser_conf
- 在上面的配置实例中,设置在/etc/vsftpd/vuser_conf目录中保存虚拟用户的配置文件
- 在vsftpd.conf配置文件中添加user_config_dir配置项,并设置用户配置文件的保存目录
- 2.建立用户配置文件目录
- 使用mkdir命令建立虚拟用户配置文件的保存目录
- mkdir /etc/vsftpd_user_conf
- 使用mkdir命令建立虚拟用户配置文件的保存目录
- 1.设置主配置文件
- 为虚拟用户建立单独的配置文件
- 修改vsftpd.conf主配置文件
- 1、禁用匿名账户 anonymous_enable=NO
- 2、配置虚拟用户
- #启用pam认证
- pam_service_name=vsftpd_vir
- #启用虚拟用户
- guest_enable=YES
- #虚拟用户映射本地操作系统用户cftp
- guest_username=cftp
- #虚拟用户与本地用户权限相同
- virtual_use_local_privs=YES
- #虚拟用户配置文件目录
- user_config_dir=/etc/vsftpd/vuser_conf
- #启用pam认证
- 3、(可选)访问权限控制
- 将用户目录限制为根目录(看不到家目录的其他目录)
- allow_writeable_chroot=YES
- # 是否禁止本地用户切换到家目录上级目录,绑定家目录为用户的根目录
- chroot_local_user=NO
- #是否启用chroot列表文件,写入文件中的用户将锁定家目录
- chroot_list_enable=NO
- #指定用户列表文件的文件路径
- chroot list file=/etc/vsftpd/chroot_list
- 将用户目录限制为根目录(看不到家目录的其他目录)
- 参考配置
- anonymous_enable=NO
- local_enable=YES
- write_enable=NO
- local_umask=022
- dirmessage_enable=YES
- xferlog_enable=YES
- connect_from_port_20=YES
- xferlog_std_format=YES
- ascii_upload_enable=YES
- ascii_download_enable=YES
- ftpd_banner=Welcome to FTP service.
- chroot_local_user=YES
- chroot_list_enable=YES
- chroot_list_file=/etc/vsftpd/chroot_list
- listen=NO
- listen_ipv6=YES
- pam_service_name=vsftpd_vir
- userlist_enable=YES
- tcp_wrappers=YES
- use_localtime=YES
- listen_port=21
- idle_session_timeout=300
- guest_enable=YES
- guest_username=cftp
- user_config_dir=/etc/vsftpd/vuser_conf
- #allow_writeable_chroot=YES
- data_connection_timeout=1
- virtual_use_local_privs=YES
- pasv_min_port=40000
- pasv_max_port=40010
- accept_timeout=5
- connect_timeout=1
- userlist_enable=YES
- userlist_deny=no
- userlist_file=/etc/vsftpd/user_list
- anonymous_enable=NO
- 1、禁用匿名账户 anonymous_enable=NO
- 创建本地用户cftp
- vsftpd 服务器的其它主要设置 :
- 1 .最大传输速率设置:
- 设置匿名用户的最大传输率为20Kbps,修改/etc/vsftpd/vsftpd.conf 添加语句:
- anon_max_rate=20000
- anon_max_rate=20000
- 设置本地帐号最大传输率为1Mbps,修改/etc/vsftpd/vsftpd.conf 添加语句:
- local_max_rate=1000000
- local_max_rate=1000000
- 设置匿名用户的最大传输率为20Kbps,修改/etc/vsftpd/vsftpd.conf 添加语句:
- 2 .服务器最大并发数和用户最大线程数设置:
- 例如设置服务器允许的最大并发数为99,而每个用户同一时段的最大并发线程数为5,修改/etc/vsftpd/vsftpd.conf 添加两行语句:
- max_clients=99
- max_per_ip=5
- max_clients=99
- 例如设置服务器允许的最大并发数为99,而每个用户同一时段的最大并发线程数为5,修改/etc/vsftpd/vsftpd.conf 添加两行语句:
- 3 .修改默认端口:
- 默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf
- 添加语句(例):listen_port=4449 该语句指定了修改后FTP服务器的端口号,应尽量大于4000,修改后访问
- #ftp 192.168.57.2 4449 (需加上正确的端口号了,否则不能正常连接)
- 默认FTP服务器端口号是21,出于安全目的,有时需修改默认端口号,修改/etc/vsftpd/vsftpd.conf
- 4 .设置用户组,增强FTP服务器安全性:
- 举例:
- #mkdir –p /home/try 递归创建新目录
- #groupadd try 新建组
- #useradd –g try –d /home/try try1 新建用户try1并指定家目录和属组
- #useradd –g try –d /home/try try2 新建用户try2并指定家目录和属组
- #useradd –g try –d /home/try try3 新建用户try3并指定家目录和属组
- #chown try1 /home/try 设置目录属主为用户try1
- #chown .try /home/try 设置目录属组为组try
- #chmod 750 /home/try 设置目录访问权限try1为7;try2、try3为5
- 由于本地用户登录FTP服务器后进入自己主目录,而try1,try2 try3对主目录/home/try分配的权限不同,所以通过FTP访问的权限也不同,try1访问权限为:上传,下载,建目录 ;try2ty3访问权限为下载,浏览,不能建目录和上传。实现了群组中用户不同访问级别,加强了对FTP服务器的分级安全管理。
- #mkdir –p /home/try 递归创建新目录
- 举例:
- 5、常见的vsftpd日志解决方案如下:
- xferlog_enable=YES ( 表明FTP服务器记录上传下载的情况)
- xferlog_std_format=YES (表明将记录的上传下载情况写在xferlog_file所指定的文件中,即xferlog_file选项指定的/var/log/xferlog文件中)
- xferlog_file=/var/log/xferlog
- dual_log_enable=YES (表明启用了双份日志,在用xferlog文件记录服务器上传下载情况的同时,vsftpd_log_file所指定的文件,即/var/log/vsftpd.log也将用来记录服务器的传输情况)
- vsftpd_log_file=/var/log/vsftpd.log
- xferlog_enable=YES ( 表明FTP服务器记录上传下载的情况)
- 1 .最大传输速率设置:
- 1、匿名用户模式
- 常见错误:
- ftp连接报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
- 原因:
- 至2.3.5之后,vsftpd增强了安全检查,如果用户被限定在其主目录下,则该用户的主目录不能再具有写权限,如果检查发现还有写权限,就会报如上图红框部分的错误。
- 至2.3.5之后,vsftpd增强了安全检查,如果用户被限定在其主目录下,则该用户的主目录不能再具有写权限,如果检查发现还有写权限,就会报如上图红框部分的错误。
- 解决办法(两种):
- 第一种:去除用户主目录的写权限(chmod a-w “该用户主目录”)
- 第二种:在/etc/vsftpd/vsftpd.conf文件中加入参数allow_writeable_chroot=YES(允许可写的chroot)
- 第一种:去除用户主目录的写权限(chmod a-w “该用户主目录”)
- 原因:
- ftp连接报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
评论
登录后才可以发表评论
热门帖子
- 12025-12-01浏览数:182764
- 22023-05-09浏览数:25062
- 42023-09-25浏览数:18526
- 52020-05-11浏览数:17529