注册 登录
星韵地理网 返回首页

追梦人生 http://www.xingyun.org.cn/?2 [收藏] [复制] [分享] [RSS] 有梦追梦,我愿用一生期待。

日志

用Linux架设FTP服务器(1)

已有 467 次阅读2003-12-29 21:02 |个人分类:信息技术

概述
   使用文件传输协议(FTP)来通过网络在计算机之间传输文件是很普遍的一种方法。几乎在所有的平台上面都有FTP 的客户端和服务端的软件,因此用FTP来传送文件也是很方便的一个方法。 
   有很多配置FTP服务器的不同方法。其中一种是把FTP配置成只对系统中的用户开放的私有服务器,这也是FTP的默认配置。一个私有的FTP服务器只运行系统中的用户访问,而且可以对用户进行访问控制,这样可以给予或拒绝特定用户的访问权限。
   另一种是把FTP服务器配置成匿名服务器。匿名FTP服务器允许任何人(不管有没有帐号)访问服务器并传输文件。因为可能存在潜在的安全问题,必须小心配置使得只允许访问系统中特定的目录。 在这一节里,我们把FTP配置成“chrooted”的方式,这种配置运行用户访问,例如:Web站点的目录,但是不允许他们访问更高一层的目录。
   注意事项
   下面所有的命令都是Unix兼容的命令。
   源路径都为“/var/tmp”(当然在实际情况中也可以用其它路径)。
   安装在RedHat Linux 6.1下测试通过。
   要用“root”用户进行安装。
   wu-ftp的版本号是2.6.0。
   编译和安装 
   把软件包(tar.gz)解压缩:
   [root@deep]# cp wu-ftpd-version.tar.gz /var/tmp
   [root@deep]# cd /var/tmp
   [root@deep]# tar xzpf wu-ftpd-version.tar.gz
   编译和优化
   转到wu-ftpd的新目录下,运行下面的命令:
   编辑“ftpcount.c”文件(vi +241 src/ftpcount.c),改变下面这一行:
   #if defined (LINUX)
   改为:
   #if defined (LINUX_BUT_NOT_REDHAT_6_0)
   编辑“pathnames.h.in”文件(vi +42 src/pathnames.h.in),改变下面这一行:
   #define _PATH_EXECPATH "/bin/ftp-exec"
   改为:
   #define _PATH_EXECPATH "/usr/bin/ftp-exec"
   我们把“ftp-exec”从“/bin”目录改到“/usr/bin”目录下。
 先设置编译器的编译参数:
   CC="egcs" 
   CFLAGS="-O9 -funroll-loops -ffast-math -malign-double -mcpu=pentiumpro -march=pentiumpro -fomit-frame-
   pointer -fno-exceptions" 
   ./configure 
   --prefix=/usr 
   --sysconfdir=/etc 
   --localstatedir=/var 
   --disable-dnsretry 
   --enable-quota 
   --enable-pam 
   --disable-daemon 
   --disable-newlines 
   --disable-virtual 
   --disable-plsm 
   --disable-pasvip 
   --disable-anonymous 
   --enable-ls 
   --enable-numericuid
   这些编译参数告诉编译器如何编译wu-ftpd:
   不要用失败的DNS查询
   加入对定额(QUOTA)的支持(如果OS支持)
   加入对PAM的支持
   不允许作为单独的daemon运行
   删除过多的空行
   不支持虚拟服务器
   禁止PID加锁睡眠消息(用于繁忙的站点)
   被动连接的时候不要求用同样的IP
   不允许匿名ftp访问
   使用内部的“ls”命令(试验性的)
   内部的“ls”命令显示UID而不显示用户名(为了提高速度)
   用下面的命令编译和安装软件:
   make
   make install
   install -m 755 util/xferstats /usr/sbin
   touch /var/log/xferlog
   chmod 600 /var/log/xferlog
   cd /usr/sbin
   ln -sf in.ftpd /usr/sbin/wu.ftpd
   ln -sf in.ftpd /usr/sbin/in.wuftpd
   strip /usr/bin/ftpcount
   strip /usr/bin/ftpwho
   strip /usr/sbin/in.ftpd
   strip /usr/sbin/ftpshut
   strip /usr/sbin/ckconfig
   strip /usr/sbin/ftprestart
   上面的“make”和“make install”可以配置软件以保证系统中有编译所需要的函数库,然后把所有的源文件都编译成可执行的二进制文件,最后把二进制文件和配置文件安装到相应的目录里。
 “install –m”安装“xferstats”程序,用于统计传输了多少文件。“touch”命令为xferstats在“/var/log”目录下创建日志文件。“chomod”把“xferlog”的权限改为只对超级用户“root”可读和可写。接着,我们为“in.ftpd”二进制文件创建符号链接。最后,用“strip”命令减小所有二进制文件的大小以提高wu-ftpd的性能。
   清除不必要的文件
   [root@deep]# cd /var/tmp
   [root@deep]# rm -rf wu-ftpd-version/ wu-ftpd-version.tar.gz
 “rm”命令删除所有编译和安装wu-ftpd所需要的源程序,并且把wu-ftpd软件的压缩包删除掉。
   为FTP站点的用户建立没有shell的帐号
   首先,创建一个新的用户,这个用户被允许连接到ftp服务器上。因为要有“chroot”的环境,这个帐号不同于正常的用户帐号,不能受访问限制。“chroot”使用户产生这样的感觉好像自己已经在文件系统的最顶层了。
   第一步
   用下面的命令在“/etc/passwd”文件中创建用户。对于每个允许访问ftp服务器的新用户都要重复这个步骤。
   [root@deep]# mkdir /home/ftp
   [root@deep]# useradd -d /home/ftp/ftpadmin/ -s /dev/null ftpadmin > /dev/null 2>&1
   [root@deep]# passwd ftpadmin
   Changing password for user ftpadmin
   New UNIX password:
   Retype new UNIX password:
   passwd: all authentication tokens updated successfully
   第二步
   编辑“/etc/shells”文件并加入一个空shell,如:null。这个假的shell可以限制用户对ftp服务器的访问。
   [root@deep]# vi /etc/shells
   /bin/bash
   /bin/sh
   /bin/ash
   /bin/bsh
   /bin/tcsh
   /bin/csh
   /dev/null ? This is our added no existent shell
   第三步
   现在编辑“/etc/passwd”文件,手工加上“/./”把“/home/ftp”目录和“/ftpadmin”目录分开,用户“ftpadmin”会自动转到(chdir)“/ftpadming”目录下。在“passwd”文件中每添加一个ftp用户都要重复这个步骤。
   编辑“passwd”文件(vi /etc/passwd),把下面这一行改为:
   ftpadmin:x:502:502::/home/ftp/ftpadmin/:/dev/null
   改为:
  ftpadmin:x:502:502::/home/ftp/./ftpadmin/:/dev/null
   帐号为“ftpadmin”,这这个帐号的家目录有一些奇怪。第一部分“/home/ftp/”表示“chroot”时作为根目录的目录。被点号分开的“/ftpadmin”表示当登录ftp服务器的时候会自动转到这个目录。“/dev/null”这个空shell不允许“ftpadmin”像正常用户那样登录。经过这些改变,“ftpadmin”用户用的不是真正的shell而是伪shell,这样访问ftp服务器就受到限制。 创建一个“chroot”用户环境
 先要创建一个简单的根文件系统(root file system),包含有足够的文件,如果二进制程序、口令文件,等等。当用户登录的时候,Unix就可以改变根文件系统(chroot)。注意一下,如果编译的时候象上面那样加上“--enable-ls”参数,“/home/ftp/bin”和“/home/ftp/lib”两个目录就可以不要了,因为WU-FTP会用自己带的“ls”。不过我们还是介绍一下旧的方法,也就是把“/bin/ls”拷贝到“/home/ftp/bin”(chroot之后就是“/bin”)目录下,然后把相关的运行库拷贝到“/home/ftp/lib”目录下。

发表评论 评论 (1 个评论)

flicker 彩虹炫 | flicker 匿名卡 | 学习中 2005-10-16 20:58
不错的文章,不过LINUX的确比较复杂

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|小黑屋|星韵百科|星韵地理网 ( 苏ICP备16002021号 )

GMT+8, 2024-5-17 14:29 , Processed in 0.076499 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

返回顶部