FTP安装与配置(虚拟用户)
FTP安装与配置:https://www.inqingdao.cn/598.html
FTP解决权限不足:https://blog.csdn.net/haoxizh/article/details/41546601
FTP命令操作:https://blog.csdn.net/u012842630/article/details/100864483
FTP安装与配置【推荐】
一、安装 vsftpd
切换root用户
查看是否安装vsftp
Coderpm -qa |grep vsftpd
如果没有安装,那么安装
Codeyum install vsftpd -y
启动vsftpd服务,以及重启命令
Codesystemctl start vsftpd.service # 启动vsftpd服务
systemctl restart vsftpd.service # 重启命令
systemctl enable vsftpd.service # 设置开启自启确认服务是否启动
Codenetstat -antup | grep ftp
如没有安装netstat,先进行安装
Codeyum install -y net-tools
结果如下,则FTP服务启动成功:
Code[root@localhost ~]# netstat -antup | grep ftp
tcp6 0 0 :::21 :::* LISTEN 1777/vsftpd
二、配置 vsftpd
修改配置文件
Codevi /etc/vsftpd/vsftpd.conf
修改以下配置参数,设置匿名用户和本地用户的登录权限,设置指定例外用户列表文件的路径,并开启监听 IPv4 sockets。
Codeanonymous_enable=NO # 是否允许匿名ftp,如否则选择NO
local_enable=YES # 是否允许本地用户登录
chroot_local_user=YES # 本地用户禁锢在宿主目录中
chroot_list_enable=YES # 是否将系统用户限止在自己的home目录下
chroot_list_file=/etc/vsftpd/chroot_list # 列出的是不chroot的用户的列表
listen=YES注释
listen_ipv6=YES
配置参数,关闭监听 IPv6 sockets。Code#listen_ipv6=YES
添加以下配置参数,开启被动模式,设置本地用户登录后所在目录,以及云服务器建立数据传输可使用的端口范围值。
Codeallow_writeable_chroot=YES
pasv_enable=YES
#pasv_address=xxx.xx.xxx.xx #如果是云服务器,请开放注释并修改为您的 Linux 云服务器公网 IP
pasv_min_port=40000
pasv_max_port=45000
# 设置本地用户登录后所在的目录。默认配置文件中没有设置该项,此时用户登录FTP服务器后,所在的目录为该用户的主目录,对于root用户,则为/root目录。
local_root=/var/ftp
# 设置匿名用户登录后所在的目录。若未指定,则默认为/var/ftp目录。
anon_root=/var/ftp/pub可选配置
Code# 所有用户禁止下载
download_enable=NO创建并编辑
chroot_list
文件如果希望某个用户可以访问根目录,不受限于自己的目录,把用户名加入.
Codevi /etc/vsftpd/chroot_list
输入 :wq 退出文件
重启FTP服务器
Codesystemctl restart vsftpd.service
三、创建用户
创建一个组,用于存放ftp用户
Codegroupadd ftpgroups
在 /home 目录下创建一个ftp目录专门存放ftp用户
Codemkdir /home/ftp
创建ftp用户,并加入ftpgroups组
Codeuseradd -d /home/ftp/ftpuser1 -g ftpgroups ftpuser1
设置密码(这里作为测试就取:111)
Codepasswd ftpuser1
设置不允许用于用户登录
Codeusermod -s /sbin/nologin ftpuser1
四、防火墙设置
如果是再云服务器上搭建的话,防火墙默认没开,所以只要配置安全组,开放21端口,和40000-45000端口即可。
方式一:部分端口开放
Codefirewall-cmd --zone=public --add-service=ftp --permanent
firewall-cmd --zone=public --add-port=21/tcp --permanent
firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent
firewall-cmd --reload方式二:关闭防火墙
Codesystemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
firewall-cmd --state #查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
五、修改Selinux
如果是云服务器,这个默认没有开启。因此不用设置。直接跳过。
【1、2部先跳过,后面再次搭建的时候好像不用配置,最后还是不行的时候再来执行】
修改Selinux文件
Codevi /etc/selinux/config
修改:SELINUX=disabled
重启服务
Codesystemctl restart vsftpd.service
如果上面配置后,还是不能登录
Codegetsebool -a | grep ftp
结果:
Codeftpd_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 # 开启开启上面2个:
Codesetsebool tftp_home_dir 1
setsebool ftpd_full_access 1
# 查看是否开启成功
getsebool -a | grep ftp
六、登录
C:\Users\XXX>ftp 192.168.174.50 |
如果这里显示 530 Login incorrect.
注释 /etc/pam.d/vsftpd 文件里的这一行, 在前面加 # 号:
#auth required pam_shells.so |
然后重启
systemctl restart vsftpd.service |
七、有效用户配置
如果上面的配置还不能进行登录的话,可以进行如下操作(可以就跳过):
ftp会根据/etc/shells这个文件来判断一个用户是否是有效用户,会阻止那些shell不在/etc/shells里的用户登陆.
所以如果ftp用户的登录shell为/sbin/nologin 则
vi /etc/shells |
/bin/sh |
八、其他操作
8.1 不受限目录用户设置
按第三节再创建一个用户 ftpuser2
添加不受限用户
Codevim /etc/vsftpd/chroot_list
添加用户名,一行一个名字
Codeftpuser2
:wq验证是否成功
CodeC:\Users\BoWenWang>ftp 192.168.174.50
连接到 192.168.174.50。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.174.50:(none)): ftpuser2
331 Please specify the password.
密码:
230 Login successful.
ftp>
ftp> cd /
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
bin
boot
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
226 Directory send OK.
ftp: 收到 107 字节,用时 0.03秒 3.82千字节/秒。
ftp> put D:\tmp\1.txt
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp>可以看到,虽然说可以访问到根目录,但是没有权限的话,还是不能进行操作!
Codeftp> cd ~
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
226 Directory send OK.
ftp> put D:\tmp\1.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp>
ftp> get 1.txt D:\tmp\ttttttt.txt
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for 1.txt (0 bytes).
226 Transfer complete.
ftp>Code[root@localhost ftpuser2]# ll
total 0
-rw-r--r--. 1 ftpuser2 ftpgroups 0 Mar 12 11:06 1.txt可以在自己的目录下上传,下载文件。
8.2 设置匿名登录访问公共目录
在拥有用户名登录的同时,也有公共的匿名登录,进行文件共享,那么可以进行如下设置:
vi /etc/vsftpd/vsftpd.conf |
修改如下地方:
anonymous_enable=YES |
重启FTP服务
systemctl restart vsftpd.service |
通过WEB或者文件资源管理器,查看:
在地址栏输入(你自己的服务器IP) ftp://192.168.174.50/
匿名用户试图修改文件:
8.3 添加用户允许在公共目录上传文件
再添加一个用户 ftpuser3
Codeuseradd -d /var/ftp/pub -g ftpgroups ftpuser3
passwd ftpuser3
usermod -s /sbin/nologin ftpuser3如果是将已有用户的主目录改为公共目录
Codeusermod -d /var/ftp/pub ftpwbw
systemctl restart vsftpd.service更改公共目录所有者(或者添加一个管理组也可以,原理一样就是权限更改)
Code[root@localhost ftp]# chown -R ftpuser3 pub
[root@localhost ftp]# ll
total 0
drwxr-xr-x. 2 ftpuser3 root 21 Mar 12 11:20 pub测试效果
查看文件列表,确定该用户家目录为公共目录。
CodeC:\Users\BoWenWang>ftp 192.168.174.50
连接到 192.168.174.50。
220 (vsFTPd 3.0.2)
200 Always in UTF8 mode.
用户(192.168.174.50:(none)): ftpuser3
331 Please specify the password.
密码:
230 Login successful.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub.txt
226 Directory send OK.
ftp: 收到 12 字节,用时 0.00秒 12.00千字节/秒。
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub.txt
226 Directory send OK.
ftp: 收到 12 字节,用时 0.00秒 12.00千字节/秒。创建文件夹、上传一个文件
Codeftp> mkdir admin
257 "/admin" created
ftp> cd admin
250 Directory successfully changed.
ftp> put D:\tmp\1.txt
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp>通过WEB查看
通过文件资源管理器,发现匿名用户依旧无法修改文件。
接着用ftpuser3进行操作,重命名成功: