推荐一款嵌入式Linux的FTP服务端软件(stupid-ftpd) .

2019-07-12 15:26发布

在嵌入式Linux系统中,有时候需要搭建一个ftp服务器,以便windows或linux系统去访问嵌入式linux系统的数据。现在流行的ftp和vsftpd软件相对比较大,在嵌入式Linux系统下不太合适。最近由于需要,发现了一款很小型的ftp服务器,在这里分享。
stupid-ftpd 点击下载
根据自己的需要,修改Makefile,将gcc修改为交叉工具链的gcc,比如mips-gnu-linux-gcc。
若要静态编译,在CFLAGS后面添加"-static"选项。

以下的Makefile已经修改: [plain] view plaincopyprint?
  1. #  
  2. #  
  3. # Makefile for the linux version of stupid-ftpd  
  4. #  
  5. #  
  6. #  
  7.   
  8.   
  9. CC=mips-linux-gnu-gcc -EL          #修改  
  10. OBJS=ftpcommand.o ftpdconfig.o command.o ls.o stupid-ftpd.o  
  11. DOBJS=ftpcommand.do ftpdconfig.do command.do ls.do stupid-ftpd.do  
  12. POBJS=ftpcommand.po ftpdconfig.po command.po ls.po stupid-ftpd.po  
  13. LIBS=  
  14. CFLAGS=-O2 -Wall -Wstrict-prototypes -static    #修改  
  15. DCFLAGS=-g -DDEBUG -Wall -Wstrict-prototypes  
  16. PCFLAGS=-g -DDEBUG -Wall -Wstrict-prototypes -Wcast-align -Wwrite-strings -Wconversion -Waggregate-return -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wnested-externs  
  17. EXEC=stupid-ftpd.Linux6  
  18.   
  19. .SUFFIXES: .c .o .do .po  
  20.   
  21. all: $(OBJS)  
  22.     $(CC) $(CFLAGS) -o $(EXEC) $(OBJS) $(LIBS)  
  23.   
  24. debug: $(DOBJS)  
  25.     $(CC) $(DCFLAGS) -o $(EXEC) $(DOBJS) $(LIBS)  
  26.   
  27. pedantic: $(POBJS)  
  28.     $(CC) $(PCFLAGS) -o $(EXEC) $(POBJS) $(LIBS)  
  29.   
  30. clean:  
  31.     rm -f $(OBJS) $(DOBJS) $(POBJS) $(EXEC) *~  
  32.   
  33. .c.o:  
  34.     $(CC) $(CFLAGS) -c -o $@ $<  
  35.   
  36. .c.do:  
  37.     $(CC) $(DCFLAGS) -c -o $@ $<  
  38.   
  39. .c.po:  
  40.     $(CC) $(PCFLAGS) -c -o $@ $<  
  41.   
  42. install:  
  43.     install -m 755 -s ./stupid-ftpd /usr/local/bin/stupid-ftpd  
  44.     install -m 700 -d /etc/stupid-ftpd  
  45.     install -m 755 -d /usr/local/stupid-ftpd  
  46.     install -m 600 ./stupid-ftpd.conf /etc/stupid-ftpd/stupid-ftpd.conf  
# # # 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端口没有被占用。

[plain] view plaincopyprint?
  1. #  
  2. # This is a config-file for stupid-ftpd  
  3. # ------------------------------------  
  4. #  
  5. # The standard path should be /etc/stupid-ftpd.conf  
  6. # You can define other paths by using the "-f" option  
  7. # when starting stupid-ftpd.  
  8. #  
  9. #  
  10. # ATTENTION: 1) Remember, that the server is running with YOUR permissions.  
  11. #            It will fail to access other users directory, unless it is  
  12. #            root, but it also allows to access ALL YOUR directories,  
  13. #            which are deeper in a user's root-dir and YOU HAVE access to.  
  14. #            2) To solve the problem, the best way is to define a group-ID  
  15. #           for stupid-ftpd.   
  16. #       Or if you aren't root: set the MAIN root (serverroot=) to  
  17. #       the highest directory depth which is possible.  
  18. #            3) REMEMBER: DO NOT PUT THIS FILE in an accessible directory!!!  
  19. #               There are passwords defined here. The safest place is  
  20. #               outside the serverroot.  
  21.   
  22.   
  23. # Server operation mode:  
  24. # daemon      - quiet in background  
  25. # interactive - standard mode  
  26.   
  27. #mode=interactive  #交互式的形式运行  
  28. mode=daemon   #以守护进程的形式运行在后台  
  29.   
  30. # chroot to  
  31.   
  32. #serverroot=/usr/home/cinek/tmp3/aaa  
  33. serverroot=/mnt   #将ftp的根目录设置为/mnt目录下,在windows打开该ftp,就能访问/mnt目录  
  34.   
  35. # type of chroot  
  36. # real    - kernel chroot(), high security, but needs root privileges  
  37. # virtual - no real chroot(), software side (virtual) chroot  
  38.   
  39. #changeroottype=real  
  40. changeroottype=virtual  
  41.   
  42.   
  43. # Port number for the FTP-Protocol  
  44.   
  45. #port=2121  
  46. port=21  #默认为ftp的端口号。  
  47.   
  48.   
  49. # Maximum users allowed to log in  
  50.   
  51. maxusers=10  
  52.   
  53.   
  54. # Message Of The Day (motd)  
  55. # It will be displayed after the login procedure.  
  56.   
  57. #motd=/tmp/stupid-ftpd.motd  
  58.   
  59.   
  60. # Message on quit  
  61. # It will be displayed when quitting.  
  62.   
  63. #byemsg=/tmp/stupid-ftpd.bye  
  64.   
  65.   
  66. # Log  
  67.   
  68. #log=/tmp/stupid-ftpd.log  
  69.   
  70.   
  71. # User list:  
  72. # Format:  user=      
  73. #            user name  
  74. #           password or * for anonymous access  
  75. #           (internally appended to serverroot)  
  76. #               the user has access to the WHOLE SUBTREE,  
  77. #               if the server has access to it  
  78. #                maximal logins with this usertype  
  79. #            D - download  
  80. #               U - upload + making directories  
  81. #               O - overwrite existing files  
  82. #               M - allows multiple logins  
  83. #               E - allows erase operations  
  84. #               A - allows EVERYTHING(!)  
  85. #                 
  86. # user ftp is mapped to user anonymous, don't forget this  
  87. #   
  88. # Examples:  
  89. # user=user1 passx /tmp  2 D   
  90. #      - login: user1, passwd: passx, max login twice (different IPs!)  
  91. #        only download rights from directory /tmp         
  92. # user=user2 passy /home/user2 0 DU  
  93. #      - login: user2, passwd: passy, no login count limit (different IPs!)  
  94. #        download+upload rights to directory /home/user2   
  95. # user=user3 passz /home/user3 5 DUOM  
  96. #      - login: user3, passwd: passz, max login count 5 (even from same IP)  
  97. #        download+upload+overwrite rights to directory /home/user3   
  98. # user=user4 passq /tmp 10 -  
  99. #      - login: user4, passwd: passq, max login count 10 (even from same IP)  
  100. #        look-only rights at directory /tmp  
  101. #  
  102. # SEE: ATTENTION remark on the top of this file !!!  
  103.   
  104. user=anonymous  *    /    5   A  
  105.   
  106.   
  107. # Banned hosts  
  108. # "*" and "?" are allowed here  
  109.   
  110. #ban=192.168.*  
  111. #ban=localhost  
  112. #ban=*.banme.com  
  113.   
  114.   
  115. # Ban message (displayed to user who is banned)  
  116. # Please don't use more than 70 characters.  
  117.   
  118. #banmsg=Go away !  
  119.   
  120.   
  121. # Login/password timeout  
  122.   
  123. login-timeout=120  
  124.   
  125.   
  126. # Timeout (while logged in)  
  127.   
  128. timeout=240  
# # 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= # user name # password or * for anonymous access # (internally appended to serverroot) # the user has access to the WHOLE SUBTREE, # if the server has access to it # maximal logins with this usertype # 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/
这里就不截图了。