红联Linux门户
Linux帮助

嵌入式Linux的FTP服务端软件(stupid-ftpd)

发布时间:2014-11-20 11:07:12来源:linux网站作者:gzshun

在嵌入式Linux系统中,有时候需要搭建一个ftp服务器,以便windows或linux系统去访问嵌入式linux系统的数据。现在流行的ftp和vsftpd软件相对比较大,在嵌入式Linux系统下不太合适。最近由于需要,发现了一款很小型的ftp服务器,在这里分享。

根据自己的需要,修改Makefile,将gcc修改为交叉工具链的gcc,比如mips-gnu-linux-gcc。

若要静态编译,在CFLAGS后面添加"-static"选项。


以下的Makefile已经修改:



# Makefile for the linux version of stupid-ftpd 


CC=mips-linux-gnu-gcc -EL  #修改 
OBJS=ftpcommand.o ftpdconfig.o command.o ls.o stupid-ftpd.o 
DOBJS=ftpcommand.do ftpdconfig.do command.do ls.do stupid-ftpd.do 
POBJS=ftpcommand.po ftpdconfig.po command.po ls.po stupid-ftpd.po 
LIBS= 
CFLAGS=-O2 -Wall -Wstrict-prototypes -static#修改 
DCFLAGS=-g -DDEBUG -Wall -Wstrict-prototypes 
PCFLAGS=-g -DDEBUG -Wall -Wstrict-prototypes -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs 
EXEC=stupid-ftpd.Linux6 
 
.SUFFIXES: .c .o .do .po 
 
all: $(OBJS) 
$(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBS) 
 
debug: $(DOBJS) 
$(CC) $(DCFLAGS) -o $(EXEC) $(DOBJS) $(LIBS) 
 
pedantic: $(POBJS) 
$(CC) $(PCFLAGS) -o $(EXEC) $(POBJS) $(LIBS) 
 
clean: 
rm -f $(OBJS) $(DOBJS) $(POBJS) $(EXEC) *~ 
 
.c.o: 
$(CC) $(CFLAGS) -c -o $@ $< 
 
.c.do: 
$(CC) $(DCFLAGS) -c -o $@ $< 
 
.c.po: 
$(CC) $(PCFLAGS) -c -o $@ $< 
 
install: 
install -m 755 -s ./stupid-ftpd /usr/local/bin/stupid-ftpd 
install -m 700 -d /etc/stupid-ftpd 
install -m 755 -d /usr/local/stupid-ftpd 
install -m 600 ./stupid-ftpd.conf /etc/stupid-ftpd/stupid-ftpd.conf


只需修改两个位置。

编译完成后,生成stupid-ftpd.Linux6可执行程序,该程序运行需要配置文件,以下的配置已经被修改并验证,是可以用的。但前提是运行在嵌入式Linux系统下,21端口没有被占用。



# This is a config-file for stupid-ftpd 
# ------------------------------------ 

# The standard path should be /etc/stupid-ftpd.conf 
# You can define other paths by using the "-f" option 
# when starting stupid-ftpd. 


# ATTENTION: 1) Remember, that the server is running with YOUR permissions. 
#It will fail to access other users directory, unless it is 
#root, but it also allows to access ALL YOUR directories, 
#which are deeper in a user's root-dir and YOU HAVE access to. 
#2) To solve the problem, the best way is to define a group-ID 
#   for stupid-ftpd.  
#   Or if you aren't root: set the MAIN root (serverroot=) to 
#   the highest directory depth which is possible. 
#3) REMEMBER: DO NOT PUT THIS FILE in an accessible directory!!! 
#   There are passwords defined here. The safest place is 
#   outside the serverroot. 

# Server operation mode: 
# daemon  - quiet in background 
# interactive - standard mode 
 
#mode=interactive  #交互式的形式运行 
mode=daemon   #以守护进程的形式运行在后台 
 
# chroot to 
 
#serverroot=/usr/home/cinek/tmp3/aaa 
serverroot=/mnt   #将ftp的根目录设置为/mnt目录下,在windows打开该ftp,就能访问/mnt目录 
 
# type of chroot 
# real- kernel chroot(), high security, but needs root privileges 
# virtual - no real chroot(), software side (virtual) chroot 
 
#changeroottype=real 
changeroottype=virtual 

# Port number for the FTP-Protocol 
 
#port=2121 
port=21  #默认为ftp的端口号。 

# Maximum users allowed to log in 
 
maxusers=10 

# Message Of The Day (motd) 
# It will be displayed after the login procedure. 
 
#motd=/tmp/stupid-ftpd.motd 

# Message on quit 
# It will be displayed when quitting. 
 
#byemsg=/tmp/stupid-ftpd.bye 

# Log 
 
#log=/tmp/stupid-ftpd.log 

# User list: 
# Format:  user=<login> <passwd> <subdir> <maxlogins> <flags> 
#   <login> user name 
#   <passwd>password or * for anonymous access 
#   <subdir>(internally appended to serverroot) 
#   the user has access to the WHOLE SUBTREE, 
#   if the server has access to it 
#   <maxlogins> maximal logins with this usertype 
#   <flags> D - download 
#   U - upload + making directories 
#   O - overwrite existing files 
#   M - allows multiple logins 
#   E - allows erase operations 
#   A - allows EVERYTHING(!) 
#
# user ftp is mapped to user anonymous, don't forget this 
#  
# Examples: 
# user=user1 passx /tmp  2 D  
#  - login: user1, passwd: passx, max login twice (different IPs!) 
#only download rights from directory /tmp
# user=user2 passy /home/user2 0 DU 
#  - login: user2, passwd: passy, no login count limit (different IPs!) 
#download+upload rights to directory /home/user2  
# user=user3 passz /home/user3 5 DUOM 
#  - login: user3, passwd: passz, max login count 5 (even from same IP) 
#download+upload+overwrite rights to directory /home/user3  
# user=user4 passq /tmp 10 - 
#  - login: user4, passwd: passq, max login count 10 (even from same IP) 
#look-only rights at directory /tmp 

# SEE: ATTENTION remark on the top of this file !!! 
 
user=anonymous  */5   A 

# Banned hosts 
# "*" and "?" are allowed here 
 
#ban=192.168.* 
#ban=localhost 
#ban=*.banme.com 

# Ban message (displayed to user who is banned) 
# Please don't use more than 70 characters. 
 
#banmsg=Go away ! 

# Login/password timeout 
 
login-timeout=120 

# Timeout (while logged in) 
 
timeout=240
 

剩下的用默认的配置就可以了,特别注意,设置port参数的时候,2121端口不能使用,无法提供ftp服务。要设置为21端口,经过测试,设置为21端口,在Linux的PC机,报错:21端口被占用。但在嵌入式Linux下,是可以使用的。

stupid-ftpd.Linux6的使用方法:
直接用-f选项指定配置文件:
stupid-ftpd.Linux6 -f stupid-ftpd.conf

然后保证windows与嵌入式Linux系统的IP地址在同一网段,然后再"我的电脑"输入:ftp://192.168.x.x/
这里就不截图了。