Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1285858
  • 博文数量: 273
  • 博客积分: 5865
  • 博客等级: 准将
  • 技术积分: 3280
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-11 10:01
文章分类

全部博文(273)

文章存档

2015年(33)

2014年(11)

2013年(11)

2012年(136)

2011年(32)

2010年(50)

分类: 系统运维

2012-07-28 17:07:57

常见的FTP服务器程序:vsftpd,Serv-U,wu-ftpd,Proftpd,IIS

常见的FTP客户端程序:ftp命令,FlashFXP,LeapFTP,gftp,Filezilla

数据连接的建立类型
主动模式:服务端从20端口主动向客户端发起连接
被动模式:服务端在指定范围内的某个端口被动等待客户端发起连接
FTP传输模式
文本模式:ASCII模式,以文本序列传输数据
二进制模式:Binary模式,以二进制序列传输数据
vsftpd的主配置文件/etc/vsftpd/vsftpd.conf
local_enable=YES                         #本地用户登入开启
anon_enable=YES                        #匿名用户登入开启
anon_root=/var/ftp                        #匿名用户的FTP根目录
write_enable=YES                        #本地用户可写权限开启
download_enable=YES                #是否允许下载文件
local_umask=022                          #本地用户上传文件的umask(掩码)值
anon_other_write_enable=YES     #匿名用户创建目录权限开启
anon_mkdir_write_enable=YES    #匿名用户其他写入权限开启
anon_upload_enable=YES            #匿名用户允许上传文件
chroot_local_user=YES                #锁定所有用户家目录
chroot_list_enable=YES                #对一些用户锁定用户家目录功能开启
chroot_list_file=/etc/vsftpd/chroot_list    #锁定家目录用户列表存储文件路径
xferlog_enable=YES                      #开启传输日志功能
xferlog_std_format=YES                #指定传输日志的格式
xferlog_file=/var/log/xferlog            #传输日志存储文件所在位置
anon_max_rate=0                          #匿名用户的最大传输速度(0表示不限制速度,速度单位是字节)
local_max_rate=0                          #本地用户的最大传输速度
max_clients=100                           #该FTP服务器的最大并发连接数
max_per_ip=2                               #一个IP最多可创的连接数
connect_form_port=20                  #允许FTP服务器使用主动模式
ascii_upload_enable=YES              #ASCII传输模式开启
ftpd_banner=Welcome to FTP              #打印欢迎信息
listen_address=192.168.0.252               #设置监听的IP地址
listen_port=21                               #设置监听FTP服务的端口号
userlist_enable=YES                     #是否启用user_list列表文件
userlist_deny=YES                        # 是否禁用user_list中的用户
ls_recurse_enable=YES                #使用ls命令是可以递归
listen=YES                                   #表示是该服务进程独立守护进程
tcp_wrappers=YES                     #表示该服务支持tcp_wrappers
pam_service_name=vsftpd           #PAM认证所用文件
ssl_enable=YES                          #应用SSL加密数据传输
ssl_tlsv1=YES                             #使用SSL的类型
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.pem                  #授权FTP服务证书的存放路径
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key       #FTP服务器的私钥存放路径
force_anon_login_ssl=YES                                    #匿名用户登入时使用SSL
force_anon_date_ssl=YES                                    #匿名用户进行数据传送时进行SSl加密

若开启selinux的功能,需要打开allow_ftpd_anon_write功能,同时为共享目录打上 public_content_rw_t的标签,其命令为:`getbool -a | grep ftp` ;  `setsebool -P allow_ftpd_anon_write on`  ;   `chcon -t public_content_rw_t incoming/`。

FTP使用虚拟用户

1.建立虚拟FTP用户的帐号数据库文件(单行使用户账号,双行是上一行的密码)
  vim /etc/vsftpd/vusers.txt
   wendy
   123456
   sandy
   456

  cd /etc/vsftpd/
  db_load -T -t hash -f vusers.txt   vusers.db
  file vusers.db
  vusers.db: Berkeley DB (Hash, version 8, native byte-order)
  chown 600 /etc/vsftpd/vusers.*

2.创建FTP根目录及虚拟用户映射的系统用户
  useradd -d /var/ftproot -s /sbin/nologin vsftp

3.建立支持虚拟用户的PAM认证文件
   vim /etc/pam.d/ftp

   auth         required     pam_userdb.so db=/etc/vsftpd/vusers
   account    required     pam_userdb.so db=/etc/vsftpd/vusers
4.在vsftpd.conf文件中添加支持配置
   vim  /etc/vsftpd/vsftpd.conf
   guest_enable=YES
   guest_username=vsftp
   pam_service_name=ftp

5.为个别虚拟用户建立独立的配置文件
  vim /etc/vsftpd/vsftpd.conf
  user_config_dir=/etc/vsftpd/vusers_dir
  mkdir /etc/vsftpd/users
  cd /etc/vsftpd/users

  vim  wendy
  anon_upload_enable=YES      
  anon_other_write_enable=YES    
  anon_mkdir_write_enable=YES
  cp wendy sandy

  vim sandy
  anon_upload_enable=NO    
  anon_other_write_enable=NO    
  anon_mkdir_write_enable=NO

6.重新加载vsftpd配置
  service vsftpd restart

7.使用虚拟FTP账户访问测试wendy用户可以登录,并可以浏览、下载文件,可以上传jsandy用户可以登录,并可以浏览,但不可以下载文件,也不可以上传

                                                              NFS

/etc/exports文件列举出通过NFS导出的文件系统,以及可以访问每个文件系统的客户机。客户机列表和文件系统之间以空白分隔,每个客户机之后紧跟着用括号括起来,以逗号分隔的一系列选项。
/etc/exports文件的客户机说明
1.)主机名       hostname          单个主机
2.)网络组       @groupname        NIS网络组
3.)通配符       *和?              具有通配符的FQDN,“*”不匹配点号"."
4.)IP网络       ipaddr/mask       CIDR风格,长格式可作为匹配
/etc/exports的常用导出选项
rw,ro                        以读写的方式导出(默认方式)以只读的方式导出 
sync                         同步写入,直接写入硬盘
async                        让服务器在实际写磁盘之前就先回应写请求
root_squash                  将UID0和GID0映射成anonuid和anongid所指定的值             
no_root_squash             
all_squash                   将所用的UID和GID映射到它们各自的匿名版本上

showmount   -e   hostname    打印出hostname主机的共享文件系统
exports     -a               导出所有的文件系统
exports     -r               重新输出所有文件系统
exports     -v               打印出文件系统的详细信息
exports     -u               指定卸载的文件系统        
NFS共享时的注意事项
1.)包含服务器的配置文件不要导出
2.)导出整个文件系统,最好不是目录
3.)不要使用no_root_squash的方式导出文件系统
4.)使用crossmnt和nohide时要慎用

                                                   Samba  服务器

/etc/samba/smb.conf
[globe]                        全局设置
workgroup                  工作组的名称,注意主机群要相同
server string                主机的简易说明
security                       表示服务器的安全级别有user,Server,domain,share4个设置值
passdb backend           samba有单独的文件存放账号的密码
load printers                共享打印机
cups options                打印机选项

[homes]                      用户家目录共享设置
comment                    对这个目录的说明
browseable                 此共享只能有属主能看到
writeable                    设置是否可以写入

[printers]                    打印机共享设置
comment                    对打印机做简单描述
path                           共享打印机的路径
browseable                此共享打印机只能有属主能看到
guest ok                    设置是否让所有可以登入的用户看到此打印机  
valid users                 设置哪些用户可访问此资源         
printable                    是否为打印资源

[分享名称]              自定义名称共享目录设置
comment                   对此目录的说明
path                          共享目录的路径
public                        设置是否让所有可以登入的用户看到此目录
writeable                   设置是否可以写入
write list                    定义一定范围的用户具有写权限
printable                    是否是打印资源

定义samba的密码
useradd redhat
smbpasswd  -a redhat

查看,上传,下载共享资源
smbclient -L  192.168.0.29
smbclient //192.168.0.29/shared -U redhat

挂载samba共享资源
mount -t cifs service mountpoint -o option1,option2

若开启了Selinux服务需要给共享目录打上smaba_share_t的标签:`chcon -t smaba_share_t /shared -R`,这样就可以正常使用smaba服务器提供的共享服务。

 

 

 

 

 

 

 

 

 

来: NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统(Linux和Unix间)的计算机间共享文件和外设,所以它的通讯协定设计与主机及操作系统无关. 它是由SUN公司于1984年推出,使得可以本地机一样的使用另一台联网计算机的文件和外设。NFS在文件传送或信息传送过程中依赖于RPC协议

功能:当我们的NFS Server设定好共享目录后,其他的NFS Client端就可以将这个目录挂载到自己系统上面的某个挂载点(挂载点可以自定义),进入这个挂载点即可查看共享的文件。

缺陷: a.明文传输

b.只能用于Linux和Unix间操作系统中

c.新版的NFS服务是置于系统内核中的。

2.RPC:RPC, 远程过程调用 (remote procedure call)是能使客户端执行其他系统中程序的一种机制。由于使用 RPC 的程序不必了解支持通信的网络协议的情况,因此 RPC 提高了程序的互操作性。常用于分布式C/S模型,发出请求的程序是客户程序,而提供服务的程序是服务器。

功能:NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些 端口 来传输文件,因此, NFS 的功能所对应的端口不固定,而是采用随机取用一些未被使用的小于 1024 的端口来使用,但客户端又不知道服务器端的相关端口,所以需要远程过程调用(RPC) 的服务,RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且返回给客户端,让客户端可以连结到正确的端口上去。当服务器在启动 NFS 时会随机取用数个端口,并主动的向 RPC 注册,因此 RPC 可以知道每个端口对应的 NFS 功能,然后 RPC 又是固定使用 port 111 来监听客户端的需求并返回客户端正确的端口。

可以指定的静态端口:MOUNT_PORT=”4002”

STATD_PORT=”4003”

LOCKD_TCPPORT=”4004”

LOCKD_UDPPORT=”4004”

ROUOTAD_PORT=”4005”

STATD_OUTGOING_PORT=”4006”

3.NFS包:nfs-utils-1.0.6-65.EL4

脚本:nfs,nfslock

端口:2049(Tcp/Udp)nfsd, 其他半随机111Tcp/Udp,及其他的小于1024的随机端口。

配置文件:/etc/exports, /etc/sysconfig/nfs

进程:rpc.mounted -------mount

lockd--------NLM

rpc.statd------NLM

NFS 主程序:nfs-utils
RPC 主程序:portmap

/var/lib/nfs/*tab
在NFS服务器的登录档都放置到/var/lib/nfs/目录里面,在该目录下有两个比较重要的登录档,一个是etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个xtab则记录曾经连结到此NFS主机的相关客户端资料。
/var/lib/nfs/rmtab
状态文件,列出了挂接导出文件的远程客户机清单。

4.服务器端得应用及其规则

A安装nfs软件包:yum list all|grep nfs

yum install nfs-utils.i386

B.启动RPC服务:service portmap start(portmap不需要设定,只要直接启动就行,启动之后,会出现一个port 111的sunrpc的服务

查看RPC服务的状态:service portmap status

rpcinfo -p localhost(查看当前主机的RPC状态)

启动nfs服务service nfs restart(开启nfs服务)

chkconfig nfs on(将其加入开机自启行列)

C编辑nfs的配置文件:vi /etc/exports(默认为空)

假设为下面所示:

/var/guest 192.168.1.0/24(rw,async)

/var/ftp 192.168.0.0/24(rw,no_root_squash,sync)

保存退出!

注意下面是一些NFS共享的常用参数
ro: read-only,只读访问权限
rw: read-write,可读写的权限
sync: 资料同步写入到内存与硬盘
async: 资料会先暂存于内存中,而非直接写入硬盘(异步)
secure: NFS通过1024以下的安全TCP/IP端口发送
insecure: NFS通过1024以上的端口发送
wdelay: 如果多个客户要写入NFS目录,则归组写入(默认)
no_wdelay: 如果多个客户要写入NFS目录,则立即写入,当使用async时,无需此设置。
hide: 在NFS共享目录中不共享其子目录
no_hide: 共享NFS目录的子目录
subtree_check: 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

no_subtree_check: 和上面相对,不检查父目录权限
no_all_squash: 保留共享文件的UID和GID(默认)
all_squash
不论登入 NFS 的使用者身份为何, 他的UID和GID映射匿名客户anonymous(通常也就是 nobody(nfsnobody)),适合公用目录。
root_squash 
在登入NFS主机使用共享之目录的使用者如果是root时,那么这个使用者的权限将被映射成为匿名使用者,通常他的 UID 与 GID 都会变成nobody(nfsnobody) 那个系统帐号的身份的权限;uid和gid由0变为65534.
no_root_squash         
登入NFS主机使用共享目录的使用者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限!这个项目『极不安全』,不建议使用!
anonuid=xxx: 指定NFS服务器/etc/passwd文件中匿名客户的UID
anongid=xxx: 指定NFS服务器/etc/passwd文件中匿名客户的GID

D.此时我们不需重启服务,可以使用命令将其重新读取:

exportfs –a

注意-a :全部挂载(或卸载和-u连用时)/etc/exports文件内的设置
-r :重新挂载/etc/exports里面的设置,此外,亦同步更新/etc/exports及/var/lib/nfs/xtab 的内容!
-u :卸载某一目录
-v :在export的时候,将分享的目录显示到屏幕上

exportfs -arv重新挂载一次 /etc/exports的设置

exportfs –auv全部卸载

E. 此时我们可以自己先检查一下NFS服务器是否可以连接

showmount –e localhost

showmount -a localhost

注意: showmount [-ae] [hostname|IP]

-p :显示出所有的 port 与 porgram 的信息;
参数:
-a :这个参数是一般在NFS 服务器上使用,是用来显示已经挂载上本机nfs目录的客户机

-d:查看哪个目录已被挂载到NFS 服务器上。(一般也在NFS 服务器上使用)
-e :显示主机的 /etc/exports 所共享的目录

5.客户端的配置及规则:

A.当客户端访问服务器时,我们需要首先建立挂载点

Eg:mkdir mnt

B.挂载共享目录

mount -t nfs 192.168.1.0:/var/ftp mnt/

C.此时我们可以切换到挂载目录中查看共享目录

showmount –e IP(服务器的ip地址)

cd mnt

ls

如果是root用户,即可查看里面的文件,但是只读权限(规定为可读可写,为何为只读呢?)

Reason:因为root_squash参数,没有规定时,都将root用户映射为匿名用户,将其uid和gid由0变为65534,权限缩减。除非声明声明no_root_squash,root用户登录时才可以保持共享目录中规定的权限。修改如下:

/var/guest 192.168.1.0/24(rw, no_root_squashasync)

6.案例:

1. 假如说服务器上有个用户natasha,并且他是/var/guest目录的所有者,即将目录的用户和组都改为natasha,假如natasha的uid为2001,在客户机上有个natasha和mary两个用户,但natasha的uid为2000,mary的uid为2001,此时natasha将无法登录,而mary却可以查看(原因很简单,NFS是靠uid和gid来识别用户的身份的。)

2. 同一目录针对不同范围开放不同权限

# vi /etc/exports
/home/public  192.168.0.0/24(rw)    *(ro)

即将主机与网域分为两段(用空格隔开),此时当客户机处于192.168.0.0/24这个网段中时,针对这个被挂在的目录就具有可读可写的权限;而其他网段的客户机挂载目录后就只有可读权限。

3. 开放匿名登入的情况

# vi /etc/exports

/home/linux  *.linux.org(rw,all_squash,anonuid=40,anongid=40)
# 如果要开放匿名,那么重点是all_squash,并且要配合anonuid

当 test.linux.org 登入这部 NFS 主机,并且在 /home/linux 写入文件时,该文件的所有人与所有群组,就会变成/etc/passwd 里面对应的UID为40的那个身份的使用者

总结:/etc/exports 中client的书写规则
(1)单个主机
可以用短名及完全限定名(QFDN),或者用IP地址,例如student1,student1.test.com.cn或者192.168.10.1

(2)Net-Group
可以列出/etc/netgroup文件中或NFS网组映射中定义的整组主机。网组名以@开头。
(3)通配符主机(*,?)
.discuz.net *. *.comsenz.com

*:匹配零个或多个

?:只匹配一个
(4)掩码
192.168.1.0/255.255.255.0

 

vsftpd是UNIX类操作系统上运行的服务器名称,它的名字代表“very secure FTP daemon”,安全性是其设计与开发的一个重要目标。它可运行在Linux、Solaris等系统中,支持很多其他的FTP 服务器不支持的特征: 非常高的安全性需求 带宽限制 良好的可伸缩性 创建虚拟用户的可能性 分配虚拟IP地址的可能性 一、vsftpd的启动 #service vsftpd start 如果允许用户匿名访问 ,需创建用户ftp和目录/var/ftp # mkdir /var/ftp # useradd –d /var/ftp ftp 二、vsftpd的配置 Vsftpd的配置文件存放在/etc/vsftpd/vsftpd.conf 我们可根据实际数要对如下信息进行配置: 1. 连接选项 ☆监听地址和控制端口 (1) listen_address=ip address 定义主机在哪个IP 地址上监听FTP请求。即在哪个IP地址上提供FTP服务。 (2) listen_port=port_value 指定FTP服务器监听的端口号。默认值为21。 2. 性能与负载控制 ☆超时选项 (1) idle_session_timeout= 空闲用户会话的超时时间,若是超过这段时间没有数据的传送或是指令的输入,则会被迫断线。默认值是300s (2) accept_timeout=numerical value 接受建立联机的超时设定。默认值为60s ☆负载选项 (1) max_clients= numerical value 定义FTP服务器最大的兵法连接数。当超过此连接数时,服务器拒绝客户端连接。默认值为0,表示不限最大连接数。 (2) max_per_ip= numerical value 定义每个IP地址最大的并发连接数目。超过这个数目将会拒绝连接。此选项的设置将会影响到网际快车、迅雷之类的多线程下载软件。默认值为0,表示不限制。 (3) anon_max_rate=value 设定匿名用户的最大数据传输速度,以B/s为单位。默认无。 (4) local_max_rate=value 设定用户的最大数据传输速度。以B/s为单位。默认无。此选项对所有的用户都生效。 3. 用户选项 vsftpd的用户分为3类:匿名用户、本地用户(local user)及虚拟用户(guest) ☆ 匿名用户 (1) anonymous_enable=YES|NO 控制是否允许匿名用户登录 (2) ftp_username= 匿名用户使用的系统用户名。默认情况下,值为ftp (3) no_anon_password= YES|NO 控制匿名用户登录时是否需要密码。 (4) anon_root= 设定匿名用户的根目录,即匿名用户登录后,被定位到此目录下。主配置文件中默认无此项,默认值为/var/ftp/ (5) anon_world_readable_only= YES|NO 控制是否只允许匿名用户下载可阅读的文档。YES,只允许匿名用户下载可阅读的文件。NO,允许匿名用户浏览整个服务器的文件系统。 (6) anon_upload_enable= YES|NO 控制是否允许匿名用户上传文件。除了这个参数外,匿名用户要能上传文件,还需要两个条件,write_enable参数为YES;在文件系统上,FTP匿名用户对某个目录有写权限。 (7) anon_mkdir_wirte_enable= YES|NO 控制是否允许匿名用户创建新目录。在文件系统上,FTP匿名用户必须对新目录的上层目录拥有写权限。 (8) anon_other_write_enbale= YES|NO 控制匿名用户是否拥有除了上传和新建目录之外的其他权限。如删除、更名等。 (9) chown_uploads= YES|NO 是否修改匿名用户所上传文件的所有权。YES,匿名用户上传得文件所有权改为另一个不同的用户所有,用户由chown_username参数指定。 (10) chown_username=whoever 指定拥有匿名用户上传文件所有权的用户。 ☆本地用户 (1) local_enable= YES|NO 控制vsftpd所在的系统的用户是否可以登录vsftpd。 (2) local_root= 定义本地用户的根目录。当本地用户登录时,将被更换到此目录下。 ☆虚拟用户 (1) guest_enable= YES|NO 启动此功能将所有匿名登入者都视为guest (2) guest_username= 定义vsftpd的guest用户在系统中的用户名。 4. 安全措施 ☆用户登录控制 (1) /etc/vsftpd.ftpusers Vsftpd禁止列在此文件中的用户登录FTP服务器。此机制是默认设置的。 (2) userlist_enable= YES|NO 此选项激活后,vsftpd将读取userlist_file参数所指定的文件中的用户列表。 (3) userlist_file=/etc/vsftpd.user_list 指出userlist_enable选项生效后,被读取的包含用户列表的文件。默认值是/etc/vsftpd.user_list (4) userlist_deny= YES|NO 决定禁止还是只允许由userlist_file指定文件中的用户登录FTP服务器。userlist_enable选项启动后才能生效。默认值为YES,禁止文中的用户登录,同时不向这些用户发出输入口令的指令。NO,只允许在文中的用户登录FTP服务器。 ☆目录访问控制 (1) chroot_list_enable= YES|NO 锁定某些用户在自己的目录中,而不可以转到系统的其他目录。 (2) chroot_list_file=/etc/vsftpd/chroot_list 指定被锁定在主目录的用户的列表文件。 (3) chroot_local_users= YES|NO 将本地用户锁定在主目中。 三、vsftpd服务器的配置实例: 基于IP的虚拟FTP服务器配置 假设服务器有两个IP地址,192.168.1.199和192.168.1.200。vsftpd是建立在192.168.1.199上的。现在在192.168.1.200上再提供一个虚拟FTP服务器。 ☆创建虚拟FTP服务器根目录 # mkdir –p /var/ftp2/pub 确保/var/ftp2和/var/ftp2/pub目录的所有者和组均为root,掩码为755 # chmod 755 /var/ftp2 # chmod 755 /var/ftp2/pub # chown –R root /var/ftp2 # chown –R : root /var/ftp2 ☆ 增加虚拟FTP服务器的匿名用户帐号ftp2 # useradd –d /var/ftp2 –M ftp2 ☆ 创建虚拟FTP服务器的配置文件 复制原来的vsftpd.conf作为虚拟FTP服务器的配置文件,并修改相关参数 # cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf # vi /etc/vsftpd/vsftpd2.conf 添加或修改参数: Listen=YES Listen_address=192.168.1.200 ftp_username=ftp2 anon_root=/var/ftp2 并可参考vsftpd的配置部分的说明做其他配置,如: 允许匿名用户上传文件 Write_enable=YES Anon_world_readable_only=NO Anon_upload_enable=YES Anon_mkdir_write_enable=YES 创建匿名用户上传文件的目录,并设置权限: # mkdir /var/ftp/incoming # chmod o+w /var/ftp/incoming 取消写权限 Write_enable=NO Anon_upload_enable=NO Anon_mkdir_write_enable=NO Anon_other_write_enable=NO 限制下载速度为80KB/s Anon_max_rate=8000 控制并发数,以及每个IP地址的并发数 Max_clients=100 Max_per_ip=3 ☆启动虚拟FTP服务器 # /usr/sbin/vsftpd /etc/vsftpd/vsftpd2.comf &
阅读(2332) | 评论(1) | 转发(0) |
0

上一篇:快速搭建ftp服务器

下一篇:我的vsftpd排错

给主人留下些什么吧!~~

qingshanli19882012-07-31 09:02:11