笔者最近收到一个需求,搭建Linux上的Ftp服务,但是只能上传,不能下载,且用户不能跳开Ftp,通过Sftp来获得文件。大致看了些网上分享。通过配置,完成这个“奇葩”需求。
首先跳开Ftp,使用Sftp那么可以通过设置虚拟账户来实现。
其次Ftp上只上传,不下载,那么通过配置Ftp服务来实现。
操作系统Redhat6.8,安装vsftp包。通过rpm命令:(这里通过挂载了iso,进入包目录)
# rpm -ivh vsftpd-xxxxx
安装db4
# rpm -ivh db4-xxxxx
也可以通过Yum命令,道理是一样的。
安装完成后,首先配置vsftpd.conf.进入/etc/vsftpd
# vim vsftpd.conf
这里删除了#注释的内容,故可以在文件末尾直接添加下列配置。
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=YES
xferlog_std_format=YES
download_enable=NO
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
ftpd_banner=Welcome to blah FTP service .
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
virtual_use_local_privs=NO
guest_username=ftpuser
user_config_dir=/etc/vsftpd/vsftpd_user_conf
新建虚拟账户,同样在/etc/vsftpd目录下新建logins.txt文件(文件名随意)
编辑:
第一行用户名:ftpcs
第二行:密码XXX
多个用户依次添加。(奇数行为用户,偶数行为密码)
文件添加完成后:
# db_load -T -t hash -f /etc/vsftpd/logins.txt /etc/vsftpd/vsftpd_logins.db
为了安全性,这个时候logins.txt文件可以移除。
赋予权限
# chmod 600 /etc/vsftpd/logins.db
放置虚拟用户:
# vim /etc/vsftpd/chroot_list
在这边添加上面的虚拟用户,只有用户没有密码。
新建系统用户,这里笔者新建了ftpuser,指定到/home/ftpsite目录,同时在ftpsite目录下新建虚拟用户对应的ftp目录。
# useradd -d /home/ftpsite -s /sbin/nologin ftpuser
# mkdir /home/ftpsite/ftpcs
# chmod 700 /home/ftpsite/
# chown -R ftpuser:ftpuser /home/ftpsite
还是当前目录新建:
# mkdir vsftpd_user_conf
进入该目录,新建对应虚拟用户的文件:
# vi ftpcs
添加内容
local_root=/home/ftpsite/ftpcs
write_enable=YES
anon_umask=022
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=NO
配置pam.d
# vim /etc/pam.d/vsftpd
加入下面内容,其他行全部注释:
(64位系统:)
auth required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required /lib64/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
完成重启,测试ftpcs账户。
# service vsftpd restart
这个时候虚拟账户ftp登录,只能停留在当前目录,只可上传文件,不能下载,删除。
测试比较匆忙,欢迎补充。