FTP

FTP简介

FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。

主动与被动模式

FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。

区别主要在于数据通道的建立方式:

  • 主动模式:服务器向客户端敲门,然后客户端开门
    • 在主动模式中,客户端向服务器发送一个随机端口号,服务器再用这个端口号和客户端建立数据通道。这样,服务器需要知道客户端的 IP 地址和端口号,并且能够穿透客户端的防火墙。
    • 如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门
    • 客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口
  • 被动模式:客户端向服务器敲门,然后服务器开门
    • 在被动模式中,服务器向客户端发送一个随机端口号,客户端再用这个端口号和服务器建立数据通道。这样,客户端不需要公开自己的 IP 地址和端口号,并且只需要打开出站连接的防火墙。

ftp命令行登录

1
2
ftp ip
lftp user@site:port

常用命令

  1. 下载文件通常用get和mget这两条命令。
  2. 上传文件put和mput
  3. 断开连接bye

ftp空间

但是这个是当前目录的文件,不包括文件夹

1字节=1B,1024B=1KB

Ubuntu ftp服务器部署

vsftpd

  1. 安装

    1
    sudo apt install vsftpd # 安装
  2. 配置文件 /etc/vsftpd/vsftpd.conf

    1
    2
    3
    local_enable=YES # 是否允许本地用户访问  
    local_root=/home/kaikai_ftp/ftpdir # 自定义上传根目录
    write_enable=YES # 允许用户修改文件权限
  3. vsftpd虚拟用户

  4. 运行

    1
    2
    3
    4
    5
    6
    7
    systemctl restart vsftpd.service
    重启
    sudo service vsftpd start
    开机启动
    sudo systemctl enable vsftpd
    查看运行情况
    sudo service vsftpd status

vsftpd虚拟用户

虚拟用户

  1. 虚拟用户,只对ftp有效的用户。这些用户不可以登录Linux系统,只可以登录ftp服务器。其实就是一个本地用户映射成多个只对ftp服务器有效的虚拟用户。虚拟用户可以有自己的ftp配置文件,因此通常利用虚拟用户来对ftp系统的不同用户制定不同的权限,以达到安全控制的目的。与虚拟用户有关的设置以guest_开头。
  2. 匿名用户,也就是不需要输入密码就可登录ftp服务器的用户,这个用户名通常是ftp或anonymous; 与匿名用户有关的设置多以 anon_选项开头。
  3. 本地用户,也就是你Linux系统上可登录到系统的用户,这些用户是在系统上实实在在存在的用户。通常会有自己的home,shell等。与本地用户有关的设置多以local_开头或包含local_的选项。

●所有虚拟用户会统一映射为一个指定的系统帐号:访问共享位置,即为此系统帐号的家目录

●各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定

具体命令

  1. 创建用户数据库文件
1
2
3
vim /etc/vsftpd/vusers.txt
ftp123
ftp2333
  1. 文件需要被加密编码为hash格式奇数行为用户名,偶数行为密码
1
2
3
sudo apt-get install db-util # install db_load
sudo db_load -T -t hash -f vusers.txt vusers.db #该 db_load 实用程序可用于将文本文件加载到数据库中
chmod 600 vusers.db
  1. 创建用户和访问FTP目录
1
2
3
4
5
6
7
8
9
sudo useradd -d /data/ftproot -s /sbin/nologin -r vuser
# -d, --home-dir HOME_DIR home directory of the new account
# -s, --shell SHELL login shell of the new account
# -r, --system create a system account
mkdir -pv /data/ftproot/upload #-pv 是没有父路径也会创建
setfacl -m u:vuser:rwx /data/ftproot/upload
# set file access control lists
# -m, --modify
#chmod a=rx /data/ftproot/ 如果自动创建家目录,需要改权限
  1. 创建pam配置文件

    1
    2
    3
    vim /etc/pam.d/vsftpd.db
    auth required pam_userdb.so db=/etc/vsftpd/vusers
    account required pam_userdb.so db=/etc/vsftpd/vusers
  2. 指定pam配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vim /etc/vsftpd/vsftpd.conf

    pam_service_name=vsftpd.db
    userlist_enable=YES

    guest_enable=YES #所有系统用户都映射成guest用户
    guest_username=vuser #配合上面选项才生效,指定guest用户
    user_config_dir=/etc/vsftpd/vusers.d/ #虚拟用户设置独立的配置文件
    write_enable=YES

    anonymous_enable=NO # 匿名访问是否允许,默认不要开启
    local_enable=YES # 是否允许本地用户访问
    local_root=/home/shaojiemike/ftpdir # 自定义上传根目录

虚拟用户设置独立的配置文件

指定各用户配置文件存放的路径

1
2
vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers.d/

创建各个用户的配置文件存放路径,配置文件的文件名需要与用户名一致。
没有独立配置文件的虚拟用户会遵守/etc/vsftpd/vsftpd.conf这个主配置文件的权限配置。

1
2
3
4
5
6
7
8
9
mkdir /etc/vsftpd/vusers.d/
cd /etc/vsftpd/vusers.d/
vim ftp123
# 允许用户有自己的上传目录以及上传权限,添加这些参数以及值
local_root=/tmp/vutest_d
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
allow_writeable_chroot=YES

建立目录,更改目录的所有者与所属组

1
2
3
mkdir /tmp/vutest_d
chown vuser:vuser /tmp/vutest_d #还是那句话,用户能不能上传不仅与配置文件有关,还与目录是否有w权限有关,两个权限都开启才能正确上传。
chmod 755 upload

Linux-PAM 的配置文件

PAM 的各个模块一般存放在 /lib/security/ 或 /lib64/security/ 中,以动态库文件的形式存在,文件名格式一般为 pam_*.so。

PAM 的配置文件可以是 /etc/pam.conf 这一个文件,也可以是 /etc/pam.d/ 文件夹内的多个文件。如果 /etc/pam.d/ 这个文件夹存在,Linux-PAM 将自动忽略 /etc/pam.conf。

  1. /etc/pam.conf 类型的格式如下:

    1
    服务名称  工作类别  控制模式  模块路径  模块参数
  2. /etc/pam.d/ 类型的配置文件通常以每一个使用 PAM 的程序的名称来命令。比如 /etc/pam.d/su,/etc/pam.d/login 等等。还有些配置文件比较通用,经常被别的配置文件引用,也放在这个文件夹下,比如 /etc/pam.d/system-auth。这些文件的格式都保持一致:

    1
    工作类别  控制模式  模块路径  模块参数

需要进一步的研究学习

Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd’s capabilities.

遇到的问题

1
2
530 Login incorrect.
Login failed.
  1. 尝试改shell,但首先不是这个问题

    1
    2
    3
    cat /etc/shells #没有/sbin/nologin
    sudo usermod -s /bin/bash vuser
    cat /etc/passwd #shell改好了
  2. 查看报错

    我以为我是修改错文件了,但是好像没怎么简单

  3. 添加

    1
    2
    guest_enable=YES   # 开启虚拟用户
    guest_username=vuser # FTP虚拟用户对应的系统用户,即第四步添加的用户

    报错

    后来发现原因是,变量这一行不要加注释
    guest_enable=YES # 开启虚拟用户

  4. 只改pam的路径为pam.db
    报错


    这很明显是没有指定用户

实际问题

home.ustc.edu.cn

ftp 上传的内容几秒中之内被覆盖了。这是学校网站的保护机制吗?(我之前调试修改太多了?)

1
2
3
4
5
6
7
8
9
10
11
12
ftp> get index.html
local: index.html remote: index.html
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for index.html (360991 bytes).
226 File send OK.
360991 bytes received in 0.01 secs (25.7474 MB/s)
ftp> get index.html
local: index.html remote: index.html
200 EPRT command successful. Consider using EPSV.
150 Opening BINARY mode data connection for index.html (16116 bytes).
226 File send OK.
16116 bytes received in 0.00 secs (15.3082 MB/s)

I try single command line put site/index.html index.html and after a minute get index.html get the old file.

My USTC homepage is blocked

1
2
3
4
5
6
7
8
9
10
11
ftp> ls
200 EPRT command successful. Consider using EPSV.
150 Here comes the directory listing.
drwxr-xr-x 46 0 0 4096 Oct 25 10:03 public_html.old
226 Directory send OK.
ftp> mkdir public_html
550 Create directory operation failed.
ftp> put jumpPage.html
local: jumpPage.html remote: jumpPage.html
200 EPRT command successful. Consider using EPSV.
553 Could not create file.

参考文献

https://www.jianshu.com/p/ac3e7009a764

https://blog.csdn.net/frank_ci/article/details/108847358

https://blog.csdn.net/enweitech/article/details/51330664

WebCrawler first try

常见的仿站软件尝试

  1. wget -c -r -np -k -L -p 递归下载
  2. webCopy
  3. WinHTTrack
  4. Octoparse
  5. Teleport pro

遇到的问题

尝试后下载了一些html\css\js文件。但是没有达到我的要求。

我猜测的爬取原理,根据网站返回的index.html以及文件里指向的新文件路径进行递归下载。

这样的问题有:

  1. 无法对json文件里指向的材质包路径进行递归下载
  2. 无法读取指定网站文件夹的目录,导致不知道文件夹里有什么文件
    1. 假如有ftp://可能可以

需要进一步的研究学习

  1. 通过python实现对json文件里指向的材质包路径进行递归下载(感觉只能半自动)
  2. 读取指定网站文件夹的目录

开题缘由、总结、反思、吐槽~~

在找live2d模型的时候找到了 https://github.com/Eikanya/Live2d-model ,然后其中有个HSO的demo网站https://l2d.alg-wiki.com/。

然后一开始我想在自己页面做一个仿站,后来了解后只想把他里面的live2d的材质数据、贴图等爬下来。但是遇到了几个问题。

参考文献

https://www.shuzhiduo.com/A/E35pV9EAzv/

python crawler

FTP 2 : debug

选项含义

  1. 只能下载。不能上传、删除、重命名。write_enable=NO
  2. 只能上传、删除、重命名。不能下载。download_enable=NO
    1
    2
    STOR - store a file on the remote host 上传文件
    RETR - retrieve a remote file 下载文件

遇到的问题

  1. 修改好后,上传文件mkdir都会报错
    1
    550 Permission denied.
    write_enable=YES
    也不对,user_config_dir的注释忘改了
  2. 用虚拟用户配置
    1
    响应:	500 OOPS: vsftpd: refusing to run with writable root inside chroot()
    解决办法
    1
    2
    3
    write_enable=YES
    allow_writeable_chroot=YES
    chmod 755 upload
  3. 无法下载,是符合实际应用情况。但是如何改变
    我以为只要 cmds_allowed=RETR
    报错
    1
    550 Failed to open file.
    1
    sudo chmod 644 index3.html
  4. 可以删除文件。可以通过创建多个虚拟账号弥补。
    禁止删除(去除DELE)
    1
    cmds_allowed=FEAT,REST,CWD,LIST,MDTM,MKD,NLST,PASS,PASV,PORT,PWD,QUIT,RMD,SIZE,STOR,TYPE,USER,ACCT,APPE,CDUP,HELP,MODE,NOOP,REIN,STAT,STOU,STRU,SYST
    或者
    1
    cmds_denied=DELE

参考文献

VSFTPD实现用户权限不能删除 只能上传、下载

USTC Network Information Center

科大各个校区的IP

  1. 根据中国各地IP分布图
    1. 科大的IP如下,但是我还是不知道是哪个区的
      1. 114.214.160.0 114.214.255.255 我的IP在这,这可能是西区
    2. 西区活动中心机器IP
      1. 210.45.112.144
      2. 202.38.72.23 中国科学技术大学教育网
      3. 222.195.72.118
    3. 瀚海机器
      1. 211.86.151.101
  2. wlt之前有个各网络出口,现在403了

如何根据IP确定地址(比省市更具体)

http://ip.yqie.com/ip.aspx?ip=210.45.112.144

只能查询到都是科大的地址

如何判断IP是动态还是静态

vi /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO=dhcp 说明是DHCP 获得的地址
可是机器上就没有/etc/sysconfig/这个目录???

科大网络提供哪些服务


只有校内教工才可以申请域名。

个人主页ftp系统服务

  1. 教工服务器的域名为 staff.ustc.edu.cn, IP 地址为 202.38.64.11。
    个人主页网络地址形式为 http://staff.ustc.edu.cn/~username
    学生服务器的域名为 home.ustc.edu.cn, IP地址为 202.38.64.10。
    个人主页网络地址形式为 http://home.ustc.edu.cn/~username
  2. 这两台服务器均支持 IPv6访问,域名分别是 staff6.ustc.edu.cn 和 home6.ustc.edu.cn 。
  3. 出于安全考虑,个人主页不支持 php 等服务器端程序。
  4. 用命令行方式登录 FTP 系统时会提示用户的使用情况(注:有些 ftp客户程序如IE不显示这些消息),如提示“Login OK, used 11M of 200M.”

而且我发现科大的IP都属于”国内免费IP地址”指中国教育和科研网免费地址列表范围内的IP地址。列表

主页代理是什么?

没有主页代理以前,用户的主页放在某台计算机上,可以被访问的范围就取决于这台计算机的IP地址开通的范围。利用主页代理技术,Internet上所有的计算机都可以通过域名访问用户的主页,而且没有流量费。

主页代理要求用户为自己的主页申请一个域名,指向网络中心的主页代理服务器,并把自己的主页放在校园网络上的某台计算机(不含宿舍网络、VPN以及无线上网的计算机 )上。当网络上的某台计算机通过域名访问到网络中心的主页代理服务器时,主页代理服务器就会从用户的计算机上把主页内容取过来,并返回给访问的计算机。

静态IP出校管理

1
2
3
4
5
telnet 202.38.64.59 8888
Your IP is 202.38.73.26:

Sorry, your IP has no right to go out USTCnet.
Connection closed by foreign host.

电子邮件

我校邮件系统的主页网址是 http://email.ustc.edu.cn(普通,非SSL加密)和 https://mail.ustc.edu.cn(SSL加密),供用户免费使用,默认,教师用户空间为4GB,学生用户空间为500MB。

另:各有1GB作为“网络存储”(即“网络磁盘”)用于存放用户的个人文件;具有个人主页和FTP服务,详见个人主页/FTP系统。

学生毕业离校或者教工离职半年后,邮箱可以继续使用,但容量将会缩减,个人主页和FTP系统权限也取消。

我校邮件系统支持POP3/IMAP收信协议和SMTP发信协议,IP地址同为202.38.64.8,设置时需要身份验证,用户名和密码同邮件。

电子邮件地址形式为:
教工:***@ustc.edu.cn
学生:***@mail.ustc.edu.cn

需要进一步的研究学习

linux如何判断IP是动态还是静态

参考文献

https://netfee.ustc.edu.cn/faq/index.html#netacctypes