• 文件服务之FTP


    文件服务:

    vsftpd: 应用层,文件共享;

    nfs: 网络文件系统;

    samba :cifs协议在Linux主机上的实现,跨平台实现文件系统共享;

    网络存储:

    NAS: Network Attached Storage,文件服务器,nfs或cifs,文件级别共享接口;

    SAN: Storage Area NEtwork,存储区域网络,通过其它网络介质来传输SCSI协议,iSCSI(IP SAN), FC SAN, ...,块级别的共享接口;

    ftp:file transfer protocol, 21/tcp 

    C/S架构

    Client <--ftp-->Server

    Server:Listen

    Client: Connect

    连接:

    命令连接:传输命令;

    数据连接:传输数据;

    数据连接工作模式:

    主动模式:服务器端通过20/tcp主动连接客户端的命令连接的端口+1的端口;PORT;

    被动模式:客户端发出数据请求后,服务端会响应一个打开的临时随机端口给客户端;PASV;

    数据传输模式:

    文本格式

    二进制格式 

    协议安全:

    明文:认证时传输账号和密码的传输亦是明文 ;

    安全增强:

    ftp over ssl/tls:ftps

    ftp over ssh:sftp

    C/S:

    S:Serv-U, IIS, ...

    开源解决方案:

    wuftpd:Washington University  ftp daemon

    vsftpd:very secure ftp daemon 

    proftpd, pureftpd, ...

    C:

    GUI:flashfxp, cuteftp, filezilla, gftp, ...

    CLI:ftp, lftp, ...

    vsftpd

    程序环境:

    配置文件:/etc/vsftpd/vsftpd.conf

    主程序:/usr/sbin/vsftpd

    Unit File:/usr/lib/systemd/system/vsftpd.service

    文件路径映射:/var/ftp 

    ftp://ftp.xixi.com/pub/a.txt  --> /var/ftp/pub/a.txt

    用户的家目录的映射:访问ftp必须以某个系统用户的身份,此用户的家目录即文档目录;

    匿名用户:anonymous,要映射为一个系统用户,默认ftp;

    用户种类:

    匿名用户、系统用户、虚拟用户

    配置vsftpd:

    配置文件:vsftpd.conf

    directive value

    注意:directive之前不能有任何字符;

    匿名用户:

    1. anonymous_enable=YES
    2. anon_upload_enable=YES
    3. anon_mkdir_write_enable=YES
    4. anon_other_write_enable=YES

    系统用户:

    1. local_enable=YES
    2. write_enable=YES

    辅助认证配置文件/etc/vsftpd/ftpusers:

    pam认证的配置文件:/etc/pam.d/vsftpd

    chroot_local_users=YES

    禁锢所有的本地用户于自己的家目录中;但需要事先移除用户对家目录的写权限;

    1. chroot_list_enable=YES
    2. chroot_list_file=/etc/vsftpd/chroot_list 

    禁锢指定的文件中的用户于自己的家目录中;但需要事先移除用户对家目录的写权限;

    数据传输日志:

    1. xferlog_std_format=YES
    2. xferlog_enable=YES
    3. xferlog_file=/var/log/xferlog

    控制可登录vsftpd服务的用户列表:

    userlist_enable=YES

    是否启用/etc/vsftpd/user_list文件来可登录的用户;

    1. userlist_deny={YES|NO}
    2. YES:黑名单
    3. NO:白名单

    虚拟用户:

    用户账号存储于何处?

    文件,MySQL,Redis, ...

    vsftpd的认证功能托管给pam:

    Pluggable Authencate Module,认证框架,认证库;

    通过模块完成认证功能:/usr/lib64/security/

    pam_mysql模块:

    1. ./configure --with-pam=/usr --with-mysql=/usr --with-pam-mods-dir=/usr/lib64/security
    2. make
    3. make install 

    准备数据库:

    1. mysql> CREATE DATABASE vsftpd;
    2. mysql> CREATE TABLE vsftpd.users (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name CHAR(30) NOT NULL UNIQUE KEY,password CHAR(42));
    3. mysql> INSERT INTO vsftpd.users (name,password) VALUES ('tom',PASSWORD('tom')),('jerry',PASSWORD('tom'));
    4. mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'localhost' IDENTIFIED BY 'vspasswd';
    5. mysql> GRANT ALL ON vsftpd.* TO 'vsftpd'@'127.0.0.1' IDENTIFIED BY 'vspasswd';
    6. mysql> FLUSH PRIVILEGES;

    vsftpd通过pam_mysql进行认证的配置文件:/etc/pam.d/vsftpd.mysql

    1. auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vspasswd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    2. account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=vspasswd host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
    1. user:连接mysql服务器的用户名,此用户要有权限访问认证vsftpd服务的数据库;
    2. passwd:上面的用户的密码; 
    3. host:mysql服务器主机地址;
    4. db:认证vsftpd服务的数据库名称;
    5. table:存放了用户和密码的表;
    6. usercolumn:用户名对应的字段;
    7. passwdcolumn:密码对应的字段;
    8. crypt:密码加密方法;

    准备匿名用户映射的系统用户账号:

    1. mkdir /ftproot 
    2. useradd  -d /ftproot  vuser
    3. mkdir /ftproot/{pub,upload}
    4. setfacl -m u:vuser:rwx  /ftproot/upload

    配置vsftpd:vsftpd.conf

    1. pam_service_name=vsftpd.mysql
    2. guest_enable=YES
    3. guest_username=vuser

    配置每匿名用户有单独的权限设定

    vsftpd.conf,添加:

    user_config_dir=/etc/vsftpd/vusers_conf

    创建目录:

    mkdir /etc/vsftpd/vusers_conf

    为每用户提供配置文件:

    /etc/vsftpd/vusers_conf/{tom,jerry}

    配置权限的指令:

    1. anon_upload_enable
    2. anon_mkdir_write_enable
    3. anon_other_write_enable

    实验如下:

    脚本内容

     

  • 相关阅读:
    SN75107BDR 总线接收器 中文资料_PDF中文资料_参数_引脚图
    JAVA并发编程--4.1理解Condition
    ospf综合实验
    C#WCF服务01
    设计模式 - 组合模式理解及示例
    Java错题复盘
    LLMs之BELLE:源码解读(sft_train.py文件)源码解读(sft_train.py文件)采用LoRA微调模型—解析命令行参数→参数与日志初始化→初始化模型和标记器→模型优化(LoRA/梯
    阿里也出手了!Spring CloudAlibaba AI问世了
    CSS3 边框、圆角、背景
    [23年毕业设计源码]精品基于Python实现的仓库库存管理系统[2023届新项目源码]
  • 原文地址:https://blog.csdn.net/ly1358152944/article/details/126381478