Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2229063
  • 博文数量: 533
  • 博客积分: 8689
  • 博客等级: 中将
  • 技术积分: 7046
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:00
文章分类

全部博文(533)

文章存档

2024年(2)

2023年(4)

2022年(16)

2014年(90)

2013年(76)

2012年(125)

2011年(184)

2010年(37)

分类: LINUX

2011-04-20 09:45:18



如果遇到
500 OOPS :  cannot change directory:/home/www
可能是没有/home/www这个目录。。或是目录没有权限。



环境:
先关了iptables  selinux
useradd  www

6.1.2.5. 安装ftp

yum -y install pam*
yum -y install db4*
yum -y install vsftpd*

1. 创建virtusers,格式如下:
femart2011
4yR3WnoluSFTCB

2. 生成数据库:
db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db

3. 设置数据库文件的访问权限:
chmod 600 /etc/vsftpd/vir_user.db
chmod 600 /etc/vsftpd/vir_user

4. 修改/etc/pam.d/vsftpd内容:
echo "auth required pam_userdb.so db=/etc/vsftpd/vir_user" > /etc/pam.d/vsftpd
echo "account required pam_userdb.so db=/etc/vsftpd/vir_user" >> /etc/pam.d/vsftpd

5. 修改/etc/vsftpd/vsftpd.conf的内容
vim /etc/vsftpd/vsftpd.conf

listen=YES
listen_port=60017
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
chown_uploads=NO
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
nopriv_user=www
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP servers
chroot_local_user=YES
pam_service_name=vsftpd
guest_enable=YES
guest_username=www
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vconf

6. 创建用户的配置文件
mkdir /etc/vsftpd/vconf/femart2011
vim /etc/vsftpd/vconf/femart2011

local_root=/data/httpd/b2c
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

如果再想其它的用户对应另一个主目录。如下:

mkdir -p /data/httpd/b2c2
chown -R www:www /data/httpd/b2c2
vim /etc/vsftpd/vconf/femart2012

local_root=/data/httpd/b2c2
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000

[root@test b2c]# vi /etc/vsftpd/vir_user

femart2011
aaaAAA111
femart2012
aaaAAA111
:wq!


db_load -T -t hash -f /etc/vsftpd/vir_user /etc/vsftpd/vir_user.db






























































系统环境: Ubuntu 8.04,vsftpd 2.0.7

默认情况下,Ubuntu server 是不安装 Vsftpd 的,需要自行安装。
(readhat vsftpd 也是选择安装,并且要打开防火墙配置,其具体设置可参考本文)

==============
安装 vsftpd ==
==============
sudo apt-get install vsftpd

安装完成之后:
ftp:x:108:65534::/home/ftp/:/bin/false

1. 会自动建立没有shell权限的名为"ftp"的用户,在 home 下面建立 ftp 主目录
2. 作为系统服务,并自动启动,可以查看端口,判断是否安装成功。
3. 其主要配置文件为 /etc/vsftpd.conf

启动停止
/etc/init.d/vsftpd start|restart|stop

=================
vsftpd 用户管理 ==
=================

操作系统用户:
vsftp默认的配置是与linux系统共用用户库的,即操作系统的用户可以登录ftp。
在/etc/vsftpd/vsftpd.conf中修改,使系统用户可以登录到 ftp,匿名用户的设置也在那里,当然也可以通过配置文件来指定哪些系统用户可也登录,哪些不可以登录。

虚拟用户:
不过我想要的并不是这种ftp服务,我希望像serverU一样,可以建立用户,这个用户与OS登录的用户没有任何关系,其可以管理的文件夹位置也可以自己定义,这种用户被称为虚拟用户。
在linux里,要实现上面的功能一般有两种方法:
第一种是建立操作系统用户,然后去掉shell登录权限,然后设定文件路径;
另一种是建立用户库,里面包含若干用户,映射到一个系统用户上,然后设定文件路径。
第二中方法更加符合管理的需要,不会使用和管理变得混乱,下面介绍第二种方法。

***********************************************
以下文章主要参考

""

有更改,主要是在其基础上,加了一些注释。

后记:上面的wiki在不断修改中,应用本文的时候,要到上述网址查看一下最新的版本。
例如 db3 变成了 db4

===============
虚拟用户设置 ==
===============
目标:

建立多个虚拟用户,每个用户的主目录不同,并且权限不同

=== 1. 建立虚拟用户

用 vim 建立文本文件 loguser,格式如下:
userid
password
注意:
奇数行为用户名,偶数行为奇数行的用户名的密码,前后都不要有空格;
不要在 windows 上面建立该文件再进行上传,会有问题。

于是,我们 loguser 文件的内容为
test1
testp1
test2
testp2

假定文件位置为 /home/back/loguser

=== 2. 生成用户信息数据库

vsftpd 用户管理,支持几种验证方式,并可以在配置文件中设置,其中一种方式是用 db_util 组件加密的。

关于生成数据库的组件,版本在逐渐的升级,原来是 libdb3-util ,现在是 db4.6-util,主要参考 "" 中的说明吧,现在还不会查看,应该用的最新版本是什么。
参考方法:
sudo apt-get install db4*
该命令可以列出可以安装的 db4 开头的组件名称,挑选 util 组件即可。

2.1 安装 db4.6-util 组件

db4.6-util 组件,ubuntu 中默认没有安装

sudo apt-get install db4.6-util

2.2. 执行加密
sudo db4.6_load -T -t hash -f /home/back/loguser /etc/vsftpd_login.db
其中 loguser 为上文生成的文件

个别的是 db41_load ,可以 find / -name db4* 来查找具体的命令

这样用户数据就生成了,如果新添加或者更改用户名或者密码,需要重新生成该文件,所以 loguser 文件要保留好。

最后设置一下数据库文件的访问权限,防止误修改。
sudo chmod 600 /etc/vsftpd_login.db

=== 3. 建立测试目录

在 /home/ftp 下面建立两个测试文件夹 test1,test2

更改 /home/ftp/ 目录及其子目录的所有者为 ftp:ftp

如果没有 ftp 组,则建立
sudo groupadd ftp
更改所有者
sudo chown -R ftp:ftp /home/ftp

我们建立的虚拟用户,都映射为操作系统中的用户 ftp ,所以虚拟用户登录的时候,其根目录和ftp相同
故把 /home/ftp 下面的所有目录所有者均应更改为 ftp

我们期望
test1 用户的主目录在 /home/ftp/test1 目录中
test2 用户的主目录在 /home/ftp/test2 目录中

=== 4. 设置用户验证方式

配置PAM文件

vim 新建文件 /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

1) 我们上一步建立的用户数据库 vsftpd_login 在此处被使用,利用 pam 组件来调用;
2) 我们建立的虚拟用户将采用PAM进行验证,这是通过/etc/vsftpd.conf 文件中的语句pam_service_name=vsftpd.vu 来启用的,稍后你将发现。

=== 5. vsftpd.conf 设置

/etc/vsftpd.conf 文件是 vsftpd 的主要的配置文件,一般要确保含有一下设置:

listen=YES
anonymous_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/home/ftplog/vsftpd.log
xferlog_std_format=YES
chroot_local_user=YES //锁定用户在根目录
guest_enable=YES
guest_username=ftp //所有的虚拟用户均以此身份登录
anon_umask=022 // (目录权限为755,默认文件权限为644) 虚拟用户用 anon_umask 设置 umask 值,非 local_umask 数据项。
user_config_dir=/etc/vsftpd_user_conf //用户配置文件所在的文件夹,启用此配置之后,用户自定义的配置文件的优先级大于全局配置
pam_service_name=vsftpd.vu //用户验证方式
local_enable=YES // 允许本地用户登录(即ftp用户)
use_localtime=YES // VSFTPD默认使用的时间是GMT(格林威治时间),更改为本地(即服务器)时间
secure_chroot_dir=/var/run/vsftpd

修改 vsftpd.conf 文件之前,应该备份

=== 6. 用户个性化设置

建立两个文件,文件名和用户名相同,test1,test2 ,两个文件放置在 vsftpd.conf 中定义好的用户配置文件夹中
/etc/vsftpd_user_conf/test1
/etc/vsftpd_user_conf/test2

test1 内容为
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/ftp/test1

test2 内容类似

至此配置完成,重新启动 vsftpd。

=== 7. 备份

经常需要变动的配置:
1. 增加用户、更改用户密码 ,均需要再次执行 步骤2 ,保留好 loguser 文件
2. 维护 vsftpd_user_conf 中个性化用户配置文件
3. 备份 vsftpd.conf

步骤 1,2 不需要重新启动 vsftpd;
步骤 3 需要重新启动

我的备份:
/home/jianghui/back/


=== 8. 附录
1. umask

umask是什么?
当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认权限, 它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。
如何计算umask值?
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字。对于文件来说,这 一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样 针对目录来说,umask中各个数字最大可以到7。
该命令的一般形式为:umask nnn
其中nnn为umask置000 – 777。
我们只要记住umask是从权限中“拿走”相应的位即可。下表是umask值与权限的对照表:
umask 文件 目录
——————–
0 6 7
1 6 6
2 4 5
3 4 4
4 2 3
5 2 2
6 0 1
7 0 0
——————–
如:umask值为022,则默认目录权限为755,默认文件权限为644。


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