- 论坛徽章:
- 0
|
基于UNIX平台FTP服务器的建立
目前很多企业单位正在构架自己的Intranet,FTP服务器是其中的一个服务支持,有很多单位购置了基于UNIX平台的计算机,为了在网上能够提供FTP服务支持,专门购置基于UNIX平台的FTP Server软件,其实在基于UNIX平台的计算机系统中,采取一定的技术方法,就可以建立自己的FTP Server,实现网上文件上下载服务,无须再购置专门的软件,和乐而不为之呢?下面就其建立过程阐述如下:
1. 确定FTP Server的共享目录
为FTP Server建立一个FTP工作目录,在此设定为/home/ftp
2. 编写FTP Server初始设置的Shell程序(setup)
用编辑工具(如vi)编写一个Shell程序,用于对系统进行设置。
#!/bin/sh
case $# in
0) ftphome="`grep '^ftp:' /etc/passwd | cut -d: -f6`"
;;
1) if [ "$1" = "start" ]; then
ftphome="`grep '^ftp:' /etc/passwd | cut -d: -f6`"
else
ftphome=$1
fi
;;
*) echo "Usage: $0 [anon-ftp-root]"
exit 1
;;
esac
if [ -z "${ftphome}" ]; then
echo "$0: ftphome must be non-null"
exit 2
fi
if [ "${ftphome}" = "/" -o "${ftphome}" = "/usr" ]; then
echo "$0: ftphome must not be / or /usr"
exit 2
fi
if [ ! -d ${ftphome} ]; then
mkdir ${ftphome}
fi
if [ ! -d ${ftphome}/usr/bin ]; then
mkdir -p ${ftphome}/usr/bin
fi
cp /usr/bin/ls ${ftphome}/usr/bin
chmod 111 ${ftphome}/usr/bin/ls
chown root ${ftphome}/usr/bin
chmod 555 ${ftphome}/usr/bin
if [ -r ${ftphome}/bin ]; then
mv -f ${ftphome}/bin ${ftphome}/Obin
fi
ln -s usr/bin ${ftphome}
if [ ! -d ${ftphome}/usr/lib ]; then
mkdir -p ${ftphome}/usr/lib
fi
if [ ! -d ${ftphome}/etc ]; then
mkdir -p ${ftphome}/etc
fi
cp /usr/lib/ld.so /usr/lib/ld.so.1 ${ftphome}/usr/lib
for lib in libc libdl libintl libw libnsl libsocket \
nss_nis nss_nisplus nss_dns nss_files
do
cp /usr/lib/${lib}.so.1 ${ftphome}/usr/lib
rm -f ${ftphome}/usr/lib/${lib}.so
ln -s ./${lib}.so.1 ${ftphome}/usr/lib/${lib}.so
done
cp /usr/lib/straddr.so.2 ${ftphome}/usr/lib
rm -f ${ftphome}/usr/lib/straddr.so
ln -s ./straddr.so.2 ${ftphome}/usr/lib/straddr.so
cp /etc/passwd /etc/group /etc/netconfig ${ftphome}/etc
chmod 555 ${ftphome}/usr/lib/*
chmod 444 ${ftphome}/etc/*
chown root ${ftphome}/usr/lib ${ftphome}/etc
chmod 555 ${ftphome}/usr/lib ${ftphome}/etc
if [ ! -d ${ftphome}/dev ]; then
mkdir -p ${ftphome}/dev
fi
prefix="/devices/pseudo/mm@0:"
for device in zero
do
line=`ls -l ${prefix}${device} | sed -e 's/,//'`
major=`echo $line | awk '{print $5}'`
minor=`echo $line | awk '{print $6}'`
rm -f ${ftphome}/dev/${device}
mknod ${ftphome}/dev/${device} c ${major} ${minor}
done
prefix="/devices/pseudo/clone@0:"
for device in tcp udp ticotsord
do
line=`ls -l ${prefix}${device} | sed -e 's/,//'`
major=`echo $line | awk '{print $5}'`
minor=`echo $line | awk '{print $6}'`
rm -f ${ftphome}/dev/${device}
mknod ${ftphome}/dev/${device} c ${major} ${minor}
done
chmod 666 ${ftphome}/dev/*
chown root ${ftphome}/dev
chmod 555 ${ftphome}/dev
#建立一个匿名FTP服务目录,并设立可读可写属性
if [ ! -d ${ftphome}/pub ]; then
mkdir -p ${ftphome}/pub
fi
chown ftp ${ftphome}/pub
chmod 777 ${ftphome}/pub
3. 编辑/etc/passwd和/etc/shadow文件
设置匿名FTP帐号,按下面方法分别对/etc/passwd和/etc/shadow两个文件中增加如下数据项:
(1)在/etc/passwd文件中增加
ftp:30000:30000:Anonymous FTP:/home/ftp:/nosuchshell
(2)在/etc/shadow文件中增加
ftp:NP:6445::::::
4. 运行setup程序
在运行setup程序之前,将该文件设置成执行文件
#chmod +x setup
运行setup程序 #setup /home/ftp
以上步骤就完成了FTP服务器的建立,即可使用FTP服务器,可以用如explorer、netscape navigator等浏览器对FTP服务器进行访问,进行下载和上载文件操作,使用非常方便。
在internet manager 中选择ftp的前两项,系统自动创建账户:ftp,组名为:group, 口令无,改shell为/bin/false(限制了telnet、su等操作),SCO Unix OpenServer 5中匿名FTP的缺省主目录是:/usr/internet/ip/0.0.0.0/sco_ftp,系统管理员须首先将ftp账户主目录,改位/ftp_server,操作如下:
#mv /usr/internet/ip/0.0.0.0/sco_ftp /ftp_server
#ln –s /ftp_server /usr/internet/ip/0.0.0.0/sco_ftp
创建上传用户ftpup,选择不创建主目录,选择/ftp_server为主目录。
下面为可选项:
#chown ftpup /ftp_server
#chgrp group /ftp_server
★ftp和ftpup必须同为group组
FTP(文件传输)和E-mail(电子邮件)、Telnet(远程登录)
一样,是Internet的三大主要功能之一。因为使用频繁,
用户往往会遇到各种各样的问题,合理利用FTP命令的初
始化文件.netrc,使运行FTP后自动执行某些FTP的内部命
令,可有效地克服各种使用中的不便,极大地方便FTP的使
用者。
·netrc中应包含的基本命令
FTP中有几十个命令,在.netrc中应该设置的大致有如
下几条:
1.default loginpassword
在Internet中,存在大量的匿名ftp帐户,用户在不同
的主机间频繁登录anonymous帐户,输入自
己的电子邮件地址作为口令,这种输入极其繁琐,完
全有必要利用.netrc文件,在进入ftp时自动
完成该过程。
2.binary
许多用户在下载大量文件之后才意识到下载的文件
是二进制文件,而自己却是使用ascii方式传
输,使下载文件无法使用,做了许多无用功。
在.netrc文件中提前将传输方式设置为binary,完全
可避免出现上述情况。
3.runique
使用Internet的用户都知道,在浩如烟海的文件中,
有大量同名文件,如readme、index等,如果
将同名文件下载到同一目录,则新传的文件会覆盖原
同名文件。为了使具有潜在重要性的文件不
至于被意外覆盖,也需要在.netrc文件中,设置
runique参数防止上述错误。
4.prompt off
使用ftp时,经常会用到mget或其它需要确认的ftp命
令,将此确认过程取消,可大大方便使用者。
5.hash on
ftp中的hash命令,使得在进行文件传输时,每传输1
千字节,在屏幕上显示一个"#"号,用户通过观
看屏幕上的"#"号,可以很直观地看到传输速度的快
慢,以及文件的传输完成情况,以决定进一步的
操作。
6.idle 7200
目前国内的Internet专线速率普遍偏低,用户数却在
急剧膨胀,所以用ftp传输销大一些的文件
时,经常会因为线路拥塞而断线,致使ftp进程中断,
为了减少因断线而反复登录的次数,需将idle
命令的参数设置为最大(一般为7200秒)。
7.macdef
macdef定义一个宏,macro_name为宏定义的名称。在
macdef行下,可输入任何有效的ftp命令,并
以空行结束宏定义,执行时只需在宏名前加"$"号即
可。如果宏名定义为init,则该宏命令在启动
ftp后自动加以执行,无需用户输入$ macro_name。
·netrc的使用举例
1.用vi编辑器先编辑一个如下的文件:
default login anonymous password
user@my.site
macdef init
binary .
runique .
hash on .
prompt off
idle 7200
(空行)
第1行意为缺省情况下,进入anonymous帐户,并以自
己的电子邮件地址为口令;第2行至第8行定义
了宏init,该宏中的所有5条命令将在进入ftp环境后
立刻执行,第8行(空行)不可省略,否则为无
效宏定义。
2.利用.netrc可将用户所需操作大大简化,极大地提高
工作效率。如,利用archie命令查找到文件
xplaygizmo-1.0.gz在匿名ftp主机上
unsite.unc.e-du的目
/pub/packages/solaris/freeware下,用户欲将该文
件用ftp下载,只需用vi编辑器将archie的
查找结果插入到.netrc文件空行之上,即增加下列三
行:
cd/pub/packages/solaris/freeware
get xplaygizmo-1.0.gz
bye
(空行)
运行ftp sunsite.unc.edu,即自动完成上述.netrc
中的所有操作,无需任何人工干预。屏幕将
显示类似于下面的结果:
Connected to sunsite.unc.edu.
220 calzone FTP server(Version wu-2.4(3Wed
0ct 2 09:30:40 EDT 1996)ready
331 Guest login ok,send your complete e-mail
address as password.
230.............
230 Guest login ok,access resrictions apply.
200 Type set to I.
Receive unique on.
Hash mark printing on (1024 bytes/hash mark).
Interactive mode off.
200 Maximum IDLE time set to 7200 seconds
cd/pub/packages/solaris/freeware
250 CWD command successful.
get xplaygizmo-1.0.gz
200 PORT command successful.
150 Opening BINARY mode data connection for
xplaygizmo-1.0.gz(8753 bytes).
########
226 Transfer complete.
8753 bytes received in 50.8 secs(0.17
Kbytes/sec)
221 Goodbye.
缺省时,运行ftp命令将检测用户的HOME目录中
的.netrc文件,并自动加以执行,如果不想使用.netrc,
可在ftp命令行中使用-n参数加以取消。
#vi /etc/inetd.conf
在ftpd和telnetd两行前面加“#”
你可以在编辑时用“/”搜索
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/94369/showart_1892493.html |
|