By YuanKang
不走弯路,在CentOS 7 下搭建FTP服务器
- 在搭建前,先说一下中途错误时怎样改错
: userdel -r ftpuser (删除用户)
: usermod -d/c/s ftpuser(修改用户参数)
: groupdel groupName (删除用户组)
: rm -r fileName (删除文件)
: yum -y remove vsftpd (卸载vsftpd,但是卸载时会有自己创建的文件残留,需要手动找到删除)
- 安装vfftpd
: yum -y insatll vsftpd
- 修改vsftpd配置文件
: cd /etc/vsftpd
: vi vsftpd.conf
- 点击 i 开始编辑 ,编辑结束按Esc,然后:wq (保存并退出),:q(退出)
#不允许匿名
anonymous_enable=NO
#在/etc/passwd下的用户以实体方式登录到vsftpd主机
local_enable=YES
#具有写(上传)的权限
write_enable=YES
#允许ASCII格式上传
ascii_upload_enable=YES
#允许ASCII格式下载
ascii_download_enable=YES
#所有用户不能切换到其他目录
chroot_local_user=YES
#在list文件内的用户,不能切换到其他目录
chroot_local_list=YES
#list文件地址
chroot_list_file=/etc/vsftpd/chroot_list
#使用了chroot_list,必须添加
allow_writeable_chroot=YES
#pam安全认证
pam_service_name=vsftpd
#使用userlist管理ftp用户
userlist_enable=YES
#是否允许tcp嵌套
tcp_wrappers=YES
#ftp的访问根目录
local_root=/opt/ftp
- 创建访问目录
: cd /opt
: mkdir ftp
- 添加用户(此时添加的是linux的用户)
- 添加用户的参数: -d /data/ftp:设置用户的主目录,-s /sbin/nologin:设置用户不能进行系统登录,但是可以登录ftp等内部程序.
: useradd -d /home/ftpuser -s /sbin/nologin ftpuser
- 查看shells是否有 /sbin/nologin,没有的话就在里面添加
:vi /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
- 设置密码
: passwd ftpuser
- 设置访问目录的属主为ftpuser
: chown -R ftpuser /opt/ftp
- 修改访问目录的权限 (此处的权限根据需求使用不同的权限775或755,具体含义可自行百度)
: chmod 775 /opt/ftp
- 关闭SELinux限制(SELinux是Linux内部安全系统)
: getsebool -a | grep ftp
- 此时会看到打印出的ftp限制
ftpd_anon_write --> off
ftpd_connect_all_unreserved --> off
ftpd_connect_db --> off
ftpd_full_access --> off
ftpd_use_cifs --> off
ftpd_use_fusefs --> off
ftpd_use_nfs --> off
ftpd_use_passive_mode --> off
httpd_can_connect_ftp --> off
httpd_enable_ftp_server --> off
tftp_anon_write --> off
tftp_home_dir --> off
- 修改 ftpd_full_access参数
: setsebool -P ftpd_full_access on
- 添加防火墙白名单
: firewall-cmd --permanent --zone=public --add-service=ftp
: firewall-cmd --reload
- 创建虚拟用户信息文件
: cd /etc/vsftpd/
: touch vuser_passwd
: vi vuser_passwd
#添加用户信息(注意:奇数行是用户名,偶数行是密码,记得换行)
ftpuser
123456
- 生成虚拟用户文件
: db_load -T -t hash -f /etc/vsftpd/vuser_passwd /etc/vsftpd/vuser_passwd.db
: chmod 600 /etc/vsftpd/vuser_passwd.db
- 编辑pam认证文件
: vi /etc/pam.d/vsftpd
- 计算机为64位,添加下面两行
#%PAM-1.0
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth
# 加入下面两行
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vuser_passwd
- 创建chroot_list,添加用户名
: cd /etc/vsftpd
: touch chroot_list
: vi chroot_list
ftpuser
- 重启服务
: systemctl restart vsftpd.service(重启服务)
: systemctl status vsftpd.service (查看状态)
: systemctl stop vsftpd.service(关闭服务)
疑难点和错误解析
- 在vsftpd.conf文件里配置了chroot_local_list=YES时,即使没有需要切换的用户,也必须创建chroot_list文件,否则用户登录认证会失败。
: cd /etc/vsftpd
: touch chroot_list
- 用户允许在ftp内切换目录时,在 /etc/vsftp/chroot_list 添加具体的用户名,如果不允许某 用户切换目录,则从chroot_list里删除该用户。
: vi /etc/vsftpd/chroot_list
- 注意:有时候用户在无法认证的话,查看用户的shell登录方式
:cat /etc/passwd
[root@localhost vsftpd]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
ftpadmin:x:1000:1000::/home/ftpadmin:/sbin/nologin
ftpuser:x:1001:1001::/home/ftpuser:/sbin/nologin
sftpuser:x:1002:1003::/opt/ftp:/bin/bash
- 最后一栏/bin/bash或/sbin/nologin的位置就是用户shell登录方式,查看shell文件是否包含对应的登录方式 。ftp登录时会
:vi /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
- 若还是不行,尝试修改shell登录方式
: usermod -s /bin/bash ftpuser
- 重启服务看能否登录