RHEL4.8 配置vsftpd

教程发布:风哥 教程分类:ITPUX技术网 更新日期:2022-02-12 浏览学习:273

目的 : 通过设定ftp 服务器, 让使用通过特定的ftp用户上传照片压缩包文件,并且该用户只能上传文件, 不能删除文件, 不能浏览文件,也不能覆盖之前已经存在的同名文件
实现 : 实现 linux 系统实体用户 和 vsftpd 虚拟用户 均能正常登陆ftp 服务器。 实现单个用户个性化权限指定
环境 :
OS -> Linux webfep 2.6.9-89.ELsmp #1 SMP Mon Apr 20 10:34:33 EDT 2009 i686 i686 i386 GNU/Linux 【uname -a】
ftp -> vsFTPd 2.0.1

1. 添加linux 系统实体用户, 但禁止该用户通过终端登陆
/usr/sbin/useradd his_ftp -s /sbin/nologin
echo "his_ftp"| passwd --stdin his_ftp

2. 配置vsftpd 服务器
*** 禁止匿名登陆
anonymous_enable=NO

*** 允许 linux 系统实体用户登陆
local_enable=YES

*** 设定使用主机的时间
use_localtime=YES
vsftpd默认使用 GMT 时间(格林威治),会比本地市区时间晚 8 小时,一般来说,建议设定为 YES

*** 设定vsftpd服务运行时最底层时使用操作系统的用户名
nopriv_user=nobody

***禁止系统实体用户ftp登陆服务器之后切换到上级目录
chroot_local_user=YES

当启用上述设定之后, 如下设定

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

的功能,成了在 /etc/vsftpd/chroot_list 内容的用户名可以切换到上级目录;

*** 限定使用者在指定的时间(秒)内无任何操作强制离线
idle_session_timeout=300

*** 限定网络超时等待时间(秒)
data_connection_timeout=300

*** 限定同一个IP同一时间连接
max_per_ip=1
注: 暂不启用,考虑嘉兴等通过区域前置 iptables 转发 ftp 文件时,上送的是区域前置地区内网IP地址, 非医院真实IP地址

*** 设定vsftpd 服务启用vsftpd_log_file 形式的日志
xferlog_std_format=NO
日志文件为 /var/log/vsftpd.log, 记录日志内容比xferlog_file形式更直观详细

$$$$$ 使用 linux 系统实体用户 $$$$$
*** 限制指定的系统实体用户才允许登陆ftp 服务器,设定如下:
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

在文件/etc/vsftpd/user_list 中添加允许登陆ftp 的用户名
echo his_ftp >> /etc/vsftpd/user_list

$$$$ 使用用vsftpd 虚拟用户 $$$$$$
*** 设定启用虚拟用户功能
guest_enable=YES
注: 开启,表示所有非匿名登陆的用户名都会被切换成guest_username指定的用户名

*** 指定虚拟用户的宿主用户(即linux系统实体用户)
guest_username=virtual

*** 设定虚拟用户的权限符合他们的宿主用户
virtual_use_local_privs=YES
注意: 此设置决定ftp 虚拟用户能否查看系统主机上虚拟主目录下的文件

问题: 如何单独指定ftp 用户的权限???
*** 设定虚拟用户个人Vsftp的配置文件存放路径,借此激活单个用户配置功能
user_config_dir=/etc/vsftpd/vconf
在这个被指定的目录里,将存放每个Vsftp虚拟用户个性化的配置文件,注意:用户各自配置文件名必须和虚拟用户名相同

vsftpd虚拟用户设置权限
[url]http://www.tisswb.cn/archives/18.html
权限设定:
write_enable=YES #允许写入
anon_upload_enable=YES #允许上传
anon_mkdir_write_enable=YES #允许创建目录
download_enable=NO #禁止下载
anon_other_write_enable=NO #禁止更名、删除目录等其他写权限
anon_world_readable_only=NO #允许下载

2.
#%PAM-1.0

auth sufficient pam_userdb.so db=/etc/vsftpd/virtusers
account sufficient pam_userdb.so db=/etc/vsftpd/virtusers

//这里选择sufficient而不是required的原因是,sufficient表示充分条件,可以让vsftpd同时支持虚拟用户和本地用户。
其后的sufficient表示充分条件,也就是说,一旦在这里通过了验证,那么也就不用经过下面剩下的验证步骤了。相反,如果没有通过的话,也不会被系统立即挡之门外,因为sufficient的失败不决定整个验证的失败,意味着用户还必须将经历剩下来的验证审核

虚拟用户高级设置([url]http://www.testtimes.net/html/2/2-4776.html):

virtual_use_local_privs参数

当 virtual_use_local_privs=YES时,虚拟用户和本地用户有相同的权限;
当 virtual_use_local_privs=NO时,虚拟用户和匿名用户有相同的权限,默认是NO。

当 virtual_use_local_privs=YES,write_enable=YES时,虚拟用户具有写权限(上传、下载、删除、重命名)。

当 virtual_use_local_privs=NO, write_enable=YES,
anon_world_readable_only=YES,anon_upload_enable=YES 时,虚拟用户不能浏览目录,只能上传文件,无其他权限。
当 virtual_use_local_privs=NO, write_enable=YES,
anon_world_readable_only=NO,anon_upload_enable=NO 时,虚拟用户只能下载文件,无其他权限。
当 virtual_use_local_privs=NO, write_enable=YES,
anon_world_readable_only=NO,anon_upload_enable=YES 时,虚拟用户只能上传和下载文件,无其他权限。
当 virtual_use_local_privs=NO, write_enable=YES,
anon_world_readable_only=NO,anon_mkdir_write_enable=YES 时,虚拟用户只能下载文件和创建文件夹,无其他权限。
当 virtual_use_local_privs=NO, write_enable=YES,
anon_world_readable_only=NO,anon_other_write_enable=YES 时,虚拟用户只能下载、删除和重命名文件,无其他权限。

[url]http://www.ansen.org/vsftpd-configuration-detailed.html

ftp 虚拟用户配置脚本

########################ftp_config.sh ############################################################
#!/bin/bash

#check vsftpd installed ??
rpm -qa | grep vsftp >/dev/null
if [ "$?" -eq 1 ]; then
[ -f vsftpd*.rpm ] && rpm -ivh vsftpd*.rpm && chkconfig vsftpd on
[ ! -f vsftpd*.rpm ] && { printf "vsftpd rpm package not found, please install first! "; exit; }
fi

FTP_BASE=/etc/vsftpd
FTP_VU_FILE=${FTP_BASE}/logins.txt
FTP_VU_DB=${FTP_BASE}/vsftpd_login
FTP_CONF=${FTP_BASE}/vsftpd.conf
FTP_HOST_USER=virtual
FTP_USERCFG_DIR=${FTP_BASE}/vsftpd_user_conf

[ -f ${FTP_VU_FILE} ] && rm -f ${FTP_VU_FILE}
touch ${FTP_VU_FILE}
### user list
# username
echo download_ftp >> ${FTP_VU_FILE}
# password
echo download_ftp >> ${FTP_VU_FILE}
echo his_ftp >> ${FTP_VU_FILE}
echo his_ftp >> ${FTP_VU_FILE}

db_load -T -t hash -f ${FTP_VU_FILE} ${FTP_VU_DB}.db

chmod 600 ${FTP_VU_DB}
## modify pam config file, check ftp virtula user first
#note: the content in file /etc/pam.d/vsftpd place, line 3
sed -i 2"i\account sufficient /lib/security/pam_userdb.so db=${FTP_VU_DB}" /etc/pam.d/vsftpd
#note: the content in file /etc/pam.d/vsftpd place, line 2
sed -i 2"i\auth sufficient /lib/security/pam_userdb.so db=${FTP_VU_DB}" /etc/pam.d/vsftpd

#add linux sytem user for host user of ftp virtual users
################################################################################
/usr/sbin/useradd -d /home/${FTP_HOST_USER} -s /sbin/nologin ${FTP_HOST_USER}
chmod 700 /home/${FTP_HOST_USER}

#modify vsftpd conf
################################################################################
cp ${FTP_CONF} ${FTP_CONF}_`date "+%Y%m%d%H%M"`_bak
echo "guest_enable=YES" >> ${FTP_CONF}
echo "guest_username=${FTP_HOST_USER}" >> ${FTP_CONF}
echo "virtual_use_local_privs=YES" >> ${FTP_CONF}
echo "user_config_dir=${FTP_USERCFG_DIR}" >> ${FTP_CONF}
echo "use_localtime=YES" >> ${FTP_CONF}

sed -i 's/anonymous_enable=YES/anonymous_enable=NO/g' ${FTP_CONF}
sed -i 's/#nopriv_user=ftpsecure/nopriv_user=nobody/g' ${FTP_CONF}
sed -i 's/^xferlog_std_format=YES/xferlog_std_format=NO/g' ${FTP_CONF}

################################################################################
#create only download user file

[ ! -d ${FTP_USERCFG_DIR} ] && mkdir ${FTP_USERCFG_DIR}
# create ftp virtual user config file
# only download
echo "anon_world_readable_only=NO" > ${FTP_USERCFG_DIR}/download_ftp
mkdir /home/${FTP_HOST_USER}/download_ftp
chown ${FTP_HOST_USER}:${FTP_HOST_USER} /home/${FTP_HOST_USER}/download_ftp
echo "local_root=/home/${FTP_HOST_USER}/download_ftp" >> ${FTP_USERCFG_DIR}/download_ftp
chmod 700 ${FTP_USERCFG_DIR}/download_ftp

# only upload
echo "download_enable=NO" > ${FTP_USERCFG_DIR}/his_ftp
echo "write_enable=YES" >> ${FTP_USERCFG_DIR}/his_ftp
echo "anon_upload_enable=YES" >> ${FTP_USERCFG_DIR}/his_ftp
#echo "anon_mkdir_write_enable=YES" >> ${FTP_USERCFG_DIR}/his_ftp
mkdir /home/${FTP_HOST_USER}/his_ftp
chown ${FTP_HOST_USER}:${FTP_HOST_USER} /home/${FTP_HOST_USER}/his_ftp
echo "local_root=/home/${FTP_HOST_USER}/his_ftp" >> ${FTP_USERCFG_DIR}/his_ftp
chmod 700 ${FTP_USERCFG_DIR}/his_ftp
################################################################################

service vsftpd restart > /dev/null

本文标签:
本文标题:RHEL4.8 配置vsftpd
网站声明:本文由风哥整理发布,转载请保留此段声明,本站所有内容将不对其使用后果做任何承诺,请读者谨慎使用!
【上一篇】
【下一篇】