FTP 建立虚拟用户 Ubuntu14或16 系统 以及bug 分析

 

 

Bug 分析

1.首先遇到的一个bug 就是 db4 无法用 apt-get intall db4 安装 ,

  1. sudo apt-get install upgrade 更新之后还是不行。
  2. 解决办法 手动安装ls
  3. 请参考官网

    wget http://launchpadlibrarian.net/100815434/db4.8-util_4.8.30-11ubuntu1_amd64.deb

    dpkg -i db4.8-util_4.8.30-11ubuntu1_amd64.deb #安装包

    wget https://launchpad.net/ubuntu/+archive/primary/+files/libdb4.8_4.8.30-11ubuntu1_amd64.deb

    dpkg -i libdb4.8_4.8.30-11ubuntu1_amd64.deb

     

    此时就可以使用 db4.8_load 命令了

    这里 对应的网站 https://launchpad.net/ubuntu/+source/db4.8

    这个网址上面有对应的库,貌似也有一些其他的库,使用 dpkg 安装还是很靠谱,

    Sudo apt-get install db4.8_util 总是失败。

2.Vsftpd.conf 这个配置文件里面 比如 listen=YES

不要在 等号 前后加空格。

3.不要使用 里面没有的配置选项,否则 service vsftfd start 之后 的

启动之后 这里 的 active

● vsftpd.service - vsftpd FTP server

Loaded: loaded (/lib/systemd/system/vsftpd.service; enabled; vendor preset: enab

Active: failed (Result: exit-code) since Mon 2018-01-15 10:55:34 CST; 1s ago

Process: 6939 ExecStart=/usr/sbin/vsftpd /etc/vsftpd.conf (code=exited, status=2)

Process: 6936 ExecStartPre=/bin/mkdir -p /var/run/vsftpd/empty (code=exited, stat

Main PID: 6939 (code=exited, status=2)

这里的 active 是 failed .

所以不要自己随便写配置语句,不要写没有见过的语句,不要打错,多打一个字母少打一个字母,都会这个样子。

查看时候启动成功的命令 sudo service vsftpd statue

4.除此之外 google 到这个问题做多的结果有两种,一种呢就是 listen_ipv6=YES 这条命令要么注销要么设置为no .

原因是 目前很多国内学校用的都是ipv4 构建的局域网,比如 10.111.111.111 或者192.168.111.111 这种ip (上面两个ip 是我随便敲的)

所以要把那里设置成no

参考http://blog.csdn.net/it_dream_er/article/details/50783111

 

5.另外 还有就是 查看自己的防火墙,查看是否监听 21号端口。经过试验我这两个方面并没有问题。

下面只是把命令罗列在下面:

netstat -an | grep 21    # 查看21号端口

sudo iptables -L        # 查看 防火墙

参考的 https://askubuntu.com/questions/683413/vsftpd-cannot-read-config-file-even-when-file-exists

 

6.除此之外 我还遇到一个 bug 就是 Ubuntu里面的 配置pam 的时候

  1. 大多数 博客给的 方法是

    如果打开这个目录会发现 这个目录并不存在,博主写到这里已经心里憔悴了,我怎么遇到这么多问题!

    通过谷歌搜索 找到了问题,Ubuntu把这个文件放在了

    (原来网站链接 https://stackoverflow.com/questions/42607357/why-is-my-pam-userdb-so-missing

     

/lib/x86_64-linux-gnu/security/pam_userdb.so

这个里面, 当然 不同系统可能位置不一样,如果你发现 我给的这个地址有内容,直接复制 替换 上一张截图的红框里面的 内容.

7. 当我们解决上面的那些问题之后 linux terminal 下面 输入 ftp localhost 就不会refuse 了。

这里终于不refuse 了,而且 我配置文件里面 guest_username=sjwang 这里用sjwang 这个账户终于可以登录进去了

8.但是当我 用我构建的虚拟账户的时候发现依旧在报错。

原因是     pam_service_name=vsftpd.vu  这里我 创建 vsftpd.vu 的时候 少打了一个d.

参考 http://blog.csdn.net/junjunjiao/article/details/50738009

 

似乎大功告成 然后依旧连接不上

把原来这些注销掉居然就可以连接了。博主 此时已经哭了。

我怎么遇到这么多问题。

查了那么多文档。

9.当然此时 还会连接不上 FTP ,

原因很简单 主目录 里面的读取权限 必须去掉。当然 这总权限去掉之后很头疼,自己后台也看不了了。

https://www.liquidweb.com/kb/error-500-oops-vsftpd-refusing-to-run-with-writable-root-inside-chroot-solved/

根据这篇文章的 有个办法就是 allow_writeable_chroot=YES 把这个设置成 true就可以了。

 

除此之外 有人说 连接不上的时候 选择 SFTP 就可以连接了,但是 走的服务 不是 自己搭建的 vsftp 服务,而是linux 本来就有的一套服务。

 

那为什么必须走 vsftp 服务呢,因为学生 提交作业的时候 ,不可以 随便删除别人的作业,也不可以 复制别人的作业,简单来说就是只能上传 其他的什么也做不了。

为什么构建虚拟用户呢?因为如果用真实用户, 真实用户的 用户名和密码可以ssh远程登录 linux 终端,然后依旧可以修改别人的文件,或者复制下来。

那么 把文件读取权限 修改了之后是不是 就可以了呢?比如 限制文件读取权限, 博主已经证明 这么做 行不通,因为 修改了权限之后 FTP 也就无法 写入了,即ftp 也无法上传。

综上所述必须构建 虚拟用户。

 

终于写完了。

 

 

 

 

 

http://blog.csdn.net/liuqinstudy/article/details/8177642

1、创建虚拟用户数据库

首先创建文本文件loginusr.txt.文本文件中的格式为:

user_id

password

于是我们/home/loginusr.txt文件的内容为:

cd /home

sudo touch /home/loginusr.txt

sudo gedit  /home/loginusr.txt

然后将下面的内容粘贴进loginusr.txt文件中去:(下面的内容就是奇数行是用户名,偶数行是密码,依次类推,也就是说1、3、5行分别是三个用户名,2、4、6三行分别是三个用户的密码)

db1

111

db2

222

db3

333

   

然后生成数据库:

如果你电脑上面没有安装过db4.8-util的话就直接执行如下的命令就可以进行安装了(这个工具就是把相应的文本文件转换成相应的数据库文件):sudoapt-get install db4.8-util

sudo touch/etc/vsftpd_login.db

然后执行命令生成数据库文件:sudo db4.8_load -T -t hash -f /home/loginusr.txt   /etc/vsftpd_login.db

最后设置一下数据库文件的访问权限:sudo chmod 600 /etc/vsftpd_login.db

   

配置PAM文件

编辑/etc/pam.d/vsftpd.vu文件将以下的内容复制到文件的前两行:

 

auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login

account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

 

我们上一步建立的数据库文件vsftpd_login在这里被应用(注意不包括后缀名.db)。

我们建立的虚拟用户将采用PAM进行验证,这是通过/etc/vsftpd.conf文件中的语句pam_service_name=vsftpd.vu来启用的,稍后你将发现。

   

接下来就是为虚拟用户创建本地系统用户了:(相当于就是虚拟用户借用本地用户的名去访问ftp服务器)

 

新建一个系统用户vsftpd,用户家目录为/home/vsftpd, 用户登录终端设为/bin/false(即使之不能登录系统)
sudo useradd vsftpd -d /home/vsftpd -s /bin/false


sudo chown vsftpd:vsftpd   /home/vsftpd(设置改目录的所有者和组所有者都是vsftpd)

 

上面就是把一个本地用户和一个目录进行绑定,也就是说这个用户默认访问的地方就是这个绑定的目录

 

然后就是修改配置文件/etc/vsftpd.conf

根据需要创建/etc/vsftpd.conf,一般要确保含有以下设置:

-------------------------------------------------------------------------------------------
listen=YES    #以standalone模式运行vsftpd
anonymous_enable=NO   #禁止匿名访问
dirmessage_enable=YES   #显示目录下的message消息
xferlog_enable=YES     #启用日志
xferlog_file=/var/log/vsftpd.log   #设定日志路径
xferlog_std_format=YES     #使用标准日志格式
chroot_local_user=YES      #限定用户在家目录
guest_enable=YES         #启用虚拟用户
guest_username=vsftpd   #将虚拟用户转换成本地用户vsftpd
user_config_dir=/etc/vsftpd_user_conf  #虚拟用户的配置文件存放目录(虚拟用户db1.db2,db3对应的配置文件db1,db2,db3)
pam_service_name=vsftpd.vu    #指定认定文件
local_enable=YES 
secure_chroot_dir=/var/run/vsftpd    #此句必要

 --------------------------------------------------------------------------------------

现在为止,我们的3个用户都可以工作了,可是它们的根目录现在都是/home/vsftpd,权限也都一样。那么怎么才能完成我们预定的目标呢?

 

在配置文件/etc/vsftpd_user_conf

在上面的配置中,有这么一行

user_config_dir=/etc/vsftpd_user_conf

 

现在,我们要把各个用户的配置文件放到目录/etc/vsftpd_user_conf中

sudo mkdir /etc/vsftpd_user_conf

 

cd   /etc/vsftpd_user_conf 

 

sudo touch db1 db2 db3(注意这里建立的配置文件的文件名必须和用户名一样,应为虚拟用户读取各自的配置文件就是通过文件名来判断是不是自己要的配置文件的。)

 

db1文件中的内容如下

local_root=/home/vsftpd/file1

 

同样,db2文件中的内容

local_root=/home/vsftpd/file2

 

那么,db3的内容呢?其实也很简单

write_enable=YES   #开启全局上传(写)权限

anon_world_readable_only=NO  #关闭匿名用户只读(下载)权限

anon_upload_enable=YES   #开启匿名用户上传权限

anon_mkdir_write_enable=YES   #开启匿名用户建目录权限

anon_other_write_enable=YES#开启匿名用户除上传和建目录之外的写权限(如重命名,删除等)

 
local_root=/home/vsftpd/file3

 ===============================================================================================================

https://www.cnblogs.com/acpp/archive/2010/02/08/1665876.html'

一下内容复制的上面的链接。

VSFTP配置虚拟用户

虚拟用户的特点是只能访问服务器为其提供的FTP服务,而不能访问系统的其它资源。所以,如果想让用户对FTP服务器站内具有写权限,但又不允许访问系统其它资源,可以使用虚拟用户来提高系统的安全性。

    VSFTP中,认证这些虚拟用户使用的是单独的口令库文件(pam_userdb),由可插入认证模块(PAM)认证。使用这种方式更加安全,并且配置更加灵活。
   
下面介绍配置过程。

    1.生成虚拟用户口令库文件。为了建立此口令库文件,先要生成一个文本文件。该文件的格式如下,单数行为用户名,偶数行为口令:

#vi account.txt
ylg
1234
zhanghong
4321
gou
5678
 


    2
.生成口令库文件,并修改其权限:

#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db
 


    3
.新建一个虚拟用户的PAM文件。加上如下两行内容:

#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account
 


    4
.建立虚拟用户,设置该用户所要访问的目录,并设置虚拟用户访问的权限:

#useradd -d /home/ftpsite virtual_user
#chmod 700 /home/ftpsite
 


   
经过该步骤的设置,/home/ftpsite就是virtual_user用户的主目录,该用户也是ftpsite目录的拥有者。除root用户之外,只有该用户具有对该目录的读、写和执行的权限。


    5
.编辑/etc/vsftpd/vsftpd.conf文件,使其整个文件内容如下所示(去掉了注释内容):

anonymous_enable=NO
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
one_process_model=NO
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu
 


   
上面代码中,guest_enable=YES表示启用虚拟用户;guest_username=virtual则是将虚拟用户映射为本地用户,这样虚拟 用户登录后才能进入本地用户virtual的目录/ftpsitepam_service_name=vsftp.vu指定PAM的配置文件为 vsftp.vu

    6.重新启动VSFTP
    #service vsftpd restart

    7.以虚拟用户gouLinux中并无该账号)进行测试:

# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): gou
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
 


   
在虚拟FTP服务器中,也可以对各个用户的权限进行设置。方法是在/etc/vsftpd.conf文件中添加如下一行:
    user_config_dir=
用户配置文件目录

    然后在用户配置文件目录下创建相应的用户配置文件,比如为上述名为gou的用户创建一个配置文件(假设配置文件目录为/etc/vsftpd_user_conf):

#vi /etc/vsftpd_user_conf/gou
write_enable=NO
anono_upload_enable=NO
 
   8.
虚拟用户个人目录设置

  大家可以发现,无论是哪个虚拟用户,登录后所在的目录都是/home/ftpsite,即都是guest用户的自家目录。下面,介绍如何为每个虚拟用户建立自家目录。
  一种作法是在虚拟用户的个人配置文件中使用local_root选项指定虚拟用户的自家目录。以gou为例,在第上步的基础上,首先/etc/vsftpd_user_conf/gou文件中加入:
  local_root=/home/ftpsite/gou

  /home/ftpsite下新建gou目录,并将权限设为virtual_user


  9.
添加FTP用户的步骤

      1.account.txt中添加用户名和密码

      2.运行如下命令,将用户名和密码添加到数据库中

        db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db

      3./home/ftpsite中新建一个文件夹,与用户明相同

      4.vsftpd_user_conf文件夹下新建和用户名相同的文件,并在其中加入
       local_root=/home/ftpsite/
用户名

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值