Linux系统搭建多用户多目录不同权限访问的FTP服务器

1 安装服务

[root@host-192-168-9-19 home]# yum -y install vsftpd

2 创建访问目录

创建一个本地系统用户adapter并指定其家目录,并建立相应的子目录

[root@host-192-168-9-19 home]# useradd -d /home/adapter adapter -s /sbin/nologin
useradd:警告:此主目录已经存在。
不从 skel 目录里向其中复制任何文件。
[root@host-192-168-9-19 home]# tree adapter/
adapter/
├── 打印机组
├── 公共组
├── 软件组
├── 外设组
└── 支撑组

5 directories, 0 files
[root@host-192-168-9-19 home]# chmod 755 /home/adapter*
[root@host-192-168-9-19 home]# chown -R adapter:adapter /home/adapter/

3 创建用户数据文件

1、创建数据文本文件
我们需要主要在数据文本文件中必须一行账号一行密码,不要有空行,不要有空格
所有密码此处示例设为123456。

[root@host-192-168-9-19 home]# vim /etc/vsftpd/userlist.txt
admin
123456
test1
123456
test2
123456
test3
123456
test4
123456
test5
123456

2、生成数据文件并修改访问权限
db_load:一般系统都有安装,db4,db4-devel,db4-utils ,如果没有的话可以安装:

[root@host-192-168-9-19 home]# yum -y install db4* 
[root@host-192-168-9-19 home]# db_load -T -t hash -f /etc/vsftpd/userlist.txt /etc/vsftpd/userlist.db
[root@host-192-168-9-19 home]# chmod 600 /etc/vsftpd/userlist.db

注:生成之后可将userlist.txt删除或备份。

4 修改pam配置

[root@host-192-168-9-19 home]# vim /etc/pam.d/vsftpd 
##将原来的全部注释掉,加入: 
auth sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/userlist
account sufficient /lib64/security/pam_userdb.so db=/etc/vsftpd/userlist

注意:db=/etc/vsftpd/vsftpd_login 后面的.db必须去掉;64位机需要使用lib64(这里折腾了好久,有的是lib有的是lib64);

5 创建本地系统用户adapter对应的虚拟账户

虚拟用户需要通过本地系统用户来实现各种操作,因此要放在系统用户的同名文件夹下。每一个虚拟用户都要有一个同名的文件,文件里记载其权限以及可操作的目录;

[root@host-192-168-9-19 home]# mkdir /etc/vfstpd/adapter
[root@host-192-168-9-19 home]# cd  /etc/vfstpd/adapter
[root@host-192-168-9-19 home]# cat /etc/vsftpd/adapter/admin 
anon_world_readable_only=NO
write_enable=YES
anon_mkdir_write_enable=YES
anon_upload_enable=YES
anon_other_write_enable=YES
local_root=/home/adapter
[root@host-192-168-9-19 home]# cat /etc/vsftpd/adapter/test1 
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_world_readable_only=NO
download_enable=YES
local_root=/home/adapter/软件组
cmds_denied=DELE

注:由于test系列用户权限一致,这里只展示test1用户配置信息
下面对各个关键字段进行解释

local_root=/home/ftp
anon_world_readable_only=NO
write_enable=YES (写权限)
anon_mkdir_write_enable=YES (新建目录权限)
anon_upload_enable=YES(上传权限)
anon_other_write_enable=YES(删除/重命名的权限)
cmds_denied=DELE(删除权限)

6 设置ftp服务配置文件

[root@host-192-168-9-19 home]# vim /etc/vsftpd/vsftpd.conf
##修改内容如下:
listen=YES
#表示vsftpd是以stand alone的方式来启动
connect_from_port_20=YES
#ftp数据传输的端口号
anonymous_enable=NO
#表示不允许匿名登录ftp服务器
local_enable=YES
#这个设置值必须为YES,在/etc/passwd内的账号才能以尸体用户的方式登录ftp服务器
write_enable=NO
#不允许用户上传数据
anon_upload_enable=NO
#表示匿名用户没有上传数据的功能
anon_mkdir_write_enable=NO
#表示匿名用户没有建立目录的权限
anon_other_write_enable=NO
#表示匿名用户没有删除与修改服务器上的文件及文件名等权限
chroot_local_user=YES
#将用户限制在自己的用户主目录之内(chroot)
chroot_list_enable=YES
#启动chroot写入列表的功能
chroot_list_file=/etc/vsftpd/chroot_list
#表明chroot_list文件位置
guest_enable=YES
#任何实体账号,均会被假设成为guest
guest_username=adapter
#指定访客的身份为adapter
virtual_use_local_privs=YES
#虚拟用户和本地用户有相同的权限
allow_writeable_chroot=YES
#表示用户只能访问自身所属目录
pam_service_name=vsftpd
#PAM模块的名称,主要用来作为身份认证之用
user_config_dir=/etc/vsftpd/adapter
local_umask=022
#表示实体用户新建的目录权限是755
xferlog_enable=YES
#用户上传与下载文件都会被记录下来
xferlog_file=/var/log/vsftpd.log
#日志文件路径及文件名

7 创建chroot_list文件

[root@host-192-168-9-19 home]# vim /etc/vsftp/chroot_list
##里面啥也不写

chroot_list文件默认是不存在的;主要功能是可以将某些账号的用户chroot建立在他们的默认用户主目录下。如果想要将某些实体用户限制在他们的主目录下而不许到其他目录去,可以启动这个设置项目

8 启动服务

[root@host-192-168-9-19 home]# systemctl start vsftpd.service
[root@host-192-168-9-19 home]# systemctl stop firewalld

9 设置多用户访问多目录

在做项目时,客户需要FTP同时访问两个目录,要清楚,在建FTP时,都是一个用户对应一个目录,当FTP用户登录后,就只访问当前目录,如果需要访问到其他目录,得另想办法。
刚开始以为使用链接可以实现这个功能,但是发现链接成功了,但是使用ftp是不可以访问的,因此使用链接访问多目录方法是不成功的。
解决方法:
使用mount的方法,把目录挂到,原来的目录中,
例如:用户test要同时访问到目录/data1、/data2
在test用户目录下新建两个目录test1、test2
然把把/data1、/data2挂到对应的test1、test2

mount --bind /data1 /home/test/test1
mount --bind /data2 /home/test/test2

以上信息只是在内存进行了inode的更改,所以服务器重启还会丢失。需要在/etc/fstab中添加目录挂载命令。

[root@host-192-168-9-19 home]# copy /etc/fstab /etc/fstab_bak 备份一下吧
[root@host-192-168-9-19 home]# vi /etc/fstab  
##添加如下内容到文件中
/home/adapter/0_临时文件 /home/kylin/打印机组/0_临时文件 none bind 0 0
/home/adapter/0_临时文件 /home/kylin/软件组/0_临时文件 none bind 0 0
/home/adapter/0_临时文件 /home/kylin/支撑组/0_临时文件 none bind 0 0
/home/adapter/0_临时文件 /home/kylin/外设组/0_临时文件 none bind 0 0
Logo

更多推荐