LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 101855|回复: 275

用vsFTPd自架Linux网络安装服务器[不断更新]

[复制链接]
发表于 2003-5-26 14:45:38 | 显示全部楼层 |阅读模式

为了验证局域网网络安装Linux,近两天做了一个实验,目的就是为了写一个比较完整的帖子。

约定:

1。本帖操作环境是Redhat 9.0,vsFTPd的版本是Redhat 9.0所带的vsftpd-1.1.3-8.i386.rpm,在安装盘的第三张中

2。vsFTPd实现的最基本的目的:用系统中存在的真实用户能登入FTP,能用匿名访问。

3。本帖中vsFTPd运行模式是在standalone模式下运行的,也就是说,本帖中vsFTPd所有的功能都是在standalone模式下运行的。至于有些功能是否能在xinetd模式下运行,您就得测试了,不能照搬照抄。因为有些功能是必须运行在特定的模式下的。


3。服务器的IP和和DNS设定

第一块网卡
IP:192.168.0.1
子掩码:255.255.255.0
网关不设置:
第二块网卡:
IP:192.168.0.2
子掩码:255.255.255.0
网关不设置

因为我的操作环境是一个小型的局域网,所以其它的机器的IP都是在192.168.0这个网段上。ADSL是接在服务器的第一个网卡上。服务器的第二个网卡是接集线器,其它的客户机都是接在集线器上。为了能让ADSL访问internet,因为自己手动设置了IP,所以DNS也要自己来设置,DNS如下:

202.96.134.133
202.96.168.68

设置工具是:

[root@linuxsir001 root]# redhat-config-network

相应参考资料:vsFTPd官方文档:

http://www.linuxsir.cn/forum.php?mod=viewthread&tid=43451

一。用vsFTPd来架设FTP服务器,vsFTPd服务器是目前最好的FTP服务器软件,优点是体积小,可定制强,效率高

1。查看是否安装了vsFTPd软件
[root@linuxsir001 root]# rpm -qa | grep vsftpd
如果没有任何显示,说明没有把vsFTPd安装上,如果出现的是下面的这样的提示,就证明已经安装上了。

[root@linuxsir001 root]# rpm -qa | grep vsftpd
vsftpd-1.1.3-8

我以Redhat 9.0,以其自带的vsFTPd包vsftpd-1.1.3-8版本来为本帖约定。

[root@linuxsir001 root]# rpm -ivh vsftpd*.rpm

2。打开vsFTPd服务器。

[root@linuxsir001 root]# ntsysv

把vsftpd服务器打开,也就是在运行 ntsysv命令后,把vsftpd服务选中。

  • vsftpd   

    3。运行/etc/init.d/vsftpd start

    [root@linuxsir001 root]# /etc/init.d/vsftpd start
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    4。配制vsFTPd,vsFTPd的运行有两种模式,一种是standalone "initd"模式,另外一种是xinetd模式,上面我们所说的就是standalone "initd"运行模式。两种模式运行机制不是相同的,stardard initd模式,适合专业FTP,且FTP总是一直有人访问,占用资源也是比较大,如果您的FTP总是有人访问和登入。就要用这种模式。如果您的FTP访问人数比较小,建议您用xinetd模式。xinetd模式,是当用户请求时,vsFTPd才会启动。

    不同的环境,当然得用不同的启动模式。

    如果想了解更多的,请在本帖后面跟帖,我会慢慢补充xinetd模式,以及虚拟用户如何设置方面的问题。


    1]我们主要把vsFTPd的配制文件改一下就行了。配制文件在/etc/vsftpd/vsftpd.conf,用您喜欢的编辑器打开。请参考下面的配制文件。


    # Example config file /etc/vsftpd.conf
    #
    # The default compiled in settings are very paranoid. This sample file
    # loosens things up a bit, to make the ftp daemon more usable.
    #
    # Allow anonymous FTP?
    anonymous_enable=YES
    #
    # Uncomment this to allow local users to log in.
    local_enable=YES
    #
    # Uncomment this to enable any form of FTP write command.
    write_enable=YES
    #
    # Default umask for local users is 077. You may wish to change this to 022,
    # if your users expect that (022 is used by most other ftpd's)
    local_umask=022
    #
    # Uncomment this to allow the anonymous FTP user to upload files. This only
    # has an effect if the above global write enable is activated. Also, you will
    # obviously need to create a directory writable by the FTP user.
    #anon_upload_enable=YES
    #
    # Uncomment this if you want the anonymous FTP user to be able to create
    # new directories.
    #anon_mkdir_write_enable=YES
    #
    # Activate directory messages - messages given to remote users when they
    # go into a certain directory.
    dirmessage_enable=YES
    #
    # Activate logging of uploads/downloads.
    xferlog_enable=YES
    #
    # Make sure PORT transfer connections originate from port 20 (ftp-data).
    connect_from_port_20=YES
    #
    # If you want, you can arrange for uploaded anonymous files to be owned by
    # a different user. Note! Using "root" for uploaded files is not
    # recommended!
    #chown_uploads=YES
    #chown_username=whoever
    #
    # You may override where the log file goes if you like. The default is shown
    # below.
    #xferlog_file=/var/log/vsftpd.log
    #
    # If you want, you can have your log file in standard ftpd xferlog format
    xferlog_std_format=YES
    #
    # You may change the default value for timing out an idle session.
    #idle_session_timeout=600
    #
    # You may change the default value for timing out a data connection.
    #data_connection_timeout=120
    #
    # It is recommended that you define on your system a unique user which the
    # ftp server can use as a totally isolated and unprivileged user.
    #nopriv_user=ftpsecure
    #
    # Enable this and the server will recognise asynchronous ABOR requests. Not
    # recommended for security (the code is non-trivial). Not enabling it,
    # however, may confuse older FTP clients.
    #async_abor_enable=YES
    #
    # By default the server will pretend to allow ASCII mode but in fact ignore
    # the request. Turn on the below options to have the server actually do ASCII
    # mangling on files when in ASCII mode.
    # Beware that turning on ascii_download_enable enables malicious remote parties
    # to consume your I/O resources, by issuing the command "SIZE /big/file" in
    # ASCII mode.
    # These ASCII options are split into upload and download because you may wish
    # to enable ASCII uploads (to prevent uploaded scripts etc. from breaking),
    # without the DoS risk of SIZE and ASCII downloads. ASCII mangling should be
    # on the client anyway..
    #ascii_upload_enable=YES
    #ascii_download_enable=YES
    #
    # You may fully customise the login banner string:
    #ftpd_banner=Welcome to blah FTP service.
    #
    # You may specify a file of disallowed anonymous e-mail addresses. Apparently
    # useful for combatting certain DoS attacks.
    #deny_email_enable=YES
    # (default follows)
    #banned_email_file=/etc/vsftpd.banned_emails
    #
    # You may specify an explicit list of local users to chroot() to their home
    # directory. If chroot_local_user is YES, then this list becomes a list of
    # users to NOT chroot().
    #chroot_list_enable=YES
    # (default follows)
    #chroot_list_file=/etc/vsftpd.chroot_list
    #
    # You may activate the "-R" option to the builtin ls. This is disabled by
    # default to avoid remote users being able to cause excessive I/O on large
    # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
    # the presence of the "-R" option, so there is a strong case for enabling it.
    #ls_recurse_enable=YES

    pam_service_name=vsftpd
    userlist_enable=YES
    #enable for standalone mode
    listen=YES
    tcp_wrappers=YES

    2]更改完配制文件后,我们可以用下面的命令来重启vsFTPd服务器

    [root@linuxsir001 root]# /etc/init.d/vsftpd restart
    关闭 vsftpd:                                              [  确定  ]
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    3]以匿名方式来访问测试,在text模式下:

    注意:在text模式下,要用用户名ftp,密码ftp来访问,这才是在text中匿名访问FTP。看如下的操作:

    [root@linuxsir001 root]# ftp 192.168.0.1
    Connected to 192.168.0.1.
    220 (vsFTPd 1.1.3)
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (192.168.0.1:root): ftp 这里写上ftp
    331 Please specify the password.
    Password:[这里添写ftp的密码],匿名登入密码也是ftp
    230 Login successful. Have fun.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,0,1,137,151)
    150 Here comes the directory listing.
    drwxr-xr-x    6 0        0            4096 May 25 13:54 RedHat90
    drwxr-xr-x    2 0        0            4096 Feb 28 19:21 pub
    226 Directory send OK.
    ftp>
    那匿名用户所访问的是哪个目录?是/var/ftp这个目录

    出现问题的解决:有时出错,是因为没有ftp和nobody用户,所以要在系统中添加这两个用户,一般的情况下,这两个用户在系统中是存在的。看下面的操作。
    [root@linuxsir001 root]# adduser ftp
    adduser: user ftp exists
    [root@linuxsir001 root]# adduser nobody
    adduser: user nobody exists

    从上面的操作中可知ftp和nobody用户是存在的,所以没有必要添加ftp和nobody用户了。如果不存在,一定要添加这两个用户,否则会出现匿名用户不能访问的情况。

    4]如果要以系统中存在的普通用户登入FTP,也没有什么可以设置的,添加一个用户就行。比如我要添加beinan这个用户,就要用下面的办法

    [root@linuxsir001 root]# adduser beinan
    [root@linuxsir001 root]# passwd beinan
    Changing password for user beinan.
    New password:
    BAD PASSWORD: it does not contain enough DIFFERENT characters
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@linuxsir001 root]#

    这样的话,就在/home目录中出现一个beinan的用户目录:如下:

    [root@linuxsir001 root]# ls /home/
    beinan  


    如果我们想让beinan这个用户作为虚拟用户,也就是说,beinan这个用户是不能登入系统的,只能是登入FTP。 那这样的用户应该如何添加呢??

    [root@linuxsir001 backupNow]# adduser -g ftp -s /sbin/nologin beinan
    [root@linuxsir001 backupNow]# passwd beinan
    Changing password for user beinan.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@linuxsir001 backupNow]#

    注:这仅仅是vsFTPd添加虚拟用户的一个方法,还有更好的办法需要我们去学习!另外的办法也在测试之中。严格上来说,这种办法不能算虚拟用户。还有另外的一个办法,就是通过pam认证,用db_load来添加用户,目前我也弄成功了,不过相对要复杂一点。正在测试之中。


    如果我们想把用户目录定位到别的目录应该怎么办呢??这个也比较简单,看一下useradd就比较明白了。比如我想添加beinan这个用户,并把目录放在/opt目录中:如下操作:

    [root@linuxsir001 root]# adduser -d /opt/beinan beinan
    [root@linuxsir001 root]# passwd beinan
    Changing password for user beinan.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.

    如果是添加虚拟用户,也就是不让用户登入系统,只能登入FTP的用户。如果我们想把beinan这个用户目录定位在/opt/beinan这个目录中,根据上面的方法。我们应该如下操作
    [root@linuxsir001 backupNow]# adduser  -d /opt/beinan -g ftp -s /sbin/nologin beinan
    [root@linuxsir001 backupNow]# passwd beinan
    Changing password for user beinan.
    New password:
    Retype new password:
    passwd: all authentication tokens updated successfully.
    [root@linuxsir001 backupNow]#

    看一下是不是已经成功添加到了beinan这个用户,并把beinan的家目录放在了/opt目录中呢??

    [root@linuxsir001 root]# ls /opt/
    beinan

    证明已经成功。

    我们可以在text模式下以beinan用户登入,然后来访问ftp。

    [root@linuxsir001 root]# ftp 192.168.0.1
    Connected to 192.168.0.1.
    220 (vsFTPd 1.1.3)
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (192.168.0.1:root): beinan
    331 Please specify the password.
    Password:
    230 Login successful. Have fun.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp>

    是不是成功了???

    我们也可以用gftp来访问beinan用户,并上传相应的东西,所传上的东西就放在beinan用户所在的家目录中,普通用户的家目录在哪里,写您所用的添加用户的方法有关。我在前面已经说了两种办法,一种是默认的添加方法,就是放在/home目录中。

    在本例中,我是采用默认的添加用户的方法。也就是不特别指定用户用户,这样的话,用户目录就在/home目录中。比如用beinan登入FTP时,访问的就是/home/beinan这个目录。让传的东西也在这个目录中。

    那匿名用户所访问的是哪个目录呢???

    应该是:/var/ftp这个目录


    5]访问ftp的几种方法

    第一种方法就是text访问,也就是用ftp命令来访问。这个前面已经说过了。

    第二种方法是以客户端FTP软件来访问,在linux中有gftp。在本例中,我的FTP地址是通过局域网访问的。地址栏中,添上192.168.0.1,端口是21,用户名和密码的添写,如果您是用匿名登入,请不要添写用户名和密码。如果用普通用户登入,这个是必须要用用户名和密码的。

    第三种办法是和浏览器访问:如果匿名登入,就直接用下面的方法:
    ftp://192.168.0.1
    如果是用户登入方式,应该是
    ftp://beinan@192.168.0.1

    如果想让在互联网上的用户能访问到,如果您是用ADSL来访问互联网,要查找到您的动态IP,用下面的办法
    [root@linuxsir001 root]# ifconfig ppp0
    ppp0      Link encapoint-to-Point Protocol
              inet addr:218.61.7.23  P-t-P:218.61.7.1  Mask:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
              RX packets:24245 errors:0 dropped:0 overruns:0 frame:0
              TX packets:20411 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:3
              RX bytes:23103297 (22.0 Mb)  TX bytes:3588337 (3.4 Mb)

    从上面的可以知道,能让在internet访问的地址是:218.61.7.23


    二。如何让局域网通过这个FTP安装Linux呢??以Redhat 9.0为例:

    1。我们要在/var/ftp中,为每个发行版建一个目录,然后把每个发行版的每个版本再建一个目录。把每个版本的ISO都解压到相应的目录里。举个例子:

    比如我想让其它的客户机,通过我的服务器来安装Redhat9.0,我就要在/var/ftp目录中建一个RedHat90的目录,然后把RedHat 9.0的三个ISO都解到这个目录中。

    这样服务器的设置就完成了。

    2。客户机方面如何引导及设置???我们可以做一个系统的引志盘,但有的发行版也没有必要。这也要以各个发行版的情况而定。比如Redhat 9.0的安装,如果您的客户机上有windows,就直接通过局域网的FTP,dosutils  images isolinux三个目录放到一个在fat32分区中建的目录中,比如说在客户机上建一个Redhat9的目录,然后把三个文件拷到客户机中的fat32分区中的Redhat9的目录中。

    3.客户机安装及操作:

    以DOS盘引导,不要加载CDROM,直接进入客户机中fat32分区Redhat9\dosutils目录,执行下面的命令。

    autoboot

    这样就开始了安装:

    4.出现的画面中,我们要选ftp安装。在设置网络环境时,我们要设置好IP和网关之类的。

    以我的局域网为例:

    客户机的IP设置成192.168.0.5,掩码也是2552555.255.0,网关设置成192.168.0.1。name 服务可以不设置。以匿名方式访问FTP。

    下一步会出现让我们添写FTP,及安装源的地址,还是以我的局域网为例:

    地址:192.168.0.1
    路径:因为我是把三个ISO放在了/var/ftp/RedHat90的目录下,我应该写如下的

    /RedHat90

    这样就OK了,一切和其它的安装方式都是一样的了。


    因为每个发行版不太一样,所以通过网络安装,有的要做引导盘,如何做引导盘,我想大家早就知道了。如果不知道这方面的,请用搜索来找这方面的帖子。
  •  楼主| 发表于 2003-5-26 16:07:57 | 显示全部楼层
    vsFTP服务器,相关的一系统补充

    补充一:如何有选择的把用户限制在家目录中呢?

    我们要自己建一个文件,在/etc目录中
    #touch /etc/vsftpd.chroot_list
    以beinan和nanbei这两个用户限制在他们所在的家目录中,而其它的FTP用户不做此限制。

    在vsftpd.chroot_list这个文件中,把beinan和nanbei添上去就行,注意,每个用户占一行。
    beinan
    nanbei
    然后改/etc/vsftpd/vsftpd.conf文件,找如下的两行

    #chroot_list_enable=YES
    #chroot_list_file=/etc/vsftpd.chroot_list

    把前面的#号去掉,也就是这样的
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd.chroot_list

    如果没有这样的两行,就可以自己添加上去也是一样的。

    设置好后,重新vsFTPD服务器。

    补充一之补充:如何把系统内所有的FTP用户都限制在家目录中呢??经juliaugong兄的提示,我查找了vsFTPd的洋文说明,证明这个选项是一刀切的解决所有的用户都能限制在家目录中

    我们可以通过更改vsftpd.conf文件,加入如下的一行

    chroot_local_user=YES

    改完配制文件,不要忘记重启vsFTPd服务器


    [root@linuxsir001 root]# /etc/init.d/vsftpd restart
    关闭 vsftpd:                                              [  确定  ]
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    补充二:打开vsFTP服务器的日志功能:

    把下面xferlog_file前面的#号对掉,也就是把vsftp的log功能打开,这样我们就能在/var/log目录下查看vsftpd.log。这是vsFTP的日志功能,这对于我们来说是极为重要的。
    #xferlog_file=/var/log/vsftpd.log

    补充三:如何让绑定IP到vsFTP?也就是说,如何让用户只能通过某个IP来访问FTP。其实这个功能很有意思。如果绑定的是内网的IP,外部是没有办法访问的。如果绑定的是对外服务的IP,内网也只能通过对外服务的IP来访问FTP


    在/etc/vsftpd/vsftpd.conf中加一行,以我的局域网为例,请看第一帖中的操作环境,这样外网就不能访问我的FTP了,内网也可能通过192.168.0.2来访问FTP
    listen_address=192.168.0.2

    加完后,要重启vsFTP服务器

    [root@linuxsir001 root]# /etc/init.d/vsftpd restart
    关闭 vsftpd:                                              [  确定  ]
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    补充四:如何让vsFTP服务器限制链接数,以及每个IP最大的链接数??

    答:应该改vsFTP服务器的配制文件vsftpd.conf,加入下面的两行:

    max_clients=数字
    max_per_ip=数字

    举例:我想让我的vsFTP最大支持链接数为100个,每个IP,最多能支持5个链接,所以我应该在vsftpd.conf中加上如下的两行:
    max_clients=100
    max_per_ip=5

    改好了配制文件,不要忘记启动vsftp服务器。


    补充五:如何限制下载的速度?

    anon_max_rate=数字 注:这是匿名的下载速度
    local_max_rate=数字 注:这是vsFTP服务器上普通用户的下载速度

    注:这个数字的单位是字节,所以我们要计算一下。比如我想让匿名用户和vsFTP上的用户都以80KB下载,所以这个数字应该是1024x80=81920
    所以我们要在vsftpd.conf中加入下面的两行
    anon_max_rate=81920
    local_max_rate=81920

    不要忘记重启vsftpd服务

    补充六:我的硬盘空间有限,如何把帐号ftp默认的路径/var/ftp更改到别处?或者是,我的linux所有的目录都放在/根分区,因为空间紧张,我能否把ftp这个用户的默认路径放到别的分区??

    可以,应该如下操作!

    首先要把ftp这个用户删除
    #userdel -r  ftp
    会有错误信息,不过不用理,这是正常的。

    然后我们再把这个用户添加上,比如我想为帐号ftp的家目录设置在/mnt/LinG/ftp,我们就可以如下操作

    [root@linuxsir001 root]# mkdir /mnt/LinG

    [root@linuxsir001 root]# adduser -d /mnt/LinG/ftp -g ftp -s /sbin/nologin ftp

    仅仅是这样做还不行,因为这样还是不能让匿名用户找到它的家目录,所以我们必须改变/mnt/LinG/ftp这个目录的权限。

    [root@linuxsir001 root]# chmod 755 /mnt/LinG/ftp/

    [root@linuxsir001 root]# chown -R root.root  /mnt/LinG/ftp/


    补充七:如何定制欢迎信息,也就是我们登入有些FTP之后,会出现类似:欢迎您来到LinuxSir FTP,在这里,您会得到最真诚的帮助,如果有什么问题和建议,请来信,多谢。

    实现这个并不难,我们可以查看vsftpd.cof文件中,是否有这行。
    dirmessage_enable=YES
    如果没有就加上,如果dirmessage_enable=YES前面有#号,就把#号去掉。

    然后我们制定一个.message文件,写上您想要写的东西,比如是.message的内容是如下的:

    欢迎您来到LinuxSir FTP!
    在这里,您会得到最真诚的帮助;
    如果有什么问题和建议,请来信,多谢。

    我们可以用编辑器来写这个.message,我想这个过程就不用说了吧。

    然后我们把.message这个文件复制到各个用户的家目录中。比如我的FTP的一个用户是beinan,这个用户所在的家目录是/home/beinan
    我们就要把.message放在/home/beinan这个目录下。如果系统用户ftp,他的目录就是/var/ftp这个目录,这个是默认的,当匿名用户登入时就访问的是/var/ftp这个目录。我们要让匿名用户能看到欢迎信息。就要把.message放在/var/ftp目录中。其它的用户,也无非就是类似的操作。


    补充八:如何实现虚拟路径?
    比如:
    /home/a 映射为ftp://localhost/a
    /home/b/c 则为ftp://localhost/c

    其实这个不能说是vsFTPd的内容,其实我们早就接触过了,可能我们没有注意,我们可以通过如下的方法来实现。

    #mount --bind [原有的目录] [新目录]

    比如我的ftp的默认目录是/var/ftp,我想把/mnt/LinG/WinSoft文件夹,映射到/var/ftp目录中,我就如下操作

    我们要先在/var/ftp目录中建一个目录
    #mkdir /var/ftp/WinSoft
    然后执行mount命令
    #mount --bind /mnt/LinG/WinSoft   /var/ftp/WinSoft

    这样就OK了。


    补充九:如何上匿名访问、上传,并支持下载和执行?

    在默认的情况下,vsftp是不支持匿名用户的访问的,所以我们要自己打开相应的选项。现在我针对这个问题,我们要打开如下的选项。

    anonymous_enable=YES  注:允许匿名访问
    anon_upload_enable=YES  注:允许上传
    anon_mkdir_write_enable=YES 注:允许建立相应的目录
    anon_umask=022   把上传到FTP的文件或者目录改变权限

    当然打开这些选项还是不行的,我们还要让匿名写入文件的上一级目录有写入权,以我所做的FTP为例,我所做的FTP的匿名访问的目录是/var/ftp,在vsFTPd中,/var/ftp这个目录是不能让匿名用户有写入权限的,这是为了安全考虑,所以我们必须自己在/var/ftp目录中建一个目录,让这个目录有写入权。

    比如:我在/var/ftp目录建一个upload目录,然后把它的权限设置成777,这样匿名用户就能写入了。

    #mkdir /var/ftp/upload
    #chmod 777 /var/ftp/upload

    改了一系列的文件,不要忘记重启vsFTPd服务器

    我是用standalone模式的,当然用下面的方法

    [root@linuxsir001 root]# service vsftpd restart
    关闭 vsftpd:                                              [  确定  ]
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    如果您用的是xinetd模式来启动vsFTPd,我们要重启xinetd服务器
    [root@linuxsir001 root]# service xinetd  restart
    停止 xinetd:                                             [  确定  ]
    启动 xinetd:                                              [  确定  ]
    [root@linuxsir001 root]# ]


    补充十:通过pam认证方式,添加虚拟用户


    通过pam认证,用db_load添加用户,是真正的虚拟用户。现在我们简单的介绍一下,通过以后的学习,我们再深入补充:

    1。在/etc/pam.d/目录中创建一个文件ftp
    [root@linuxsir001 root]# touch /etc/pam.d/ftp

    2。在/etc/pam.d/ftp里面加上如下的两行
    auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
    account required /lib/security/pam_userdb.so db=/etc/vsftpd_login

    3。创建一系统的用户名用密码的文件logins.txt
    [root@linuxsir001 root]# touch logins.txt
    在logins.txt文件中,输入如下的内容。这个内容您可以自己来定。比如我下面的。其实linuxsir007是FTP的虚拟用户名,123456是linuxsir007的密码;linuxsir008是虚拟用户名,234567是linuxsir008的密码,以此类推,您想加入几个就是几个;下面是我添加的FTP的虚拟用户名和密码。
    linuxsir007
    123456
    linuxsir008
    234567
    linuxsir009
    567890
    linuxsir010
    678901
    linuxsir011
    789012

    4。创建一个真实的用户名linuxsir006,这个linuxsir006的用户,所在的家目录由您来定。我在这里不多说了。我是按系统默认的来添加的。

    [root@linuxsir001 root]# useradd linuxsir006

    5。把/etc/hosts复制到/home/linuxsir006,并改变它的属主

    [root@linuxsir001 root]#cp /etc/hosts /home/linuxsir006/hosts

    [root@linuxsir001 root]#chown linuxsir006.linuxsir006 /home/linuxsir006/hosts

    6。通过db_load来创建虚拟用户的库文件。我们在前面建的logins.txt文件,我是放在了/root用户目录下。所以咱们得把目录切换到/root目录来创建虚拟用户的库文件。

    [root@linuxsir001 root]# db_load -T -t hash -f logins.txt /etc/vsftpd_login.db

    7。更改vsftpd.conf文件,加入如下的几行
    pam_service_name=ftp
    guest_enable=YES
    guest_username=linuxsir006
    anon_world_readable_only=NO

    8。重启vsFTPd服务器;改了一系列的文件,不要忘记重启vsFTPd服务器

    我是用standalone模式的,当然用下面的方法

    [root@linuxsir001 root]# service vsftpd restart
    关闭 vsftpd:                                              [  确定  ]
    为 vsftpd 启动 vsftpd:                                    [  确定  ]
    [root@linuxsir001 root]#

    如果您用的是xinetd模式来启动vsFTPd,我们要重启xinetd服务器
    [root@linuxsir001 root]# service xinetd  restart
    停止 xinetd:                                             [  确定  ]
    启动 xinetd:                                              [  确定  ]
    [root@linuxsir001 root]#

    9。如果您想让用户登入FTP时,登入成功的相应的信息,请把您制作的.message复制到您的用户的家目录中,这方面的请参考前面的补充。

    10。测试:
    [root@linuxsir001 root]# ftp 192.168.0.1
    Connected to 192.168.0.1.
    220 (vsFTPd 1.1.3)
    530 Please login with USER and PASS.
    530 Please login with USER and PASS.
    KERBEROS_V4 rejected as an authentication type
    Name (192.168.0.1:root): linuxsir007
    331 Please specify the password.
    Password:
    230-欢迎光临LinuxSir自由FTP
    230-在这里,您将得到最真诚的帮助!
    230-本站限度为30KB!
    230-每个IP限四个线程
    230-请大家遵守FTP的有关规定。
    230-多谢合作!
    230-
    230-LinuxSir管理部
    230 Login successful. Have fun.
    Remote system type is UNIX.
    Using binary mode to transfer files.
    ftp> ls
    227 Entering Passive Mode (192,168,0,1,85,171)
    150 Here comes the directory listing.
    -rw-r--r--    1 ftp      ftp           174 Jun 01 12:59 hosts
    drwxr-xr-x    3 ftp      ftp          4096 Jun 01 13:29 linuxsir008
    drwxr-xr-x    2 ftp      ftp          4096 Jun 01 13:24 sun
    226 Directory send OK.
    ftp>

    补充十一:如何把Redhat 9.0中系统默认安装的vsftpd-1.1.3-8.i386.rpm,系统默认vsFTPd是用standalone启动方式 ,改为xinetd启动方式 ?
    如果是用源码包安装的,安装后就是xinetd模式,如果是用RPM包安装的,在Redhat 9.0中,应该用下面的方法来解决。




    1.在/etc/xinetd.d/目录中创建一个文件vsftpd

    [root@linuxsir001 root]# touch /etc/xinetd.d/vsftpd

    /etc/xinetd.d/vsftpd内容如下:

    service ftp
    {
            socket_type             = stream
            wait                    = no
            user                    = root
            server                  = /usr/sbin/vsftpd
    #       server_args             =
    #       log_on_success          += DURATION USERID
    #       log_on_failure          += USERID
            nice                    = 10
            disable                 = no
    }

    2。复制vsftpd.conf到/etc/目录下,因为xinetd对vsFTPd配制文件应该在/etc目录下,所以我们就必须把这个文件复制到/etc目录下,否则会出现系统中local用户无法登入,也就是说,不复制这个文件会出现ftp非匿名用户无法访问,只能用匿名用户访问。

    [root@linuxsir001 root]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd.conf

    3。更改配制文件/etc/vsftpd.conf,把如下的项注掉:
    也就是把
    listen=YES
    改为
    #listen=YES
    或者是把这行删除也行。

    4。把/etc/init.d/vsftpd这个文件删除。其实最好的备份到别处,因为我们有时实验来实验去,可能还会转到standalone模式启动。我就直接移动到别的目录,比如是/root下面的backup目录。


    [root@linuxsir001 root]#mkdir /root/backup
    [root@linuxsir001 root]# mv /etc/init.d/vsftpd /root/backup

    5。运行ntsysv,把vsftpd的服务取消

    [root@linuxsir001 root]#ntsysv

      [ ] vsftpd  

    6。重启xinetd服务

    [root@linuxsir001 root]# service xinetd  restart



     楼主| 发表于 2003-5-26 18:20:48 | 显示全部楼层
    请弟兄们讨论,多谢。

    咱们共同来解解vsFTP服务器的相关的问题。


    多谢。
     楼主| 发表于 2003-5-26 18:21:08 | 显示全部楼层
    占位帖,用于更新。和总结
     楼主| 发表于 2003-5-26 18:21:33 | 显示全部楼层
    占位帖,用于更新和总结
    发表于 2003-5-27 11:26:25 | 显示全部楼层
    谢谢,北南斑竹!
    发表于 2003-5-27 11:59:58 | 显示全部楼层
    好贴!顶
    不过再问问,怎么实现虚拟路径映射,不显示隐藏文件,还有单个用户的下载速度限制?
    发表于 2003-5-27 12:39:09 | 显示全部楼层
    vsftpd不错安全性好
    我也用他来做FTPserver的
    但是现在出现一个问题每次重新启动以后
    要重新给用户设定密码,不然原来的密码是
    上不去的.why?
     楼主| 发表于 2003-5-27 22:37:56 | 显示全部楼层
    vsftpd不错安全性好
    我也用他来做FTPserver的
    但是现在出现一个问题每次重新启动以后
    要重新给用户设定密码,不然原来的密码是
    上不去的.why?


    建议重新把vsFTP的包卸掉,重新设置一下,重新添加用户,最好是查看一下vsftpd.conf文件。



    好贴!顶
    不过再问问,怎么实现虚拟路径映射,不显示隐藏文件,还有单个用户的下载速度限制?


    隐藏文件的功能,我想也有办法。但我现在还没有学到那里,请兄弟一起来学习怎么样,其实这些东西都在vsFTP的说明文档里。到官方网站去下载一个源码包,里面有例子和及其详尽的说明。我们一点一点的就能把这个说明文件看懂。我现在就是一点一点的在看。每看到一个有用的,就立即实践,进步也很快。


    至于限速的问题,我找到了方法。请看我的补充,这在vsFTPD的说明文件也有,就在源码包里。

    加油
    发表于 2003-5-28 14:16:48 | 显示全部楼层
    南北兄果然强悍。我找了一下,没有找到说明文档啊,只有一个faq,你把说明文档帖上来啊,大家研究一下好了。
    以下是faq:
    vsftpd frequently asked questions!!
    -----------------------------------

    Q) Can I restrict users to their home directories?
    A) Yes. You are probably after the setting:
    chroot_local_user=YES

    Q) Does vsftpd support a limit on the number of users connected?
    A1) Yes, indirectly. vsftpd is an inetd-based service. If use the popular
    "xinetd" as your inetd, this supports per-service per-IP connection limits.
    There is an example of this in the "EXAMPLE" directory.
    A2) If you run vsftpd in "standalone" mode with the setting listen=YES, then
    you can investigate the setting (e.g.):
    max_clients=10

    Q) Help! I'm getting the error message "refusing to run with writable anonymous
    root".
    A) vsftpd is protecting against dangerous configurations. The cause of this
    message is usually dodgy ownership of the ftp home directory. The home
    directory should NOT be owned by the ftp user itself. Neither should it
    be writable by the ftp user. A way to fix this is:
    chown root ~ftp; chmod -w ~ftp

    Q) Help! I'm getting the error message "str_getpwnam".
    A) The most likely cause of this is that the "nobody" user does not exist on
    your system. vsftpd needs this user to run bits of itself with no privilege.

    Q) Help! Local users cannot log in.
    A) There are various possible problems.
    A1) By default, vsftpd disables any logins other than anonymous logins. Put
    local_enable=YES in your /etc/vsftpd.conf to allow local users to log in.
    A2) vsftpd tries to link with PAM. (Run "ldd vsftpd" and look for libpam to
    find out whether this has happened or not). If vsftpd links with PAM, then
    you will need to have a PAM file installed for the vsftpd service. There is
    a sample one for RedHat systems included in the "RedHat" directory - put it
    under /etc/pam.d
    A3) If vsftpd didn't link with PAM, then there are various possible issues. Is
    the user's shell in /etc/shells? If you have shadowed passwords, does your
    system have a "shadow.h" file in the include path?
    A4) If you are not using PAM, then vsftpd will do its own check for a valid
    user shell in /etc/shells. You may need to disable this if you use an invalid
    shell to disable logins other than FTP logins. Put check_shell=NO in your
    /etc/vsftpd.conf.

    Q) Help! Uploads or other write commands give me "500 Unknown command.".
    A) By default, write commands, including uploads and new directories, are
    disabled. This is a security measure. To enable writes, put write_enable=YES
    in your /etc/vsftpd.conf.

    Q) Help! What are the security implications referred to in the
    "chroot_local_user" option?
    A) Firstly note that other ftp daemons have the same implications. It is a
    generic problem.
    The problem isn't too severe, but it is this: Some people have FTP user
    accounts which are not trusted to have full shell access. If these
    accounts can also upload files, there is a small risk. A bad user now has
    control of the filesystem root, which is their home directory. The ftp
    daemon might cause some config file to be read - e.g. /etc/some_file. With
    chroot(), this file is now under the control of the user. vsftpd is
    careful in this area. But, the system's libc might want to open locale
    config files or other settings...

    Q) Help! Uploaded files are appearing with permissions -rw-------.
    A) Depending on if this is an upload by a local user or an anonymous user,
    use "local_umask" or "anon_umask" to change this. For example, use
    "anon_umask=022" to give anonymously uploaded files permissions
    -rw-r--r--. Note that the "0" before the "22" is important.

    Q) Help! How do I integrate with LDAP users and logins?
    A) Use vsftpd's PAM integration to do this, and have PAM authenticate against
    an LDAP repository.

    Q) Help! Does vsftpd do virtual hosting setups?
    A1) Yes. If you integrate vsftpd with xinetd, you can use xinetd to bind to
    several different IP addresses. For each IP address, get xinetd to launch
    vsftpd with a different config file. This way, you can get different behaviour
    per virtual address.
    A2) Alternatively, run as many copies as vsftpd as necessary, in standalone
    mode. Use "listen_address=x.x.x.x" to set the virtual IP.

    Q) Help! Does vsftpd support virtual users?
    A) Yes, via PAM integration. Set "guest_enable=YES" in /etc/vsftpd.conf. This
    has the effect of mapping every non-anonymous successful login to the local
    username specified in "guest_username". Then, use PAM and (e.g.) its pam_userdb
    module to provide authentication against an external (i.e. non-/etc/passwd)
    repository of users.
    Note - currently there is a restriction that with guest_enable enabled, local
    users also get mapped to guest_username.
    There is an example of virtual users setup in the "EXAMPLE" directory.

    Q) Help! Does vsftpd support different settings for different users?
    A) Yes - in a very powerful way. Look at the setting "user_config_dir" in the
    manual page.

    Q) Help! Can I restrict vsftpd data connections to a specific range of ports?
    A) Yes. See the config settings "pasv_min_port" and "pasv_max_port".

    Q) Help! I'm getting the message "OOPS: chdir".
    A) If this is for an anonymous login, check that the home directory for the
    user "ftp" is correct. If you are using the config setting "anon_root", check
    that is correct too.
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表