最近在研究FreeNAS 存储系统,由于是基于FreeBSD的操作系统,想在上面装个vsftpd用于生产环境。于是安装了个FreeBSD 系统的Jails,在jails里面装一些应用软件。
这么做的原因有两个:
1.FreeNAS系统本身安装软件附近复杂,需要配置很多工具包。
2.为了实现系统与应用存储的相互分离,使得系统和数据相互独立,保证安全性。
下面进入正题,安装vsftp
cd /usr/ports/ftp/vsftpd make install clean
安装很简单,用系统自带的port安装。
下面就是配置了
vsftpd的配置文件与启动文件
(1)配置文件的位置 /usr/local/etc/vsftpd.conf (2)启动文件的位置 /usr/local/libexec/vsftpd
编辑配置文件:
vi /usr/local/etc/vsftpd.conf
# Example config file /usr/local/etc/vsftpd.conf # # The default compiled in settings are fairly paranoid. This sample file # loosens things up a bit, to make the ftp daemon more usable. # Please see vsftpd.conf.5 for all compiled in defaults. # # READ THIS: This example file is NOT an exhaustive list of vsftpd options. # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's # capabilities. # # Allow anonymous FTP? (Beware - allowed by default if you comment this out). anonymous_enable=NO # # 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. # Note that the default log file location is /var/log/xferlog in this case. #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 on some FTP servers, ASCII support allows a denial of service # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd # predicted this attack and has always been safe, reporting the size of the # raw file. # ASCII mangling is a horrible feature of the protocol. 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(). # (Warning! chroot'ing can be very dangerous. If using chroot, make sure that # the user does not have write access to the top level directory within the # chroot) chroot_local_user=YES 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 # # When "listen" directive is enabled, vsftpd runs in standalone mode and # listens on IPv4 sockets. This directive cannot be used in conjunction # with the listen_ipv6 directive. listen=YES # # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6 # sockets, you must run two copies of vsftpd with two configuration files. # Make sure, that one of the listen options is commented !! #listen_ipv6=YES secure_chroot_dir=/usr/local/share/vsftpd/empty # If using vsftpd in standalone mode, uncomment the next two lines: listen=YES background=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES guest_enable=YES guest_username=virtual user_config_dir=/etc/vsftpd/vuser_conf virtual_use_local_privs=YES allow_writeable_chroot=YES
创建用户管理文件
#touch /usr/local/etc/vsftpd.chroot_list #touch /usr/local/etc/vsftpd.user_list
创建虚拟用户目录与用户的配置文件
1.添加ftp对应的本地系统用户<span style="color: #ff0000;">virtual</span><span style="color: #373737;">,用户组为</span><span style="color: #953734; font-size: medium;">www</span>
#pw useradd virtual –g www –d /home/virtual –s /sbin/nologin #mkdir /home/virtual #passwd virtual
2.创建ftp虚拟用户(test)配置文件
#mkdir -p /etc/vsftpd/vuser_conf #cd /etc/vsftpd/vuser_conf #vi test local_root=/home/test write_enable=YES anon_umask=022 anon_world_readable_only=NO anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES
用户virtual为本地www组的本地用户,意思是将虚拟用户映射为本地用户(这里可能有问题,virtual用户默认的sh为nologin的,主目录为/home/virtual,并非/nonexistent,所以如果用ftp连接的时候发现直接就提示 "500 OOPS: cannot change directory:/nonexistent",请检查本地用户的主目录)。另外虚拟用户的目录一定让相对应的本地用户对目录有相应的访问操作权限。
#mkdir -p /home/test #chown -R virtual:www /home/test #chmod -R 775 /home/test
安装vsftpd密码认证模块
#cd /usr/ports/security/pam_pwdfile #make install clean
创建vsftpd认证模块
# cp /etc/pam.d/ftpd /etc/pam.d/vsftpd #vi /etc/pam.d/vsftpd auth required /usr/local/lib/pam_pwdfile.so pwdfile=/usr/local/etc/vuser_passwd account required pam_permit.so
创建用户密码
#touch /usr/local/etc/vuser_passwd //创建密码文件
vi /etc/vsftpd/add_ftp_user.pl
#! /usr/bin/perl -w #filename: md5pwd.pl use strict; # print "#example: user:passwdn"; while (<STDIN>) { exit if ($_ =~/^n/); chomp; (my $user, my $pass) = split /:/, $_, 2; my $crypt = crypt $pass, '$1$' . gensalt(8); print "$user:$cryptn"; } sub gensalt { my $count = shift; my @salt = ('.', '/', 0 .. 9, 'A' .. 'Z', 'a' .. 'z'); my $s; $s .= $salt[rand @salt] for (1 .. $count); return $s; }
chmod +x /etc/vsftpd/add_ftp_user.pl
<span style="color: #ff0000;">检查是否安装了perl,若没有则安装。</span>(perl -v)
#fetch http://www.perl.com/CPAN/src/stable.tar.gz # tar zxvf stable.tar.gz # cd perl-5.20.1 # sh Configure -de # make # make test # make install
# /etc/vsftpd/add_ftp_user.pl #example: user:passwd test:test test:$1$0NZp5CwD$Q30dkOY7aKQqGRUg6o63Y1
<span style="color: #993366;">上面脚本创建用户密码可连续输入创建多个,回车则退出脚本!</span>
# vi /etc/vsftpd/vuser_passwd test:$1$0NZp5CwD$Q30dkOY7aKQqGRUg6o63Y1
启动服务
/usr/local/libexec/vsftpd
或者添加为系统服务
#vi /etc/rc.conf //增加如下一行 vsftpd_enable="YES" #/usr/local/etc/rc.d/vsftpd start
关闭服务:直接kill掉
killall vsftpd
至此配置完成。可以通过ftp工具连接ftp使用了。
本文由 Mr Gu 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 5, 2016 at 03:26 pm