飞道的博客

华南农业大学Linux课程实验三——Linux中安装并使用telnet服务和ftp服务

499人阅读  评论(0)

环境

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

Linux怎么关闭SELinux-百度经验

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。

实验要求步骤和实验命令

  1. 利用SSH客户端远程登录root用户;

  2. 参考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.
。。。
  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
  1. 创建名为 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 - 博客园

  1. 利用chkconfig命令查看 telnet状态,并把结果追加到 root主目录下的 exam3.txt 文件中;
[root@localhost ~]# chkconfig --list | grep telnet >> /root/exam3.txt
  1. 把vsftpd的进程信息追加到 exam3.txt 文件中(注意去掉grep本身那⼀条记录);
[root@localhost ~]# ps -ef | grep vsftpd | grep -v "grep" >> /root/exam3.txt
  1. 把telnet的配置⽂件的内容追加到 exam3.txt 中;
[root@localhost ~]# cat /etc/xinetd.d/telnet >> /root/exam3.txt 
  1. 在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                                     
  1. 在上⼀步的telnet登录中,把当前路径和当前时间追加到 tmp.txt 中;
[a201814090518@localhost ~]$ sudo pwd >> /home/a201814090518/tmp.txt
[a201814090518@localhost ~]$ date '+%Y-%m-%d %H:%M:%S' >> /home/a201814090518/tmp.txt  
  1. 在上⼀步的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 
  1. 保留当前telent窗口,重新打开⼀个cmd窗口;

  2. 在新打开的cmd窗口中使用ftp命令进行匿名登录(用户名:ftp,密码为:空);

C:\Users\dell>ftp 192.168.184.128
# (⽤户名:ftp,密码为:空)
  1. 退出ftp用户登录,并登录 a+学号 用户;
    注意,如果提示425 Failed to establish connection. 请关闭windows防⽕墙
ftp> close
221 Goodbye.
ftp> quit
C:\Users\dell>ftp 192.168.184.128
#登录 a+学号 ⽤户
  1. 登录成功后,切换到/usr目录,并查看目录内容。发现用户可以访问其他目录;
ftp> cd /usr
250 Directory successfully changed.
  1. 修改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	# 来自上方第三个链接
  1. 测试匿名用户是否可以登录。测试普通用户是否可以进行目录切换;
# 退出登录,然后测试
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.
  1. 把C:\Windows\System32\drivers\etc\hosts文件copy到桌⾯;

  2. 利用lcd 进行window目录的切换,切换到hosts所在目录;

ftp> lcd D:\Desktop
Local directory now D:\Desktop.
  1. 然后把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要配置允许写入

  1. 切换到telnet窗口,把hosts文件的内容追加到 tmp.txt 中;
[a201814090518@localhost ~]$ cat /home/a201814090518/hosts >>/home/a201814090518/tmp.txt
  1. 把 tmp.txt 重命名为 exam3.txt;
[a201814090518@localhost ~]$ mv /home/a201814090518/tmp.txt /home/a201814090518/exam3.txt    
  1. 把 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
  1. 把 exam3.txt 通过ftp 传递到window下;

  2. 删除 a+学号 用户信息;

[root@localhost ~]# userdel -r a201814090518
  1. 把 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、

华农的同学,不点个赞嘛


转载:https://blog.csdn.net/wpw2000/article/details/116043876
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场