文章目录
环境
Windows10,15.0.0版本的VMware,CentOS 8。
准备工作
Linux
1、Linux关闭防火墙
# telnet默认端口23
firewall-cmd --zone=public --add-port=23/tcp --permanent
# vsftpd默认端口21
。。。
因为要放行的端口很多,所以直接关闭防火墙。
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl status firewalld
2、临时关闭SELinux
# 临时关闭SELinux,重启机器后恢复原状态:
[root@localhost ~]# setenforce 0
Windows
1、关闭Windows防火墙
想尝试一个个开启Windows防火墙端口的,可以看看这里:Windows/Windows server下开放防火墙端口_JaneYork的博客-CSDN博客
2、启用Windows的Telnet Client和TFTP Client功能
3、解决cmd下中文乱码问题
防止后面在第8步:“在window命令行下,使用 a+学号 帐号 telnet 登录linux”。在用cmd输入命令时,会发生看不懂程序给的反馈的情况,比如:
[sudo] a201814090518 的密码:
会变成
[sudo] a201814090518 鐨勫瘑鐮侊細
一次永久解决cmd窗口汉字显示乱码_不凡乃大的博客-CSDN博客_cmd窗口中文乱码
解决cmd窗口中文乱码问题,由上文总结如下:
1、win+R 输入regedit 进入注册表
2、
3、 重启cmd后生效
MS-DOS为以下国家和语言提供字符集:936 简体中文(默认) ,65001 UTF-8。
实验要求步骤和实验命令
-
利用SSH客户端远程登录root用户;
-
参考ppt内容,安装并启动telnet服务(xinetd模式);
[root@localhost ~]# yum install -y xinetd
[root@localhost ~]# yum install -y telnet
[root@localhost ~]# yum install -y telnet-server
[root@localhost ~]# vim /etc/xinetd.d/telnet # 下方内容复制到/etc/xinetd.d/telnet
service telnet
{
flags = REUSE
socket_type = stream
wait = no
user = root
server =/usr/sbin/in.telnetd
log_on_failure += USERID
disable = no # 负负得正。所以 disable= no 表示启用用这个服务
}
# 开启xinetd服务
[root@localhost ~]# service xinetd restart
Redirecting to /bin/systemctl restart xinetd.service
# 查看telnet客户端是否开启成功
[root@localhost ~]# telnet 127.0.0.1
Trying 127.0.0.1...
Connected to 127.0.0.1.
。。。
- 参考ppt内容,安装并启动ftp服务(stand alone模式);
[root@localhost ~]# yum install -y vsftpd # vsftpd是FTP服务器,vsftpd 是"very secure FTP daemon"的缩写
[root@localhost ~]# vim /etc/xinetd.d/vsftpd # 下方内容复制到 /etc/xinetd.d/vsftpd
service ftp
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
port = 21
log_on_success += PID HOST DURATION
log_on_failure += HOST
}
[root@localhost ~]# service xinetd restart
Redirecting to /bin/systemctl restart xinetd.service
[root@localhost ~]# ps -ef | grep vsftp
root 39448 1 0 22:37 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 39945 3609 0 23:03 pts/1 00:00:00 grep --color=auto vsftp
- 创建名为 a+学号 的账号,并在sudoers文件中添加该⽤户信息,使得该用户可以使用sudo命令;
[root@localhost ~]# useradd a+201814090518
useradd:无效的用户名“a+201814090518”
[root@localhost ~]# useradd a201814090518
[root@localhost ~]# passwq a201814090518
# 添加对/etc/sudoers文件的写权限。
[root@localhost ~]# chmod u+w /etc/sudoers
# 找到这一 行:"root ALL=(ALL) ALL"在起下面添加"xxx ALL=(ALL) ALL"(这里的xxx是你的用户名),然后保存退出。
[root@localhost ~]# vim /etc/sudoers #下方两种格式,建议选第二种写入
a201814090518 ALL=(ALL) ALL # 这种格式,后面使用sudo命令需要输入用户密码
或者
a201814090518 ALL=(ALL)NOPASSWD:ALL # 这种格式,后面使用sudo命令不用输入用户密码,建议用这个。
Linux给用户添加sudo权限 - henrylinux - 博客园
- 利用chkconfig命令查看 telnet状态,并把结果追加到 root主目录下的 exam3.txt 文件中;
[root@localhost ~]# chkconfig --list | grep telnet >> /root/exam3.txt
- 把vsftpd的进程信息追加到 exam3.txt 文件中(注意去掉grep本身那⼀条记录);
[root@localhost ~]# ps -ef | grep vsftpd | grep -v "grep" >> /root/exam3.txt
- 把telnet的配置⽂件的内容追加到 exam3.txt 中;
[root@localhost ~]# cat /etc/xinetd.d/telnet >> /root/exam3.txt
- 在window命令行下,使用 a+学号 帐号 telnet 登录linux,把root主目录下的 exam3.txt文件复制到当前用户的主目录下 tmp.txt ,并把 tmp.txt 的所属用户和所属组改为当前用户和当前用户所属的组;
Windows命令行下:
C:\Users\dell>telnet 192.168.184.128
[a201814090518@localhost ~]$ sudo cp /root/exam3.txt /home/a201814090518/tmp.txt
[a201814090518@localhost ~]$ sudo chown a201814090518 /home/a201814090518/tmp.txt
[a201814090518@localhost ~]$ sudo chgrp a201814090518 /home/a201814090518/tmp.txt
- 在上⼀步的telnet登录中,把当前路径和当前时间追加到 tmp.txt 中;
[a201814090518@localhost ~]$ sudo pwd >> /home/a201814090518/tmp.txt
[a201814090518@localhost ~]$ date '+%Y-%m-%d %H:%M:%S' >> /home/a201814090518/tmp.txt
- 在上⼀步的telnet登录中,把/etc/passwd文件中的第1、3、4字段内容(用户名、uid和gid信息)追加到tmp.txt 中;
[a201814090518@localhost ~]$ sudo cat /etc/passwd | awk -F: '{print $1,$3,$4}' >> /home/a201814090518/tmp.txt
-
保留当前telent窗口,重新打开⼀个cmd窗口;
-
在新打开的cmd窗口中使用ftp命令进行匿名登录(用户名:ftp,密码为:空);
C:\Users\dell>ftp 192.168.184.128
# (⽤户名:ftp,密码为:空)
- 退出ftp用户登录,并登录 a+学号 用户;
注意,如果提示425 Failed to establish connection. 请关闭windows防⽕墙
ftp> close
221 Goodbye.
ftp> quit
C:\Users\dell>ftp 192.168.184.128
#登录 a+学号 ⽤户
- 登录成功后,切换到/usr目录,并查看目录内容。发现用户可以访问其他目录;
ftp> cd /usr
250 Directory successfully changed.
- 修改vsftp的配置文件,禁止匿名用户登录,同时锁定登录⽤户的目录,不能进行目录切换;
主要参考这个:手动搭建FTP站点(CentOS 7) - 云服务器 ECS - 阿里云
其他参考:
vsftpd:500 OOPS: vsftpd: refusing to run with writable root inside chroot ()错误的解决方法_Laurence的技术博客-CSDN博客
linux下ftp 无法连接目标主机报421 Service not available, remote server has closed connection_qing20130604的博客-CSDN博客
[root@localhost ~]# mkdir /var/ftp/test
[root@localhost ~]# chmod -R 777 /var/ftp/test
[root@localhost ~]# touch /var/ftp/test/testfile.txt
[root@localhost ~]# chown -R a201814090518:a201814090518 /var/ftp/test
[root@localhost ~]# systemctl restart vsftpd.service
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf #修改或写入/etc/vsftpd/vsftpd.conf文件下方内容。除下面提及的参数,其他参数保持默认值即可。
#修改下列参数的值:
#禁止匿名登录FTP服务器。
anonymous_enable=NO
#允许本地用户登录FTP服务器。
local_enable=YES
#监听IPv4 sockets。
listen=YES
#在行首添加#注释掉以下参数:
#关闭监听IPv6 sockets。
#listen_ipv6=YES
#在配置文件的末尾添加下列参数:
#设置本地用户登录后所在目录。
local_root=/var/ftp/test
#全部用户被限制在主目录。
chroot_local_user=YES
#启用例外用户名单。
chroot_list_enable=YES
#指定例外用户列表文件,列表中用户不被锁定在主目录。
chroot_list_file=/etc/vsftpd/chroot_list
#开启被动模式。
pasv_enable=YES
# 没有这个,Windows命令行连接ftp 192.168.184.128时会报下方错误。
# 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
# Connection closed by remote host.
allow_writeable_chroot=YES
#本教程中为Linux实例的公网IP。
pasv_address=<FTP服务器公网IP地址>
#设置被动模式下,建立数据传输可使用的端口范围的最小值。
#建议您把端口范围设置在一段比较高的范围内,例如50000~50010,有助于提高访问FTP服务器的安全性。
pasv_min_port=<port number>
#设置被动模式下,建立数据传输可使用的端口范围的最大值。
pasv_max_port=<port number>
# /etc/vsftpd/chroot_list文件可以没有内容,但不能没有,如果没有,Windows命令行连接ftp 192.168.184.128时会报下方错误。所以要用vim创建/etc/vsftpd/chroot_list文件。
# 500 OOPS: could not read chroot() list file:/etc/vsftpd/chroot_list
# 500 OOPS: priv_sock_get_result
# Connection closed by remote host.
[root@localhost ~]# vim /etc/vsftpd/chroot_list
# 修改配置文件后,需要重启一下ftp服务
[root@localhost ~]# systemctl restart vsftpd.service
如果第16步运行出问题,再回来看这里。
这里非常容易出错,我本来能用命令ftp 192.168.184.128
连接上。然后,想试试上面第二个链接的另一种解决方案,修改了下/etc/vsftpd/vsftpd.conf,修改了下/home/a201814090518的权限,然后连接不上了。我又都改回来了,结果还是连接不上。报如下错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection
可以按以下思路排错:
1、关闭Windows和Linux的防火墙
2、关闭SELinux
3、百度、stackoverflow都搜索下报的错误提示,试试有没有解决方案。
4、避免是网络问题。用[root@localhost ~]# yum -y install ftp
在Linux下安装下ftp的客户端,然后用[root@localhost ~]# ftp localhost
在Linux上,把ftp客户端连到ftp服务器上。
5、防止是用户的问题。新建个用户,设好密码,用该用户来登录ftp服务器。
我运行了下方命令,然后可以连接上了。也可能问题的解决和下方这些命令无关,是因为一些其他原因,比如网络时好时坏,比如虚拟机出故障了又自动恢复了之类的。下方这些命令只是提供个解决思路。
# 列出所有与ftp相关的selinux bool数值清单列表与内容。
[root@localhost ~]# getsebool -a| grep ftp
# 把他们全部开启
[root@localhost ~]# setsebool -P ftpd_anon_write=1 ftpd_connect_all_unreserved=1 ftpd_connect_db=1 ftpd_full_access=1 ftpd_use_cifs=1 ftpd_use_fusefs=1 ftpd_use_nfs=1 ftpd_use_passive_mode=1 httpd_can_connect_ftp httpd_enable_ftp_server=1 tftp_anon_write=1 tftp_home_dir=1
[root@localhost ~]# setsebool -P httpd_can_connect_ftp 1
[root@localhost ~]# setsebool -P httpd_enable_ftp_server 1
[root@localhost ~]# chmod 777 /home/a201814090518 # 来自上方第三个链接
- 测试匿名用户是否可以登录。测试普通用户是否可以进行目录切换;
# 退出登录,然后测试
ftp> close
221 Goodbye.
ftp> quit
# 匿名登录后会:
ftp> pwd
530 Please login with USER and PASS.
# 测试目录切换
C:\Users\dell>ftp 192.168.184.128
Connected to 192.168.184.128.
220 (vsFTPd 3.0.3)
200 Always in UTF8 mode.
User (192.168.184.128:(none)): a201814090518
331 Please specify the password.
Password:
230 Login successful.
ftp> pwd
257 "/" is the current directory
ftp> cd /usr
550 Failed to change directory.
-
把C:\Windows\System32\drivers\etc\hosts文件copy到桌⾯;
-
利用lcd 进行window目录的切换,切换到hosts所在目录;
ftp> lcd D:\Desktop
Local directory now D:\Desktop.
- 然后把hosts文件上传到 a+学号 的用户主目录中;
通过图形用户界面可以上传文件,步骤:
1、Windows中随便打开一个文件夹。
2、在地址栏中输入ftp://<FTP服务器公网IP地址>:FTP端口
,本文中为Linux实例的公网IP地址。例如:ftp://192.168.XX.XX:21
。
3、在弹出的登录身份对话框中,输入已设置的FTP用户名和密码,然后单击登录。
4、登录后,您可以查看到FTP服务器指定目录(/var/ftp/test
)下的文件,例如:测试文件testfile.txt。
5、把桌面的hosts文件夹拖拽到文件夹下即可上传。
不过命令行没能上传上去:
ftp> put hosts /var/ftp/test/
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp> put hosts /var/ftp/test/hosts
200 PORT command successful. Consider using PASV.
553 Could not create file.
因为上传到了/var/ftp/test目录下,于是要在Linux里转移文件位置。
[root@localhost ~]# mv /var/ftp/test/hosts /home/a201814090518/
注意点:
1、/var/ftp/test要允许其他人写入chmod -R 777 /var/ftp/test
2、/etc/vsftpd/vsftpd.conf要配置允许写入
- 切换到telnet窗口,把hosts文件的内容追加到 tmp.txt 中;
[a201814090518@localhost ~]$ cat /home/a201814090518/hosts >>/home/a201814090518/tmp.txt
- 把 tmp.txt 重命名为 exam3.txt;
[a201814090518@localhost ~]$ mv /home/a201814090518/tmp.txt /home/a201814090518/exam3.txt
- 把 exam3.txt 进行 window格式的转换,同时把 unix2dos 的 输出内容追加到 exam3.txt中;
# 这样是可以把 unix2dos 的 输出内容追加到 1.txt的
[a201814090518@localhost ~]$ unix2dos /home/a201814090518/exam3.txt 2>>/home/a201814090518/1.txt
# 但这个做不到,因为exam3.txt 文件本来就在转换中,无法往里加东西
[a201814090518@localhost ~]$ unix2dos /home/a201814090518/exam3.txt 2>>/home/a201814090518/exam3.txt
# 把1.txt的内容手动复制到exam3.txt
-
把 exam3.txt 通过ftp 传递到window下;
-
删除 a+学号 用户信息;
[root@localhost ~]# userdel -r a201814090518
- 把 exam3.txt 重命名为 学号.txt 然后提交
提醒:做完实验别忘了重新启动Windows防火墙。
其他
1、
# 可以查看某端口是否打开
[root@localhost ~]# netstat -ntlp | grep 21
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 48280/vsftpd # 表明21端口已经打开
2、
华农的同学,不点个赞嘛