君子慎独

君子戒慎乎其所不睹,恐惧乎其所不闻。莫见乎隐,莫显乎微,故君子慎其独也。

vsftpd配置FTP服务器多用户多目录多权限访问 599

作者为 发表

常用软件

网上有不少文章指导我们使用vsftpd建立FTP服务器, 实现多用户多目录多权限访问, 但却极少提及如何让一个FTP用户访问除自己主目录以外的多个目录, 现将自己在建立FTP服务器中过程记录下来, 以备将来再次安装时参考.

  • 操作系统: CentOS6.5 x64
  • vsftpd版本: 2.2.2-13.el6_6.1

 

安装vsftpd

yum install -y vsftpd

 

配置 vsftpd.conf

vsftpd的配置文件在/etc/vsftpd/vsftpd.conf, 下面仅列出需要修改或添加的项目, 其它配置项保持默认即可.

nonymous_enable=NO          // 不允许匿名用户登陆


chroot_local_user=YES       // 设定用户在各个的主目录中
chroot_list_enable=YES      // 设置许可用户清单


// 如果chroot_local_user=YES, 默认所有用户均设定各自的主目录,
//   但chroot_list_file文件列表中的用户例外, 允许访问主目录以外的其它目录;
// 如果chroot_local_user=NO, 默认所有的用户均可访问所有目录,
//   但chroot_list_file文件列表中的用户例外, 仅允许访问各自的主目录;
chroot_list_file=/etc/vsftpd/chroot_list


guest_enable=YES            // 启用虚拟账户
guest_username=ftp_user     // 虚拟账户对应的系统用户
pam_service_name=vsftpd     // 指向 /etc/pam.d/vsftpd


// 为每一位虚拟账户定义用户配置文件路径
user_config_dir=/etc/vsftpd/ftp_virtual_user_conf

 

创建FTP虚拟账户

在vsftpd的配置路径 /etc/vsftpd 中创建文件文件 ftp_virtual_user.txt, 文件第一行保存FTP虚拟账户名,第二行保存对应的密码,依此类推, 为FTP设置多个用户.

admin_ftp	# FTP虚拟账户1的用户名
2U*8d@t4	# FTP虚拟账户1的密码
user1		# FTP虚拟账户2的用户名
*eSurw+f	# FTP虚拟账户2的密码
user2		# FTP虚拟账户3的用户名
cbEP3TXF	# FTP虚拟账户3的密码
		# '#'号后的为注释, 不写入ftp_virtual_user.txt

使用db_load命令将ftp_virtual_user.txt转换为账户数据文件ftp_virtual_user.db:

db_load -T -t hash -f ftp_virtual_user.txt ftp_virtual_user.db

编辑/etc/pam.d/vsftpd, 设置刚才生成的账户数据文件关联FTP登陆:

#%PAM-1.0
session    optional     pam_keyinit.so    force revoke
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth       required     pam_shells.so
auth       include      password-auth
account    include      password-auth
session    required     pam_loginuid.so
session    include      password-auth

# add the following two lines at the end of the file
auth    required        pam_userdb.so   db=/etc/vsftpd/ftp_virtual_user.db
account required        pam_userdb.so   db=/etc/vsftpd/ftp_virtual_user.db

建立本地账户 ftp_user (即在vsftpd.conf中guest_username的值), 通过 ftp_user 将本账户与登陆FTP的虚拟账户进行关联:

// -g: 为ftp_user关联ftp组
// -s: 设置ftp_user不可用于系统登陆
useradd -g ftp -s /sbin/nologin ftp_user

 

设置FTP虚拟账户访问权限

清空文件/etc/vsftpd/chroot_list的内容,使所有FTP虚拟账户只能访问各自的主目录

假定FTP服务器的根目录在/var/ftp, 包含三个子文件夹Doc1, Doc2, Doc3, 用户访问需求如下:

  • 用户user1: 可完全访问/var/ftp/Doc1/var/ftp/Doc2
  • 用户user2: 只读访问/var/ftp/Doc2/var/ftp/Doc3

/etc/vsftpd/ftp_virtual_user_conf目录下为每一位用户创建各自的FTP配置文件,并添加’.conf’后缀:

# user1.conf
write_enable=YES		# 目录可写
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/var/ftp/Doc1	# 用户主目录

# user2.conf
write_enable=NO			
anon_world_readable_only=YES	# 只允许读(下载)
local_root=/var/ftp/Doc3	# 用户主目录

 

设置单用户访问多目录

如要使一个用户可以访问其主目录外的其它位置, 不能使用 ln 命令建立链接, 但可以使用 mount 命令挂载, 实现多目录的访问.

mkdir /var/ftp/Doc1/Doc2
# 将 /var/ftp/Doc3/Doc2 挂载到 /var/ftp/Doc1/Doc2
mount --bind /var/ftp/Doc2 /var/ftp/Doc1/Doc2
mkdir /var/ftp/Doc3/Doc2
# 将 /var/ftp/Doc3/Doc2 挂载到 /var/ftp/Doc3/Doc2
mount --bind /var/ftp/Doc2 /var/ftp/Doc3/Doc2

可以通过 mount 查看挂载后的记录:

root@/var/ftp$mount
/dev/vda1 on / type ext3 (rw,noatime,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/var/ftp/Doc2 on /var/ftp/Doc1/Doc2 type none (rw,bind)
/var/ftp/Doc2 on /var/ftp/Doc3/Doc2 type none (rw,bind)

以上方法仅在当前系统中挂载, 操作系统重启后, mount记录将丢失, 可以通过修改/etc/fstab配置文件, 在文件最后面添加如下内容:

mkdir /var/ftp/Doc1/Doc2
/var/ftp/Doc1/Doc2	/var/ftp/Doc1/Doc2	none	bind	0	0
/var/ftp/Doc1/Doc2	/var/ftp/Doc3/Doc2	none	bind	0	0

 

重启vsftpd服务

service vsftpd restart		# 重启vsftpd服务
chkconfig vsftpd on		# 配置vsftpd服务开机启动

来了就留个评论吧! 没有评论





 主题设计 • skyfrit.com  君子慎独 | 保留所有权利

61 queries in 0.251 seconds |