FTP服务笔记

概念

  • FTP服务是应用层文件共享服务,C/S模式;
  • 服务端软件:Wu-ftpd,Proftpd,IIS;常用:vsftpd ,CentOS默认FTP服务软件;
  • 客户端软件:ftp,lftp,wget,curl;
  • 双通道协议,数据通道和命令通道;
  • 服务器两种模式:
    主动(PORT style),服务器端命令和数据端口都是固定:
    命令(控制):客户端:随机port >>>> 服务器:tcp21
    数据:客户端:随机port >>>> 服务器:tcp20
    被动(PASV style),服务器命令端口固定,数据端口随机
    命令(控制):客户端:随机port >>>> 服务器:tcp21
    数据:客户端:随机port >>>> 服务器:随机port
    服务端数据传输端口随机值通过命令端口确认:
    例如,客户端通过命令端口发送信息“227 Entering Passive Mode (192,168,30.99,231,145)”
    那么服务器数据端口为:231*256+145
  • 用户认证:
    匿名用户:ftp,anonymous,即linux默认账号ftp。ftp登录后的共享文件位置默认/var/ftp
    系统用户:即能够登录系统的账号,使用本身账号名和密码登录。ftp登录后共享文件位置是用户家目录。
    虚拟用户:独立创建的虚拟专用用户,它映射成指定系统用户,拥有独立的用户和密码文件。共享文件位置是其映射的系统用户家目录

使用情景

  • 匿名用户使用场景
    a. 服务端yum install vsftpd
    b. 客户端yum install ftp
    c. 客户端使用匿名用户登录ftp服务器:

    d. 在服务端为ftp用户添加写权限,客户端才可以上传

    e. 客户端上传文件

    f. 默认ftp用户上传文件后不可删除和修改。此功能由/etc/vsftpd/vsftpd.conf 中anon_other_write_enable=NO控制,默认NO

    g. 默认ftp用户不可创建目录。此功能由anon_mkdir_write_enable=NO参数控制,默认NO

  • Linux系统用户使用场景
    a. 使用服务端存在的用户ftp1用户登录ftp共享,其登录默认路径在ftp1家目录

    b. 上传,读取,删除文件都没有问题

    c. 创建目录也没有问题

    d. 使用服务端真实用户访问不安全,默认情况甚至能拿到passwd文件,不安全。和我们期望的只用在ftp共享用途不符。

    e. 在服务端/etc/vsftpd/vsftpd.conf中配置chroot_local_user=YES(默认NO),禁锢所有用户ftp方式只能访问自己的家目录,同时需要添加allow_writeable_chroot=YES才能使用系统用户正常使用。vim /etc/vsftpd/vsftpd.conf

测试:


d. 使用系统用户ftp共享时,更多的是要将ftp登录目录设置成指定目录,而非用户家目录
配置文件参数local_root=/ftpsharedir 指定非匿名用户登录所在目录
服务端配置参数,创建共享目录,设置共享目录权限:

客户端测试:


服务端查看结果:

  • 基于SSL的FTP场景

[root@server 08:51:09 ~]#ldd /usr/sbin/vsftpd|grep ssl       #########查看是否支持SSL
 libssl.so.10 => /lib64/libssl.so.10 (0x00007faef9e95000)
[root@server 08:51:37 ~]#
[root@server 08:51:37 ~]#
[root@server 08:51:45 ~]#
[root@server 08:51:46 ~]#
[root@server 08:51:50 ~]#cd /etc/pki/tls/certs/
[root@server 08:52:00 certs]#ls
ca-bundle.crt ca-bundle.trust.crt make-dummy-cert Makefile renew-dummy-cert
[root@server 08:52:01 certs]#make vsftpd.pem  ##########创建证书
umask 77 ; \
PEM1=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
PEM2=`/bin/mktemp /tmp/openssl.XXXXXX` ; \
/usr/bin/openssl req -utf8 -newkey rsa:2048 -keyout $PEM1 -nodes -x509 -days 365 -out $PEM2 ; \
cat $PEM1 > vsftpd.pem ; \
echo "" >> vsftpd.pem ; \
cat $PEM2 >> vsftpd.pem ; \
rm -f $PEM1 $PEM2
Generating a 2048 bit RSA private key
.........................................+++
..........................................+++
writing new private key to '/tmp/openssl.TN6JT4'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:vsftpd.com
Organizational Unit Name (eg, section) []:ftp
Common Name (eg, your name or your server's hostname) []:www.vsftpd.com
Email Address []:
[root@server 08:53:09 certs]#openssl x509 -in vsftpd.pem -noout -text     #########自签名
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            f7:b7:03:4e:75:de:c7:89
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=beijing, L=beijing, O=vsftpd.com, OU=ftp, CN=www.vsftpd.com
        Validity
            Not Before: Jun 28 08:53:09 2018 GMT
            Not After : Jun 28 08:53:09 2019 GMT
        Subject: C=CN, ST=beijing, L=beijing, O=vsftpd.com, OU=ftp, CN=www.vsftpd.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:b0:ed:db:28:a6:b4:57:e2:08:a2:0e:11:34:9f:
                    45:13:72:8b:56:b4:a3:0f:3c:e4:0c:1a:30:0c:05:
                    6e:58:2d:3b:29:a3:49:70:8a:c5:e7:10:fd:9e:a8:
                    dd:05:48:84:0a:cd:80:8e:58:d7:2d:ae:fa:f5:fd:
                    9d:cd:81:25:87:5a:2f:7b:17:fc:d3:fa:e5:ca:9f:
                    4d:96:68:ee:cb:11:b6:3c:1f:d6:3d:36:90:16:3d:
                    9c:4e:a9:a0:c4:b8:2f:92:fa:a1:21:30:3f:80:de:
                    37:e5:fb:25:da:db:14:38:91:06:84:5a:b1:9e:e6:
                    07:e7:08:44:63:18:29:6c:b5:fc:66:05:c4:3a:96:
                    83:56:41:99:3e:69:c5:31:95:d9:68:c9:57:97:75:
                    de:dd:5c:d8:cb:16:41:2d:ab:72:56:f5:e0:f4:99:
                    50:3b:c2:08:8d:28:4b:c3:44:a6:95:b1:63:c0:17:
                    83:df:97:0f:27:cb:1d:e3:2b:92:4f:77:02:38:b0:
                    7f:95:51:d2:3e:c3:4e:b2:c3:b0:a2:9c:ef:28:87:
                    6c:2e:ba:a5:af:e8:d6:2f:50:f2:3b:85:2f:ca:85:
                    36:a8:59:66:a3:98:e7:13:88:34:22:7e:9f:4b:5a:
                    6a:08:62:4a:2b:56:25:46:77:39:f5:e8:01:61:36:
                    02:b7
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                4E:6B:57:43:5A:AD:DF:BF:79:33:86:7C:D2:31:70:A2:16:3A:DA:4B
            X509v3 Authority Key Identifier:
                keyid:4E:6B:57:43:5A:AD:DF:BF:79:33:86:7C:D2:31:70:A2:16:3A:DA:4B
            X509v3 Basic Constraints:
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         2d:be:c6:a6:af:d5:77:8e:f2:6c:ab:97:b7:28:07:71:35:80:
         c4:2f:1f:2b:a1:d8:fe:4b:f7:6d:0c:a7:28:16:e2:c9:2e:09:
         ff:b0:32:e2:b1:78:4c:66:db:a5:74:8b:94:1f:a3:52:e3:a7:
         c1:b2:fc:8a:6e:48:7c:1a:78:53:69:6f:cb:61:26:a4:dc:67:
         f3:43:ce:34:46:88:1c:11:a6:53:30:16:9b:8a:16:ad:58:d9:
         3d:b1:9d:36:93:5d:7c:3a:9f:a3:ff:13:16:ca:6c:5c:69:c7:
         72:6e:cb:d5:e7:21:97:f2:72:44:7f:6f:3c:6e:1e:80:9e:a9:
         11:96:48:7d:d8:1a:7c:f8:fd:a6:d8:80:77:de:00:33:98:82:
         c4:9a:04:7d:d0:be:f0:f9:a1:7d:6c:9c:65:2c:fb:7e:c0:36:
         9f:aa:be:f4:da:a5:0c:7b:25:87:f2:1a:fb:64:19:ac:dd:65:
         9a:60:7e:fe:c8:5b:76:40:45:cb:ea:c0:79:9e:d7:29:ae:70:
         cb:7a:aa:15:09:c8:ff:0a:d0:26:f9:92:43:c5:37:97:07:6c:
         81:5b:54:cb:79:b2:f8:0d:6c:05:ef:32:69:36:0f:e1:0a:3f:
         e6:cf:5b:c0:55:be:a4:9b:9f:76:de:cc:44:ff:59:43:e0:53:
         e9:8e:f8:04
[root@server 08:53:42 certs]#vim /etc/vsftpd/vsftpd.conf  #########修改配置文件,添加以下行
ssl_enable=YES
force_local_logins_ssl=YES
force_local_data_ssl=YES
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

用filezilla等工具测试


  • 使用虚拟用户访问场景

a. 创建虚拟用户数据库文件

[root@server 09:29:53 certs]#vim /etc/vsftpd/vuser.txt
vuser1
password1
vuser2
password2

[root@server 09:32:11 vsftpd]#db_load -T -t hash -f vuser.txt vuser.db
[root@server 09:32:57 vsftpd]#chmod 600 vuser.db

b. 创建映射系统用户和FTP访问目录

[root@server 09:34:05 vsftpd]#useradd -d /var/ftproot -s /sbin/nologin testuser
[root@server 09:35:12 vsftpd]#chmod +rx /var/ftproot/
[root@server 09:35:28 vsftpd]#chmod -w /var/ftproot/
[root@server 09:36:17 vsftpd]#mkdir /ftpshare
[root@server 09:36:31 vsftpd]#setfacl -m u:testuser:rwx /ftpshare
[root@server 10:12:06 vuser.d]#vim /etc/vsftpd/vsftpd.conf   ####添加以下行

chroot_local_user=YES
allow_writeable_chroot=YES
local_root=/ftpshare

c. 创建pam配置文件

[root@server 09:39:57 vsftpd]#vim /etc/pam.d/vsftpd.db   #######添加以下行
auth required pam_userdb.so db=/etc/vsftpd/vuser
account required pam_userdb.so db=/etc/vsftpd/vuser

d. 指定pam配置文件

[root@server 09:40:56 vsftpd]#vim /etc/vsftpd/vsftpd.conf

guest_enable=YES
guest_username=testuser
pam_service_name=vsftpd.db

e. 为虚拟用户建立独立配置文件

[root@server 09:46:29 vsftpd]#mkdir /etc/vsftpd/vuser.d/
[root@server 09:46:51 vsftpd]#echo "user_config_dir=/etc/vsftpd/vuser.d/" >> /etc/vsftpd/vsftpd.conf
[root@server 09:47:38 vsftpd]#cd /etc/vsftpd/vuser.d/
[root@server 09:48:03 vuser.d]#vim vuser1  ######添加以下行
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@server 09:51:53 vuser.d]#cat vuser1 > vuser2

f. 客户端验证:
 



猜你喜欢

转载自www.cnblogs.com/allin2018/p/9240219.html