FTP
机器初始检查
- 防火墙
- iptables -nvL 是否无规则
- selinux
- sestatus或者getenforce 是否处于disable状态
安装
- yum install -y vsftpd
创建账号
- useradd ftpuser -s /sbin/nologin
- 默认会在/home 目录下创建ftpuser的主目录
- /sbin/nologin: shell命令,表示用户登录时所使用的shell。在这个例子中,FTP用户使用/sbin/nologin作为shell,这意味着本用户不能通过登录shell来登录系统,而只能通过FTP协议来访问系统。这是为了安全起见禁止 FTP 用户以交互模式登录系统
- 设置密码
- passwd ftpuser
- 查看ftpuser详情
- grep ftpuser /etc/passwd
- ftpuser:x:1000:1000::/home/ftpuser:/sbin/nologin
- ftpuser: 用户名,即FTP用户的登录名。
- x: 用户口令,实际密码被存放在了/etc/shadow文件中。此处为了安全起见,将哈希值置于这里,以隐藏实际密码。
- 1000: 用户ID,是分配给用户的唯一标识符。
- 1000: 组ID,表示用户所属的初始组的组ID。
- /home/ftpuser: 用户主目录,即FTP用户的家目录。
- /sbin/nologin: shell命令,表示用户登录时所使用的shell。在这个例子中,FTP用户使用/sbin/nologin作为shell,这意味着本用户不能通过登录shell来登录系统,而只能通过FTP协议来访问系统。这是为了安全起见禁止 FTP 用户以交互模式登录系统。
- ftpuser:x:1000:1000::/home/ftpuser:/sbin/nologin
- grep ftpuser /etc/passwd
配置文件
- grep -v "^#" /etc/vsftpd/vsftpd.conf
- anonymous_enable=NO:禁用匿名登录,只允许经过身份验证的用户登录。
- local_enable=YES: 启用本地用户登录,即允许来自系统本地的用户登录FTP服务器。
- write_enable=YES:启用写权限,即允许用户在FTP服务器中上传、创建和删除文件和目录。
- local_umask=022:设置生成文件和目录时的默认权限掩码。
- dirmessage_enable=YES:启用目录消息功能,允许定义特定目录的消息。
- xferlog_enable=YES:启用传输日志记录功能,让vsftpd记录每个文件和目录传输的详细信息。
- connect_from_port_20=YES:使用经典数据连接端口,即FTP数据连接使用20端口。
- xferlog_std_format=YES:将传输日志格式化为传统的UNIX格式。
- listen=NO:禁用独立模式,使用独立模式时,为FTP服务器分配IP地址和接口,但这个配置使用了IPv6,因此此选项不需要。
- listen_ipv6=YES:启用IPv6监听。
- pam_service_name=vsftpd:使用vsftpd配置的PAM服务。
- userlist_enable=NO:禁用用户列表功能,即不限制访问FTP服务器的用户。
- ftpusers:该文件包含需要被禁止访问FTP服务器的用户列表。如果某个用户的用户名列在这个文件中,该用户将不能通过FTP访问服务器。例如,root用户通常会被列入这个文件中以防止未授权的访问。该文件中每行一个用户名,注释以#号开头。
- user_list:该文件包含FTP服务器的白名单或黑名单,即列在文件中的用户名有权或无权访问FTP服务器。配置文件中userlist_enable=YES是黑名单,如果是NO等于白名单。。如果user_list和ftpusers重复禁止一个用户访问,那么ftpusers的设置会优先生效。
- local_root=/data/ftp:设置FTP服务器的根目录为/data/ftp,该目录仅限于本地用户访问。
- chroot_local_user=YES: 启用用户级别的chroot,即每个用户被限制在其家目录下。
- allow_writeable_chroot=YES:允许FTP用户在其根目录中创建可写目录,但是仅限于用户主目录。
- cat /etc/pam.d/vsftpd
-
这是一个存储在文件/etc/pam.d/vsftpd中的PAM(Pluggable Authentication Modules)认证模块配置文件,用于提供FTP服务器的用户身份验证。每一行配置代表不同的认证模块,行中的字段意义如下:
- session optional pam_keyinit.so force revoke:初始化用户的密钥环,使其对所有已解锁的密钥和用户的密钥连带物(如 SSH 代理)拥有控制权,如果密钥之前已经被锁定,那么它们将被撤销。
- auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed:检查用户是否在/etc/vsftpd/ftpusers文件中,如果在则拒绝访问。
- auth required pam_shells.so:检查用户指定的shell是否可用。
- auth include password-auth:使用password-auth文件中的认证模块, password-auth文件包含用于认证用户的模块,例如PAM提供的unix密码认证方式或LDAP认证方式。
- account include password-auth:使用password-auth文件中的账户管理部分,用于验证用户是否为有效用户或是否已被禁用。
- session required pam_loginuid.so:确保用户有一个loginuid,即会在系统日志文件中创建匹配的登陆ID来标注登录会话的开始和结束。
- session include password-auth:使用password-auth文件中的会话管理部分,例如在用户登录时执行特定的用户设置。
-
启动FTP服务
- systemctl start vsftpd
登录FTP服务
- ftp x.x.x.x
- 输入ftpuser
- 输入ftpuser用户的密码
- 如遇报错如:530 Login incorrect. /bin/ftp: Login failed.
- 解决:echo /sbin/nologin >> /etc/shells
- 原因:/etc/shells下默认只有/bin/sh、/bin/bash、/usr/bin/sh、/usr/bin/bash
- 如遇报错如:530 Login incorrect. /bin/ftp: Login failed.
结束
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现