redhat 7中FTP服务器搭建与应用

FTP服务器搭建与应用

实验准备
软件:VMware Workstation Pro
虚拟机:Red Hat Enterprise Linux 7 64 位 两台(一台服务器,一台客户端)
匿名账号FTP服务器、真实账号FTP服务器
FTP应用案例1
【例5.11】学院内部有一台FTP 和Web 服务器,其功能主要是维护学院的网站,内容包括上传文件、创建目录、更新网页等。学院的这些维护工作是委派给计算机系学习部的学生进行的,分别有两个账号 user1和 user2登录FTP服务器,但不能登录本地系统。他们只能对目录/var/www/html进行操作,不能进入该目录以外的任何目录,如图5.7所示。
![请添加图片描述](https://img-blog.csdnimg.cn/024201fb6ba1475b8b54b85e2de7f571.png
分析:把 FTP服务器和Web服务器做在一起是企业经常采用的方法,这样方便实现对网站的维护。为了增强安全性,先要仅允许本地用户访问,并禁止匿名用户登录;其次,使用chroot功能将user1和user2锁定在/var/ www/html目录下。如果需要删除文件,则需要注意本地权限。具体配置如下。

1、建立user1和user2账号,并禁止本地登录。

[root@localhost Desktop]# useradd -s /sbin/nologin user1
[root@localhost Desktop]# useradd -s /sbin/nologin user2
[root@localhost Desktop]# echo redhat | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@localhost Desktop]# echo redhat | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.

2、配置YUM源,下载VSFTP服务包

[root@localhost Desktop]# mkdir /mnt/cdrom
[root@localhost Desktop]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost Desktop]# vim /etc/yum.repos.d/a.repo
[a]
name=a
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
[root@localhost 桌面]# systemctl start vsftpd
[root@localhost 桌面]# systemctl status vsftpd
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
   Active: inactive (dead)

[root@localhost 桌面]# systemctl start vsftpd
[root@localhost 桌面]# systemctl status vsftpd.service
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
   Active: active (running) since 日 2022-10-30 09:57:25 CST; 5s ago
  Process: 13429 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 13430 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─13430 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

1030 09:57:25 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.

3、编辑vsftpd.conf文件,并进行相应修改

[root@localhost 桌面]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO          //不允许匿名用户登录
local_enable=YES             //允许本地用户登录
local_root=/var/www/html     //设置所有本地用户的根目录。当本地用户登录后,会自动进入该目录。
chroot_local_user=NO         //是否将用户权限禁锢在FTP目录,以确保安全 
chroot_list_enable=YES         //启动限制用户的名单
chroot_list_file=/etc/vsftpd/chroot_list   //受限制用户名单文件
                      

chroot_ local_ user
设置是否将所有用户限制在工作主目录中,参数取值为yes或no,默认取值为no,当取值为yes时,本地用户成功登录后只能访问自己的工作主目录,不能访问工作主目录以外的其他目录。
chroot_ list_ enable
设置是否启动限制用户的名单,参数取值为yes或no。当取值为yes时,表示本地用户也有些例外,可以访问其工作主目录以外的其他目录,例外的用户在“chroot_ list_file”指定的文件中(默认文件是/etc/vsftpd/ chroot__ list)。
对于chroot_ local__ user和 chroot_ list_ enable 的组合效果,可以参考表。

参数chroot_ local_ user= yeschroot_ local_ user= no
chroot_ list_ enable = yes所有用户都被限制在其主目录下;使用chroot_ list_ file指定的用户列表,这些用户作为“例外”,不受限制使用chroot_ list_ file指定的用户列表,这些用户作为“例外”被限制在其主目录下,其他用户不受限制
chroot_ list_ enable = no所有用户都被限制在其主目录下;不使用 chroot__ list__ file指定的用户列表,没有任何“例外”用户所有用户都不被限制其主目录下;不使用chroot_ list_ file指定的用户列表,没有任何“例外”用户

注:在vsftpd2.3.5版本更新之后增强了安全检查,将用户限定在了主目录下,该用户的主目录就不能再具有写权限了!若有写权限会报该错误。
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
要修复这个错误,可以通过取消主目录的写权限,或者增加该语句。
allow_writeable_chroot=YES
4、建立/etc/vsftpd/chroot_list文件,并将user1,user2添加在文件中。

[root@localhost home]# vim /etc/vsftpd/chroot_list
user1
user2
[root@localhost html]# grep "#" -v /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO
local_enable=YES
local_root=/var/www/html
allow_writeable_chroot=yes
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost html]# systemctl restart vsftpd.service
[root@localhost html]# firewall-config 

5、把FTP协议添加到firewalld服务的允许列表中
请添加图片描述
6、修改本地权限,设置SELinux域策略。

[root@localhost html]# chmod 777 /var/www/html/
[root@localhost html]# getsebool -a | grep ftp
ftp_home_dir --> off
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
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost html]# setsebool -P ftpd_full_access=on

7、验证
[root@localhost html] yum install -y ftp
[root@localhost html] ftp 192.168.1.10

FTP应用案例2
公司现有一台FTP服务器,其IP地址为192.168.1.10。FTP服务器主要负责为公司员工提供相关文档的下载。公司现有三个部门,三个部门分别对应目录/ftp/b1、/ ftp/b2和/ftp/b3,另外设定一个公共目录/ftp/ share。三个部门分别适用userl 、user2和user3账号进行管理。要求如下:各账号只能访问自己所属部门的目录和 share目录。如userl只能访问b1和 public目录,不能访问其他目录。admin账号为管理员,可以访问FTP 服务器上的任何目录。

root@localhost 桌面]# yum install -y vsftpd.x86_64 
[root@localhost 桌面]# groupadd b1
[root@localhost 桌面]# groupadd b2
[root@localhost 桌面]# groupadd b3
[root@localhost 桌面]# groupadd myadmin
[root@localhost 桌面]# useradd -G b1,myadmin user1
[root@localhost 桌面]# useradd -G b2,myadmin user2
[root@localhost 桌面]# useradd -G b3,myadmin user3
[root@localhost 桌面]# useradd -G b1,b2,b3,myadmin admin
[root@localhost 桌面]# echo redhat | passwd --stdin user1
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo redhat | passwd --stdin user2
更改用户 user2 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo redhat | passwd --stdin user3
更改用户 user3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# echo redhat | passwd --stdin admin
更改用户 admin 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost 桌面]# mkdir /ftp
[root@localhost 桌面]# mkdir /ftp/b1
[root@localhost 桌面]# mkdir /ftp/b2
[root@localhost 桌面]# mkdir /ftp/b3
[root@localhost 桌面]# mkdir /ftp/share
[root@localhost 桌面]# touch /ftp/b1/a
[root@localhost 桌面]# touch /ftp/b2/b
[root@localhost 桌面]# touch /ftp/b3/c
[root@localhost 桌面]# touch /ftp/share/share.ttx
[root@localhost 桌面]# chown user1:b1 /ftp/b1
[root@localhost 桌面]# chown user2:b2 /ftp/b2
[root@localhost 桌面]# chown user3:b3 /ftp/b3
[root@localhost 桌面]# chown admin:myadmin /ftp/share/
[root@localhost 桌面]# chmod 770 /ftp/b1
[root@localhost 桌面]# chmod 770 /ftp/b2
[root@localhost 桌面]# chmod 770 /ftp/b3
[root@localhost 桌面]# chmod 770 /ftp/share/
[root@localhost 桌面]# vim /etc/vsftpd/vsftpd.conf 
[root@localhost 桌面]# vim /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO
local_root=/ftp
allow_writeable_chroot=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
[root@localhost 桌面]# touch  /etc/vsftpd/chroot_list
[root@localhost 桌面]# systemctl start vsftpd
[root@localhost 桌面]# firewall-config 
[root@localhost 桌面]# setsebool -P ftpd_full_access=on

FTP应用案例3
学院内部有一台FTP 和Web 服务器,其功能主要是维护学院的网站,内容包括上传文件、创建目录、更新网页等。学院的这些维护工作是委派给计算机系学习部的学生进行的,分别有两个账号 user1和 user2登录FTP服务器,user1通过FTP服务器远程更新网页文件至自己的家目录,仅允许访问家目录。user2为本地维护账户,不允许登录FTP服务器。

1、配置YUM源,下载VSFTP服务包

[root@localhost Desktop]# mkdir /mnt/cdrom
[root@localhost Desktop]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 is write-protected, mounting read-only
[root@localhost Desktop]# vim /etc/yum.repos.d/a.repo
[a]
name=a
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0
[root@localhost 桌面]# yum install -y vsftpd*
[root@localhost 桌面]# yum install -y ftp*
[root@localhost 桌面]# systemctl start vsftpd
[root@localhost 桌面]# systemctl status vsftpd
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
   Active: inactive (dead)

[root@localhost 桌面]# systemctl start vsftpd
[root@localhost 桌面]# systemctl status vsftpd.service
vsftpd.service - Vsftpd ftp daemon
   Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled)
   Active: active (running) since 日 2022-10-30 09:57:25 CST; 5s ago
  Process: 13429 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
 Main PID: 13430 (vsftpd)
   CGroup: /system.slice/vsftpd.service
           └─13430 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

1030 09:57:25 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.

2、创建用户user1,user2

[root@localhost Desktop]# useradd user1
[root@localhost Desktop]# echo redhat | passwd --stdin user1
Changing password for user user1.
passwd: all authentication tokens updated successfully.
[root@localhost Desktop]# useradd user2
[root@localhost Desktop]# echo redhat | passwd --stdin user2
Changing password for user user2.
passwd: all authentication tokens updated successfully.

3、检查网络设置IP地址
[root@localhost Desktop]# nmtui
在这里插入图片描述

[root@localhost Desktop]# nmcli device connect eno16777736 
Device 'eno16777736' successfully activated with 'f9900da8-2f6c-448c-b0b4-7739d081fc83'.
[root@localhost Desktop]# ifconfig 
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.10  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 fe80::20c:29ff:feb2:532c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:b2:53:2c  txqueuelen 1000  (Ethernet)
        RX packets 128  bytes 9872 (9.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 106  bytes 12737 (12.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 270  bytes 23160 (22.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 270  bytes 23160 (22.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4、编辑配置文件,将用户锁定在用户家目录

[root@localhost Desktop]# grep "#" -v /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=NO
listen_ipv6=YES

pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
[root@localhost Desktop]# vim /etc/vsftpd/vsftpd.conf 
chroot_local_user=YES
allow_writeable_chroot=YES
[root@localhost Desktop]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost Desktop]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# vim ftpusers 
user2
[root@localhost vsftpd]# systemctl restart vsftpd
[root@localhost html]# firewall-config 

5、把FTP协议添加到firewalld服务的允许列表中
请添加图片描述
6、修改本地权限,设置SELinux域策略。

[root@localhost html]# mkdir -p /var/www/html
[root@localhost html]# chmod 777 /var/www/html/
[root@localhost html]# getsebool -a | grep ftp
ftp_home_dir --> off
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
sftpd_anon_write --> off
sftpd_enable_homedirs --> off
sftpd_full_access --> off
sftpd_write_ssh_home --> off
tftp_anon_write --> off
tftp_home_dir --> off
[root@localhost html]# setsebool -P ftpd_full_access=on

7、验证
开启一台客户机,配置网络,安装FTP。测试user1成功登录,创建目录成功,user2登录失败。

[root@localhost Desktop]# ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 3.0.2)
Name (192.168.1.10:root): user1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (192,168,1,10,233,21).
150 Here comes the directory listing.
226 Directory send OK.
ftp> mkdir 1
257 "/1" created
ftp> bye
221 Goodbye.
[root@localhost Desktop]# ftp 192.168.1.10
Connected to 192.168.1.10 (192.168.1.10).
220 (vsFTPd 3.0.2)
Name (192.168.1.10:root): user2
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

使用物理机cmd测试。结果一致
在这里插入图片描述

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值