热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FreeBSD系统配置vsftpd+pam虚拟用户

1.vsftpd安装cd/usr/ports/ftp/vsftpdmakeinstallclean2.vsftpd的配置文件与启动文件(1)配置文件的位置/usr/local/etc/vsftpd.conf(2)启动文件的位置/usr/local/libexec/vsftpd3.vsftpd虚拟用户的配置vi/usr/

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

anon_upload_enable=NO
anon_mkdir_write_enable=NO

#限制本地用户在自己的目录里,这里将chroot_list_enable=YES
和chroot_list_file=/任意路径/vsftpd.chroot_list
注释掉(切记:以后添加新ftp账户的时候,需要在此文件里也添加一行,来对用户进行锁定在自己的目录里,否则是非常的危险的)
chroot_local_user=YES
#chroot_list_enable=YES
#chroot_list_file=/etc/vsftpd.chroot_list 

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

#用户虚拟用户
guest_enable=YES
guest_username=virtual  

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
#注意这里的路径是user_config_dir 的路径

#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",请检查本地用户的主目录)。另外虚拟用户的目录一定让相对应的本地用户对目录有相应的访问操作权限。

#mkdir -p /data/htdocs/www
#chown -R virtual:www /data/htdocs/www
# chmod -R 775 /data/htdocs/www

其中上面的一些选项,可以在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
或者
/usr/local/etc/rc.d/vsftpd start

Usage: /usr/local/etc/rc.d/vsftpd
[fast|force|one](start|stop|restart|rcvar|reload|status|poll)

关闭:直接kill掉

#killall vsftpd

这里将vsftpd作为服务启用,写到入/etc/rc.conf

echo 'vsftpd_enable="YES"' >>
/etc/rc.conf 

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

创建ftp目录

#mkdir /data/htdocs/haohtml
#chown -R virtual:www /data/htdocs/haohtml
#chmod -R 775  /data/htdocs/haohtml

重启vsfptd 生效

#/usr/local/libexec/vsftpd

ftp测试:

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

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

注意这里我们使用了chroot的功能,新版本的vsftpd软件(发现2.3.5版本有此问题.但2.3.2无此问题),可能会提示一些"Fixing 500 OOPS: vsftpd: refusing to run with writable root inside chroot "错误,解决办法只需要将ftp虚拟用户对应的根目录的写权限取消即可.参考:http://blog.haohtml.com/archives/12426

chmod a-w /data/htdocs/haohtml


推荐阅读
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • Windows操作系统提供了Encrypting File System (EFS)作为内置的数据加密工具,特别适用于对NTFS分区上的文件和文件夹进行加密处理。本文将详细介绍如何使用EFS加密文件夹,以及加密过程中的注意事项。 ... [详细]
  • 本文探讨了在一个物理隔离的环境中构建数据交换平台所面临的挑战,包括但不限于数据加密、传输监控及确保文件交换的安全性和可靠性。同时,作者结合自身项目经验,分享了项目规划、实施过程中的关键决策及其背后的思考。 ... [详细]
  • 深入理解:AJAX学习指南
    本文详细探讨了AJAX的基本概念、工作原理及其在现代Web开发中的应用,旨在为初学者提供全面的学习资料。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 使用 jQuery 实现页面加载进度条
    页面加载进度条是提升用户体验的重要工具,通过在页面头部显示一个加载状态,并在页面完全加载后隐藏,可以有效减少用户的等待焦虑。本文将详细介绍如何使用 jQuery 实现这一功能。 ... [详细]
  • 长期从事ABAP开发工作的专业人士,在面对行业新趋势时,往往需要重新审视自己的发展方向。本文探讨了几位资深专家对ABAP未来走向的看法,以及开发者应如何调整技能以适应新的技术环境。 ... [详细]
  • CSS Border 属性:solid 边框的使用详解
    本文详细介绍了如何在CSS中使用solid边框属性,包括其基本语法、应用场景及高级技巧,适合初学者和进阶用户参考。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 解决PHP项目在服务器无法抓取远程网页内容的问题
    本文探讨了在使用PHP进行后端开发时,遇到的一个常见问题:即在本地环境中能够正常通过CURL获取远程网页内容,但在服务器上却无法实现。我们将分析可能的原因并提供解决方案。 ... [详细]
author-avatar
up61
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有