--- title: "Ftp 笔记" date: 2019-10-30T17:48:02+08:00 lastmod: 2019-10-31T21:49:00+08:00 tags: ["ftp", "vsftp"] categories: ["storage"] --- # 环境 - CentOS7 - vsftpd - 关闭 selinux # 安装 vsftpd 服务 ```bash yum install vsftpd ``` # 常用客户端 - ftp - lftp - curl # 主动模式 - 建立控制命令连接 - 客户端连接服务端 21 号端口 - 建立数据传送连接 - 客户端在本地监听一个端口(大于 1024 ),并通过 PORT 命令通知服务端 - 服务端从 20 端口连接客户端正在监听的端口,向客户端发送数据 - 相关配置 ```ini # 开启主动模式 pasv_enable = no ``` # 被动模式 - 建立控制命令连接 - 客户端连接服务端 21 号端口 - 建立数据传送连接 - 服务端在本地再次监听一个端口(大于 1024),并通过 PASV 命令通知客户端 - 客户端连接服务端新监听的端口,下载服务端数据 - 相关配置 ```ini # 开启被动模式 pasv_enable = yes # 数据连接可以使用的端口范围的最大端口,0 表示任意端口,默认值为0 pasv_min_port=30000 # 数据连接可以使用的端口范围的最小端口,0 表示任意端口,默认值为0 pasv_max_port=30999 ``` # 匿名用户配置 ```ini # 控制是否允许匿名用户登入 # 匿名用户使用的登陆名为 ftp 或 anonymous,口令为空 # 匿名用户不能离开匿名用户家目录/var/ftp,且只能下载不能上传 anonymous_enable=YES/NO(YES) # 匿名登入时,不会询问密码 no_anon_password=YES/NO(NO) # 定义匿名登入的使用者名称,默认值为ftp ftp_username=ftp # 是否允许登陆用户有写权限,属于全局设置 write_enable=YES/NO(YES) # 使用匿名登入时,所登入的目录,默认值为/var/ftp # 注意ftp目录不能是777的权限属性,即匿名用户的家目录不能有777的权限 anon_root=/var/ftp # 是否允许匿名者有上传文件(非目录)的权限 # 只有在write_enable=YES时,此项才有效 # 匿名用户必须要有对上层目录的写入权 anon_upload_enable=YES/NO(NO) # 是否允许匿名者下载可阅读的档案 anon_world_readable_only=YES/NO(YES) # 是否允许匿名者有新增目录的权限 # 只有在write_enable=YES时,此项才有效 # 匿名用户必须要有对上层目录的写入权 anon_mkdir_write_enable=YES/NO(NO) # 是否允许匿名入者拥有其他权限,譬如删除或者重命名 # 如果anon_upload_enable=NO,则匿名用户不能上传文件,但可以删除或者重命名已经存在的文件 # 如果anon_mkdir_write_enable=NO,则匿名用户不能上传或者新建文件夹,但可以删除或者重命名已经存在的目录 anon_other_write_enable=YES/NO(NO) # 是否改变匿名用户上传文件(非目录)的属主 chown_uploads=YES/NO(NO) # 设置匿名用户上传文件(非目录)的属主名 # 建议不要设置为root chown_username=username # 设置匿名登入者新增或上传档案时的 umask 值,默认值为 077 anon_umask=077 ``` # 配置 ## 常用配置 ```ini #允许匿名用户登陆 anonymous_enable=YES #允许本地用户登陆 local_enable=YES #允许登陆用户写可访问的目录或文件 write_enable=YES #指定用户登陆后直接进入系统的/mnt目录 local_root=/mnt chroot_list_enable=YES #限定登陆用户可访问的目录只有自己的家目录或指定的local_root目录 chroot_list_file=/etc/vsftpd/chroot_list ``` ## 允许 vsftpd 匿名用户上传和下载 - 创建匿名用户登陆目录 ```bash mkdir -p /var/ftp/pub chown -R ftp.ftp /var/ftp/pub chmod o+w /var/ftp/pub ``` - 修改 vsftpd.conf ```ini #允许匿名用户登录FTP anonymous_enable=YES #设置匿名用户的登录目录(如需要,需自己添加并修改) anon_root=/var/ftp/pub #打开匿名用户的上传权限 anon_upload_enable=YES #打开匿名用户创建目录的权限 anon_mkdir_write_enable=YES #打开匿名用户删除和重命名的权限(如需要,需自己添加) anon_other_write_enable=YES anon_umask=022 ``` ## 本地用户登陆 - 修改 vsftpd.conf ``` # 不允许匿名用户登入 anonymous_enable=no # 允许本地用户登入 local_enable=YES # 当本地用户登入时,将被更换到定义的目录下 # 默认值为各用户的家目录 local_root=/home/username # 是否允许登陆用户有写权限 # 属于全局设置,默认值为YES。 write_enable=YES/NO(YES) # 本地用户新增档案时的 umask 值,默认值为077 local_umask=022 # 本地用户上传档案后的档案权限 # 与chmod所使用的数值相同,默认值为0666 file_open_mode=0755 # 指定用户列表文件中的用户不允许切换到上级目录 chroot_local_user=YES ``` ## 创建 ftp 专用账户 - 创建用户 ftpuser1 ```bash useradd -s /sbin/nologin ftpuser1 passwd ftpuser1 ``` - 修改 vsftpd.conf ```ini anonymous_enable=no local_enable=YES local_root=/home/ftpuser write_enable=YES local_umask=022 file_open_mode=0755 chroot_local_user=YES ``` # 参考 - [vsftpd 详细配置](http://vsftpd.beasts.org/vsftpd_conf.html)