新增的文件以及文件夹(不需要执行,下面用到的时候会创建)
touch /home/login_user.txt #存放虚拟用户名和密码(单行用户名,双行密码)
/etc/vsftpd/login_user.db #虚拟库(认证)文件
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back #备份
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back #备份
mkdir /etc/vsftpd/vsftpd_user_conf #虚拟用户配置文件目录
touch /etc/vsftpd/vsftpd_user_conf/jin01 #虚拟用户配置文件
yum install -y vsftpd #vsftpd安装程序,配置文件默认在 /etc/vsftpd
yum install -y pam* db4* #vsftpd虚拟登陆账户必要依赖包
vi /home/login_user.txt #编辑
jin01 #单行:用户名
123456 #双行:密码
:wq #退出保存
执行下面命令生成虚拟库(认证)文件
db_load -T -t hash -f /home/login_user.txt /etc/vsftpd/login_user.db
虚拟库(认证)文件只对 root 用户可读写
chmod 600 /etc/vsftpd/login_user.db
扩展
-rw------- (600) #只有拥有者有读写权限。
-rw-r--r-- (644) #只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) #只有拥有者有读、写、执行权限。
-rwxr-xr-x (755) #拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) #拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) #所有用户都有文件读、写权限。
-rwxrwxrwx (777) #所有用户都有读、写、执行权限。
先备份 vsftpd,再修改 vsftpd
cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd_back #备份
vi /etc/pam.d/vsftpd #编辑
在文件 vsftpd 最上面增加下面内容
auth required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/login_user
account required /usr/lib64/security/pam_userdb.so db=/etc/vsftpd/login_user
系统用户 ftpuser ,登录目录 /home/ftpuser ,禁止登录
useradd ftpuser -d /home/ftpuser -s /bin/false
chown ftpuser:ftpuser /home/ftpuser
先备份,后修改
cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf_back #备份
vi /etc/vsftpd/vsftpd.conf #修改
增加下面配置
#使用PAM验证
pam_service_name=vsftpd
#启用虚拟用户,激活虚拟账户
guest_enable=YES
#把虚拟账户绑定为系统账户ftpuser
guest_username=ftpuser
#虚拟用户配置文件目录
user_config_dir=/etc/vsftpd/vsftpd_user_conf
建立 vsftpd_user_conf 配置文件目录
mkdir /etc/vsftpd/vsftpd_user_conf
设置虚拟用户配置文件,与虚拟账户同名,上面的 2.1
vi /etc/vsftpd/vsftpd_user_conf/jin01
配置 jin01 文件,增加下面配置
#浏览FTP目录和下载
anon_world_readable_only=NO
#允许上传
anon_upload_enable=YES
#允许建立和删除目录
anon_mkdir_write_enable=YES
#允许改名和删除文件
anon_other_write_enable=YES
#指定虚拟用户在系统用户下面的路径,限制虚拟用户的家目录,虚拟用户登录后的主目录。
local_root=/home/ftpuser
systemctl start vsftpd #启动
systemctl restart vsftpd #重启
setsebool -P tftp_home_dir 1
500 OOPS: cannot change directory:/home/ftpuser
异常setsebool -P ftpd_full_access 1
注意:在 centos7 已经没有 ftp_home_dir,使用 tftp_home_dir 替代了
allow_writeable_chroot=YES
#随机端口
pasv_min_port=30000
pasv_max_port=30100
再开启端口,执行下面命令
# 开放端口,永久
firewall-cmd --zone=public --add-port=30000-30100/tcp --permanent
# 重载配置文件
firewall-cmd --reload
# 重启firewalld服务
systemctl restart firewalld
#不允许匿名登录(默认YES)
anonymous_enable=NO
#允许本地登录,可以确保任何非匿名用户可以登录工作,包括虚拟用户(默认NO)
local_enable=YES
#启用任何形式 FTP 写入命令(默认NO)
write_enable=YES
#本地用户创建文件的默认权限(默认077)
local_umask=022
#匿名用户在特定环境下允许上传文件。为了让它生效,选项write_enable必须激活(write_enable是前提),
#匿名ftp用户必须要求上传位置的写的权限。这个设置也要求虚拟用户具有上传功能,
#在默认情况,虚拟用户被当做匿名用户对待(最大限制)权限。(默认NO)
#When SELinux is enforcing check for SE bool allow_ftpd_anon_write, allow_ftpd_full_access
anon_upload_enable=YES
#匿名 FTP 用户能够创建新目录(默认NO)
anon_mkdir_write_enable=YES
#FTP 用户但第一次进入一个新的目录将会展示消息。在默认情况下,目录扫描.message文件。但是可以通过message_file重写文件的路径(默认NO)
dirmessage_enable=YES
#录上传下载日志,默认放置到/var/log/vsftpd.log。通过设置属性 vsftp_log_file 重写(默认NO)
xferlog_enable=YES
#确保 PORT 传输连接来自端口20(默认NO)
connect_from_port_20=YES
#可以安排上传的匿名文件由其他用户拥有,chown_username进行设置(默认NO)
#chown_uploads=YES
#chown_username=whoever
#日志文件位置,可以覆盖
#xferlog_file=/var/log/xferlog
#传输日志文件的写的格式是标准的xferlog格式(默认NO)
xferlog_std_format=YES
#超时设置,客户端两个命令之间的最大时间(默认300秒)
#idle_session_timeout=600
#数据传输过程中暂停/延迟最长时间超时(默认300秒)
#data_connection_timeout=120
#定义一个唯一的用户,ftp服务器可以将其用作完全隔离且无特权的用户
#nopriv_user=ftpsecure
#服务器将识别异步ABOR请求。不推荐用于安全性(代码非常重要)。但是,不启用它可能会混淆较旧的FTP客户端(默认NO)
#async_abor_enable=YES
#ASCII模式数据传输数据上传(默认NO)
#ascii_upload_enable=YES
#ASCII模式数据传输数据下载(默认NO)
#ascii_download_enable=YES
#可自定义登录欢迎语
#ftpd_banner=Welcome to blah FTP service.
#指定不允许的匿名电子邮件地址的文件。显然对于打击某些DoS攻击非常有用(默认NO)
#deny_email_enable=YES
#可自定义匿名电子邮件地址
#banned_email_file=/etc/vsftpd/banned_emails
#登录之后本地用户(默认)会被限制到其根目录下(默认NO)
chroot_local_user=YES
#提供一个本地用户列表,然后改变他们根目录的位置(登录进来的时候的目录)(默认NO)
#chroot_list_enable=YES
#可自定义本地用户列表位置
#chroot_list_file=/etc/vsftpd/chroot_list
#允许用户使用"ls -R"命令,这个有个很小的风险。因为一个ls -R如果是在大型站点将会消耗大量资源(默认NO)
#ls_recurse_enable=YES
#vsftpd将以独立模式运行并侦听IPv4套接字,与 listen_ipv6 互斥(默认YES)
listen=NO
#监听IPv6套接字,与 listen 互斥(默认NO)
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#本地用户登录目录
local_root=/home
#匿名用户登录目录
anon_root=/home/ftpuser
#解决异常 500 OOPS: vsftpd: refusing to run with writable root inside chroot()
allow_writeable_chroot=YES
#开启虚拟用户
guest_enable=YES
#虚拟用户映射本地用户
guest_username=ftpuser
#虚拟账户配置位置
user_config_dir=/etc/vsftpd/vsftpd_user_conf
#随机端口
pasv_min_port=30000
pasv_max_port=30100
#与本地时间一致
use_localtime=YES
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统
文件位置:/etc/sysconfig/selinux
相关命令:
查询 ftp 相关设置信息(centos7)
getsebool -a | grep ftp
下面注释仅供参考
#关闭这个布尔变量会阻止 vsftpd 读取 public_content_rw_t 类型的文件和目录。如果允许用户通过 FTP 上传文件。必须开放这个布尔变量。
allow_ftpd_anon_write
#当开放这个布尔变量时只有Linux(DAC)的权限来控制访问,通过验证的用户可以读取和写入标记为 public_content_t 或 public_content_rw_t 类型的文件。
allow_ftpd_full_access
#当开放这个布尔变量时vsftpd 允许 cifs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 Samba 文件系统。
allow_ftpd_use_cif
#当开放这个布尔变量时 vsftpd 允许 nfs_t 类型的文件和目录,因此这个布尔变量启用,可以让你的 FTP 服务器可以使用 NFS 文件系统。
allow_ftpd_use_nfsvsftpd
#当开放这个布尔变量时认证用户可以读写自己的主目录中的文件。
ftp_home_dir
#当开放这个布尔变量时允许vsftpd 连接数据库。
ftpd_connect_db
#当开放这个布尔变量时容许的 httpd 作为 FTP 服务器,并且监听 FTP 端口。
httpd_enable_ftp_server
#当开放这个布尔变量时允许TFTP 访问一个公共的目录
tftp_anon_write