文件服务器:FTP
文件服务器:FTP
一、FTP服务器的部署与配置
服务器:
1、关闭防火墙,修改selinux,配置yum仓库(略),安装vsftp软件包,重启服务
[root@stw2 ~]# systemctl stop firewalld.service
[root@stw2 ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@stw2 ~]# setenforce 0
[root@stw2 ~]# vim /etc/selinux/config
[root@stw2 ~]# reboot
[root@stw2 ~]# cd /etc/yum.repos.d/
[root@stw2 yum.repos.d]# ls
server.repo
[root@stw2 yum.repos.d]# mount /dev/cdrom /mnt
mount: /dev/sr0 is write-protected, mounting read-only
[root@stw2 yum.repos.d]# yum -y install vsftpd
[root@stw2 vsftpd]# systemctl restart vsftpd
[root@stw2 vsftpd]# systemctl enable vsftpd
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.
ftp的主配置文件/etc/vsftpd/vsftpd.conf
[root@stw2 ~]# cd /etc/vsftpd/
[root@stw2 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@stw2 vsftpd]# vim vsftpd.conf
anonymous_enable=YES (允许匿名用户访问)
local_enable=YES(允许本地用户访问,也就是允许FTP用户访问)
write_enable=YES(FTP用户对FTP服务器有写入权限)
local_umask=022(FTP用户创建目录或文件时默认的umask值,目录:777-022=755,文件:666-022=644)
#anon_upload_enable=YES(允许匿名用户上传,默认关闭)
#anon_mkdir_write_enable=YES(允许匿名用户创建目录,默认关闭)
connect_from_port_20=YES(数据传输端口:20)
#chroot_local_user=YES(禁止离开自己的用户家目录,且没有写入权限,默认关闭)
#chroot_list_enable=YES(此列表中的用户禁止离开自己的用户家目录,默认关闭)
#chroot_list_file=/etc/vsftpd/chroot_list(FTP用户列表文件,每一行一个用户名)
客户端:
配置yum仓库(略),安装lftp
[root@stw3 ~]# yum -y install lftp
匿名用户
1、服务器端/var/ftp/pub 匿名用户实现上传下载的目录(默认情况下匿名用户可以访问、可以下载、不能上传)
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> ls
drwxr-xr-x 2 0 0 6 Oct 30 2018 pub
服务器:
[root@stw2 ~]# cd /var/ftp/pub/
[root@stw2 pub]# ls
[root@stw2 pub]# touch file1
[root@stw2 pub]# ls
file1
客户端:
lftp 192.168.100.20:/> cd pub
lftp 192.168.100.20:/pub> get file1
lftp 192.168.100.20:/pub> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
[root@stw3 ~]# touch file2
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> ls
drwxr-xr-x 2 0 0 19 Aug 14 12:14 pub
lftp 192.168.100.20:/> cd pub
lftp 192.168.100.20:/pub> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
lftp 192.168.100.20:/pub> put file2
put: Access failed: 550 Permission denied. (file2)
2、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传
服务器:
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@stw2 vsftpd]# systemctl restart vsftpd
[root@stw2 ~]# cd /var/ftp
[root@stw2 ftp]# ll
total 0
drwxr-xr-x. 2 root root 19 Aug 14 20:14 pub
[root@stw2 ftp]# cd
[root@stw2 ~]# setfacl -m u:ftp:rwx /var/ftp/pub
客户端:
lftp 192.168.100.20:/pub> put file2
lftp 192.168.100.20:/pub> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
-rw------- 1 14 50 0 Aug 14 12:23 file2
3、设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录
服务器:
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@stw2 vsftpd]# systemctl restart vsftpd
客户端:
lftp 192.168.100.20:/pub> mkdir dir1
mkdir ok, `dir1' created
lftp 192.168.100.20:/pub> ls
drwx------ 2 14 50 6 Aug 14 12:25 dir1
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
-rw------- 1 14 50 0 Aug 14 12:23 file2
3、设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作
服务器:
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@stw2 vsftpd]# systemctl restart vsftpd
客户端:
lftp 192.168.100.20:/pub> ls
drwx------ 2 14 50 6 Aug 14 12:25 dir1
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
-rw------- 1 14 50 0 Aug 14 12:23 file2
lftp 192.168.100.20:/pub> mv file2 file222
rename successful
lftp 192.168.100.20:/pub> ls
drwx------ 2 14 50 6 Aug 14 12:25 dir1
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
-rw------- 1 14 50 0 Aug 14 12:23 file222
lftp 192.168.100.20:/pub> rm file222
rm ok, `file222' removed
lftp 192.168.100.20:/pub> ls
drwx------ 2 14 50 6 Aug 14 12:25 dir1
-rw-r--r-- 1 0 0 0 Aug 14 12:14 file1
FTP用户
在服务器中创建三个用户并给密码:
[root@stw2 ~]# useradd ftpuser1
[root@stw2 ~]# useradd ftpuser2
[root@stw2 ~]# useradd ftpuser3
[root@stw2 ~]# echo redhat | passwd --sdin ftpuser1
passwd: bad argument --sdin: unknown option
[root@stw2 ~]# echo redhat | passwd --stdin ftpuser1
Changing password for user ftpuser1.
passwd: all authentication tokens updated successfully.
[root@stw2 ~]# echo redhat | passwd --stdin ftpuser2
Changing password for user ftpuser2.
passwd: all authentication tokens updated successfully.
[root@stw2 ~]# echo redhat | passwd --stdin ftpuser3
Changing password for user ftpuser3.
passwd: all authentication tokens updated successfully.
注意:通过FTP用户访问FTP服务器时,默认访问的主目录为FTP用户家目录,此时FTP用户可以在自己的家目录下上传文件、下载文件、创建目录、重命名文件或者目录、删除文件或目录,同时FTP用户可以切换至其他目录中访问
服务器:
[root@stw2 ~]# cd /home
[root@stw2 home]# ls
ftpuser1 ftpuser2 ftpuser3 stw
[root@stw2 home]# cd ftpuser1
[root@stw2 ftpuser1]# touch file1
客户端:访问
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
上传
[root@stw3 ~]# touch file2
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
lftp ftpuser1@192.168.100.20:~> put file2
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file2
下载
[root@stw3 ~]# ls
anaconda-ks.cfg Documents file2 Music Public Videos
Desktop Downloads initial-setup-ks.cfg Pictures Templates
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file2
-rw-r--r-- 1 0 0 0 Aug 14 12:43 file3
lftp ftpuser1@192.168.100.20:~> get file1
lftp ftpuser1@192.168.100.20:~> exit
[root@stw3 ~]# ls
anaconda-ks.cfg Documents file1 initial-setup-ks.cfg Pictures Templates
Desktop Downloads file2 Music Public Videos
删除、重命名
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file2
-rw-r--r-- 1 0 0 0 Aug 14 12:43 file3
lftp ftpuser1@192.168.100.20:~> rm file3
rm ok, `file3' removed
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file2
lftp ftpuser1@192.168.100.20:~> mv file2 file222
rename successful
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file222
2、设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,不允许FTP用户访问其他目录( FTP用户对自己的家目录不能有写入的权限)
服务器:
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@stw2 vsftpd]# systemctl restart vsftpd
客户端:
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file222
lftp ftpuser1@192.168.100.20:/> cd ..
lftp ftpuser1@192.168.100.20:/> cd ..
lftp ftpuser1@192.168.100.20:/> cd /home
cd: Access failed: 550 Failed to change directory. (/home)
3、设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录。
如果限制ftpuser2和ftpuser3用户访问的目录限制在自己的家目录中,ftpuser1可以访问其他目录
服务器:
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
[root@stw2 vsftpd]# systemctl restart vsftpd
[root@stw2 ~]# cd /etc/vsftpd/
[root@stw2 vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
[root@stw2 vsftpd]# vim chroot_list
[root@stw2 vsftpd]# systemctl restart vsftpd
客户端:ftpuser1不能离开,ftpuser2、ftpuser3可以离开
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file222
lftp ftpuser1@192.168.100.20:/> cd ..
lftp ftpuser1@192.168.100.20:/> cd ..
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser2
Password:
lftp ftpuser2@192.168.100.20:~> ls
lftp ftpuser2@192.168.100.20:~> cd ..
cd ok, cwd=/home
lftp ftpuser2@192.168.100.20:/home> ls
drwx------ 3 1001 1001 106 Aug 14 12:47 ftpuser1
drwx------ 3 1002 1002 78 Aug 14 12:30 ftpuser2
drwx------ 3 1003 1003 78 Aug 14 12:30 ftpuser3
drwx------ 3 1000 1000 78 Apr 11 2018 stw
lftp ftpuser2@192.168.100.20:/home>
服务器:
[root@stw2 vsftpd]# systemctl restart vsftpd
[root@stw2 vsftpd]# vim /etc/vsftpd/vsftpd.conf
客户端:ftpuser1可以离开,ftpuser2和ftpuser3不能离开
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file222
lftp ftpuser1@192.168.100.20:~> cd ..
cd ok, cwd=/home
lftp ftpuser1@192.168.100.20:/home> ls
drwx------ 3 1001 1001 106 Aug 14 12:47 ftpuser1
drwx------ 3 1002 1002 78 Aug 14 12:30 ftpuser2
drwx------ 3 1003 1003 78 Aug 14 12:30 ftpuser3
drwx------ 3 1000 1000 78 Apr 11 2018 stw[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser2
Password:
lftp ftpuser2@192.168.100.20:~> ls
lftp ftpuser2@192.168.100.20:/> ls
lftp ftpuser2@192.168.100.20:/> cd ..
lftp ftpuser2@192.168.100.20:/> cd ..
lftp ftpuser2@192.168.100.20:/>
将文件恢复默认
两个配置文件中都是默认禁止访问ftp(/etc/vsftpd/ftpusers、/etc/vsftpd/user_list)
任意一个中的用户都禁止访问ftp
客户端:
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user root
Password:
lftp root@192.168.100.20:~> ls
ls: Login failed: 530 Permission denied.
lftp root@192.168.100.20:~> exit
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
ls: Login failed: 530 Login incorrect.
将/etc/vsftpd/user_list中的userlist_deny=NO加入配置文件中那么就是允许/etc/vsftpd/user_list中的用户访问ftp
/etc/vsftpd/user_list:
/etc/vsftpd/ftpusers:
客户端:
[root@stw3 ~]# lftp 192.168.100.20
lftp 192.168.100.20:~> user ftpuser1
Password:
lftp ftpuser1@192.168.100.20:~> ls
-rw-r--r-- 1 0 0 0 Aug 14 12:38 file1
-rw-r--r-- 1 1001 1001 0 Aug 14 12:42 file222
lftp ftpuser1@192.168.100.20:~>