Chinaunix首页 | 论坛 | 博客
  • 博客访问: 49180
  • 博文数量: 8
  • 博客积分: 517
  • 博客等级: 下士
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-08 16:32
文章分类

全部博文(8)

文章存档

2011年(4)

2010年(4)

我的朋友
最近访客

分类: BSD

2011-03-31 15:12:37

1. vsftpd安装

cd /usr/ports/ftp/vsftpd
make install clean

2. vsftpd的配置文件与启动文件

(1)配置文件的位置 /usr/local/etc/vsftpd.conf
(2)启动文件的位置 /usr/local/libexec/vsftpd

3. vsftpd虚拟用户的配置

vi /usr/local/etc/vsftpd.conf

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

#限制本地用户在自己的目录里,这里将Chroot_list_enable=YES Chroot_list_file=/任意路径/vsftpd.chroot_list 注释掉
chroot_local_user=YES

anon_upload_enable=NO
anon_mkdir_write_enable=NO

listen=YES
secure_chroot_dir=/usr/local/share/vsftpd/empty
background=YES

listen_port=5123     #为了安全,这里修改ftp的端口号
pam_service_name=vsftpd
user_config_dir=/usr/local/etc/vsftpd/

#好像vsftpd用户没有办法修改文件的权限的权限(chmod),加上这两行就可以了http://blog.haohtml.com/archives/7852
virtual_use_local_privs=YES
chmod_enable=YES

4. 创建虚拟用户目录与用户的配置文件

用哪个系统用户做为虚拟用户的用户,权限就是谁的,例如用www,作为虚拟用户映射的用户。权限就应该为www。通常该方法用于网站的代码的上传。

一.添加ftp对应的本地系统用户virtual,用户组为www

#pw useradd virtual –g www–d /home/virtual –s /sbin/nologin
#mkdir /home/virtual
#passwd virtual

二.创建ftp虚拟用户配置文件

# mkdir /usr/local/etc/vsftpd

#cd /usr/local/etc/vsftpd
# vi abc
guest_enable=YES
guest_username=virtual
local_root=/data/htdocs/www
anon_world_readable_only=no
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_umask=022

用户virtual为本地www组的本地用户,意思是将虚拟用户映射为本地用户(这里可能有问题,virtual用户默认的sh为nologin的,主目录为/home/virtual,并非/nonexistent,所以如果用ftp连接的时候发现直接就提示 "500 OOPS: cannot change directory:/nonexistent",请检查本地用户的主目录)。另外虚拟用户的目录一定让相对应的本地用户对目录有相应的访问操作权限

其中上面的一些选项,可以在vsftpd.conf里进行全局配置的,这样再添加用户的时候就方便多了。这里有些配置是重复的.但不受影响的.

5. 安装vsftpd密码认证模块

cd /usr/ports/security/pam_pwdfile
make install clean

用于生成/usr/local/lib/pam_pwdfile.so文件
注:pam_pwdfile.so, 有关PAM认证模块简介见:http://blog.haohtml.com/index.php/archives/7386

6. 创建vsftpd认证模块
创建认证模块.记得清除默认配置文件里的auth和account内容或者注释掉。

# 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/login
account    required   pam_permit.so

请注意下面的required认证处理的方式,一定要为required,不能为其它的,如sufficient ,有关他们的区别,请参考:http://blog.haohtml.com/index.php/archives/7393

7. 创建用户密码
可以用以下代码来实现用户密码的加密,用于ftp的用户验证。以下内容由于wordpress程序问题,可能显示或者复制的时候有误,请上传一张图.

复制下面代码:

#vi /usr/local/etc/add_ftp_user.pl #! /usr/bin/perl -w #filename: md5pwd.pl use strict; # print "#example: user:passwd\n"; while () { exit if ($_ =~/^\n/); chomp; (my $user, my $pass) = split /:/, $_, 2; my $crypt = crypt $pass, '$1$' . gensalt(8); print "$user:$crypt\n"; } 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 /usr/local/etc/add_ftp_user.pl

# /usr/local/etc/add_ftp_user.pl
#example: user:passwd
abc:abc
abc:$1$gLAEihTV$jQnPZDk4C8TZSrc.L7gLm/

说明:然后把上面的用户名与密码文件复制到下面的login文件中(可以一次添加多个用户及密码,按ctrl+c结束)

# vi /usr/local/etc/login
abc:$1$gLAEihTV$jQnPZDk4C8TZSrc.L7gLm/

9. 启动服务
启动:

/usr/local/libexec/vsftpd

关闭:直接kill掉

#killall vsftpd

10. 测试vsftpd的登录情况

略,和下面的一样.

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

11.添加新用户

下面我们来添加一个新用户

#/usr/local/etc/add_ftp_user.pl
#example:user:password
haohtml:com
haohtml:$1$b5cRPRVT$MODPUh9H0F1JWaioqbrXB.

echo 'haohtml:$1$b5cRPRVT$MODPUh9H0F1JWaioqbrXB.' >> /usr/local/etc/login

添加配置文件:

vi /usr/local/etc/vsftpd/haohtml

将下面内容添加到文件里(这里为了方便,将guest_enable=YES和guest_username=apache放在了全局配置文件vsftpd.conf里了)

local_root=/data/htdocs/haohtml
anon_world_readable_only=no
anon_upload_enable=yes
anon_mkdir_write_enable=yes
anon_other_write_enable=yes
anon_umask=022

重启vsfptd 生效

#/usr/local/libexec/vsftpd

ftp测试:

FreeBSD vsftpd+pam虚拟用户方案配置

有关配置参数请参考:http://blog.haohtml.com/index.php/archives/857

相关教程:

http://blog.163.com/koumm@126/blog/static/9540383720102162529276/

阅读(2104) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

iceage552012-05-25 17:21:58

我写了个c语言的,一劳永逸吧
用 gcc vu.c -o vu -lcrypt 生成目标文件
#include <stdio.h>
#include<getopt.h>
#include <string.h>
#include <stdlib.h>
#include<time.h>
#include<termios.h>
#include <unistd.h>

#define SALTLENTH 64
char *salt_str();
char next_arg(int agrc, char **argv);
void color_arg(char arg_name[20], char arg_l[20], char arg_s[20]);
void list_no(int argc, char ** ar