vsftpd安装与配置

SVN】Tortoise SVN 客户端下载安装 0. 目录1. 下载2. 安装 1. 下载 2. 安装 阅读详情
在网站的建设中,FTP是一项重要的服务,利用它可以更容易分享有限的软件资源。Linux下有代表性的FTP服务器软件是Wu-FTP、ProFTP及vsftpd。Wu-FTP(Washington University FTP)是由美国华盛顿大学开发的、以效率和稳定性为参考量的FTP软件。它的功能强大,配置较复杂,由于开发时间较早,应用十分广泛,也因此成为黑客们主要的攻击目标。Wu-FTP的早期各级版本不断出现安全漏洞,系统管理员不得不因安全因素而经常对其进行升级。ProFTP针对Wu-FTP的弱项而开发,除了在安全性方面进行了改进外,还具备设置简单的特点,并提供了一些Wu-FTP没有的功能,大大简化了架设和管理FTP服务器的工作。vsftpd则凭借在安全性方面的出色表现,被很多大型网站广为采用。

  vsftpd简介

  vsftpd在安全性、高性能及稳定性三个方面有上佳的表现。它提供的主要功能包括虚拟IP设置、虚拟用户、Standalone、inetd操作模式、强大的单用户设置能力及带宽限流等。在安全方面,它从原理上修补了大多数Wu-FTP、ProFTP,乃至BSD-FTP的安装缺陷,使用安全编码技术解决了缓冲溢出问题,并能有效避免“globbing”类型的拒绝服务攻击。目前正在使用vsftpd的官方网站有Red Hat、SuSE、Debian、GNU、GNOME、KDE、Gimp和OpenBSD等。

  安装
  本文以1.1.3版本为例进行介绍(这是2002年11月9日发布的最新正式发行版本)。下载地址为ftp://vsftpd.beasts.org/users/cevans/。

  1.构建vsftpd

  首先解压缩包,代码如下:

代码:
$ tar xzvf vsftpd-1.1.3.tar.gz




  进入安装目录cd vsftpd-1.1.3。如果想在以后使用中启用tcp_wrapper功能,可在编译前修改“builddefs.h”文件中的语句,将“#undef VSF_BUILD_TCPWRAPPERS”改为“#define VSF_BUILD_TCPWRAPPERS”。tcp_wrapper功能主要应用于IP管理控制,比如可以为单独的一个IP地址使用特殊优先的FTP配置文件。然后,键入“make”生成一份可执行二进制程序代码。

  2.前期准备

  vsftpd的默认配置中需要用户“nobody”。添加该用户命令如下:

代码:
$ useradd nobody




  vsftpd的默认配置中需要目录“/usr/share/empty”。添加该目录的命令如下:

代码:
$ mkdir /usr/share/empty/




  匿名FTP需要用户“ftp”的存在,并有一个有效的主目录(不允许用户“ftp”有拥有权和可写权)。如没有此目录则建立它,命令如下:

代码:
$ mkdir /var/ftp/
$ useradd -d /var/ftp ftp




  3.安装相关配置文件、执行文件、帮助手册页等

  运行“make install”,将源代码、帮助手册页等复制到相关路径。如果采用手工复制,命令如下:

代码:
$ cp vsftpd /usr/local/sbin/vsftpd
$ cp vsftpd.conf.5 /usr/local/man/man5
$ cp vsftpd.8 /usr/local/man/man8



  另外,“make install”不能复制样例配置文件,建议手工复制,命令如下:

代码:
$ cp vsftpd.conf /etc




  整个安装过程很简单,下面来看看如何操纵vsftpd的强大功能,进行vsftpd.conf文件的配置。

  两种运行模式

  像其它守护程序一样,vsftpd提供了standalone和inetd(inetd或xinetd)两种运行模式。简单解释一下,standalone一次性启动,运行期间一直驻留在内存中,优点是对接入信号反应快,缺点是损耗了一定的系统资源,因此经常应用于对实时反应要求较高的专业FTP服务器。inetd恰恰相反,由于只在外部连接发送请求时才调用FTP进程,因此不适合应用在同时连接数量较多的系统。此外,inetd模式不占用系统资源。除了反应速度和占用资源两方面的影响外,vsftpd还提供了一些额外的高级功能,如inetd模式支持per_IP(单一IP)限制,而standalone模式则更有利于PAM验证功能的应用。

  1.inetd运行模式

  从某种inetd运行vsftpd可以提供一种不错的功能——per_IP连接限制。这也是vsftpd 1.1.3版本最新推出并推荐的一种运行模式。实现per_IP连接限制要依赖于vsftpd提供的tcp_wrappers支持。如果使用标准的“inetd”,需编辑/etc/inetd.conf文件,并添加下面一行代码:

代码:
$ ftp stream tcp nowait root /usr/sbin/tcpd /usr/local/sbin/vsftpd



  确保删除或注释掉任何原存的FTP服务语句行。假如没有安装tcp_wrappers,或不需要使用它,可去掉“/usr/sbin/tcpd”部分。然后重载配置文件,命令如下:

代码:
$ kill -SIGHUP 'pidof inetd'



  大多数较新的系统采用的是xinetd超级服务守护进程。使用“vi /etc/xinetd.d/vsftpd” 看一下它的内容,如下:

代码:
disable = no
socket_type = stream
wait = no




  # 这表示设备是激活的,它正在使用标准的TCP Sockets。

代码:
user = root
server = /usr/local/sbin/vsftpd




  # 说明服务程序/usr/local/sbin/vsftpd已被用来控制FTP接入请求,并且该程序是作为root身份运行的(可能瞬间拥有过大的特权)。请确信已经把vsftpd二进制执行代码安装在了“/usr/local/sbin”目录下。

代码:
per_source = 5
instances ?= 200




  # 由于安全原因,从一个单一IP地址联入的最大允许数值是5。当前最大连接总数是200。

代码:
no_access ?= 192.168.1.3




  # 地址192.168.1.3将被拒绝访问。

代码:
banner_fail = /etc/vsftpd.busy_banner




  # 显示给用户当连接被禁止时的文件。不论因任何原因而被拒绝(太多用户,IP被禁止)。

  下面一行是产生的例子:

代码:
echo "421 Server busy, please try later." > /etc/vsftpd.busy_banner
log_on_success ?+= PID HOST DURATION
log_on_failure ?+= HOST




  这将按照时间顺序日志所有尝试连接的IP地址,无论连接成功与否。假如连接启动了一个FTP服务,其进程ID和使用期也将被载入日志。如果使用的是Red Hat,这个日志信息将出现在/var/log/secure文件中。

  最后,重启xinetd,命令如下:

代码:
$ /etc/rc.d/init.d/xinetd restart




  需要注意的是,“/etc/xinetd.d”目录中仅能开启一个FTP服务。

  2.standalone模式

  standalone模式便于实现PAM验证功能。进入这种模式首先要关闭xinetd下的vsftpd,设置“disable = yes”,或者注销掉“/etc/inetd.conf”中相应的行。然后修改“/etc/vsftpd.conf”中的选项为“listen=YES”。

配置vsftpd.conf

  下面来了解一下核心配置文件vsftpd.conf。它的地址为“/etc/vsftpd.conf”,控制语句格式为“语句=值”,注意不要在格式间加入任何空格和标点符号。man手册页中把控制语句分为布尔类(值为YES或NO)、数字类(值为数字)和字符串类(值为字符串)三种。为了管理方便、思路清晰,按照访问权(Access rights)、安全(Security)、功能(Features)和性能(Performance)分成四大类。下面是一个样本配置文件内容,用来说明常用的控制语句:

代码:
# Access rights
anonymous_enable=YES ?
/*若不想启用匿名访问请修改值为NO*/
local_enable=NO ?
/*关闭本地用户登陆服务,指所有非匿名用户*/
write_enable=NO ?
/*关闭任何用户的写权限*/
anon_upload_enable=NO ?
/*关闭匿名用户上传数据的能力*/
anon_mkdir_write_enable=NO ?
/*关闭匿名用户建立目录的能力*/
anon_other_write_enable=NO ?
/*关闭匿名用户执行建立和上传之外的写入类命令的操作,比如更
改名字和删除操作的能力*/

# Security
anon_world_readable_only=YES ?
/*开启匿名用户只能使用许可权为全部可读的资源*/
connect_from_port_20=YES ?
/*从标准端口20触发连接*/
hide_ids=YES ?
/*隐藏FTP服务器中用户的ID,用“FTP"取代*/
pasv_min_port=50000 ?
pasv_max_port=60000 ?
/*设置pasv传输模式下的端口范围为50000-60000*/

# Features
xferlog_enable=YES ?
/*开启日志,记录传输状态到文件/var/log/vsftpd.log*/
ls_recurse_enable=NO ?
/*关闭“ls -R"命令,该命令常被用于DoS攻击,非常浪费系统资源,
但“mirror"镜像工具会用到它*/
ascii_download_enable=NO ?
/*关闭ASCII模式下载,防止被用于DoS攻击,ASCII下载很消耗CPU负担*/
async_abor_enable=YES ?
/*开启支持早期FTP客户端“async ABOR"命令的能力*/

# Porformance
one_process_model=YES ?
/*开启每个IP单一进程模式,该模式仅支持具备一定能力的内核,
比如linux kernel 2.4*/
idle_session_timeout=120 ?
/*踢出空闲了两分钟后的用户*/
data_connection_timeout=300 ?
/*踢出空闲了五分钟后的下载*/
accept_timeout=60 ?
/*踢出挂起了一分钟后的passive连接*/
connect_timeout=60 ?
/*踢出挂起了一分钟后的活动连接*/
anon_max_rate=50000 ?
/*限止单个用户的下载速度为不超过50kbytes每秒*/



  至此,一个匿名服务器已经可以正常运行了,并且进行了安全方面的设置。实际中,根据FTP服务器不同的需求,比如想启用本地用户登录、想让某类用户具备上传能力、想让登录者看到一份友好的欢迎信息等,还可以在vsftpd.conf中进行相应的设置(用“man vsftpd.conf”参考man手册可获得更多的详细资料)。

  有一些设置选项跟运行模式或外挂模块有关,还有一些选项必须依赖于另一个选项的启用状态。总之,只要精心搭配,完全可以定制出一个称心的FTP服务器。

  tcp_wrappers的应用
  要使用这项功能需要在安装编译之前构建包含tcp_wrappers的vsftpd。可通过编辑“builddefs.h”文件,将“#undef VSF_BUILD_TCPWRAPPERS”修改为“#define VSF_BUILD_TCPWRAPPERS”,然后重新构建编译,生成可执行代码。其次,要开启在配置文件vsftpd.conf中的选项“tcp_wrappers=YES”。该功能依赖于对文件“/etc/hosts.allow”的配置。以下是一个样例:

代码:
vsftpd: 192.168.1.3: setenv VSFTPD_LOAD_CONF /etc/vsftpd_tcp_wrap.conf
vsftpd: 192.168.1.4: DENY




  其中,第一行表示如果一个客户端从192.168.1.3连接,那么vsftpd将应用“/etc/vsftpd_tcp_wrap.conf”的vsftpd配置文件给该连接。这些设置被应用在默认的vsftpd.conf之前。这一点十分有用,可用它为一些IP应用不同的访问限制(例如上传的能力);还可以指定某些IP有能力来超越连接限制(max_clients=0);或者为某些IP增减带宽限制。第二行表示拒绝192.168.1.4连接的能力。这一点对别有用心的连接者很有用。

  PAM的应用

  PAM应用也就是在开启了PAM的系统上应用“虚拟用户”功能。下面一个样例演示怎样利用“虚拟用户”来设置vsftpd的PAM。虚拟用户是指不像系统上的真实用户一样客观存在的用户。虚拟用户因此而比真实用户更安全,因为一个像这样有威胁系统安全的账户却仅能使用FTP服务。虚拟用户常用来服务那些不想开放给不被信任用户的内容,一般不影响正常的普通用户。

  1.创建虚拟用户数据库

  使用pam_userdb来鉴别虚拟用户。这需要一个“db”格式的用户名/密码文件。要创建一个“db”格式文件,首先要创建一个在交替行上写有用户名和密码的无格式文本文件,代码如下:

代码:
$ vi logins.txt




  编辑文件内容如下:

代码:
tom
foo
fred
bar



  上面的“tom”对应着密码“foo”,“fred”对应着密码“bar”。同时用root身份登陆,创建实际的数据库文件,代码如下:

代码:
$ db_load -T -t hash -f logins.txt /etc/vsftpd_login.db




  # 要求已安装了Berkeley db 程序

  这样即可创建“/etc/vsftpd_login.db”。如果想改变访问许可权限,可用如下命令:

代码:
$ chmod 600 /etc/vsftpd_login.db




  此外,如果想了解更多有关如何维护登陆数据库的知识,可寻找在“Berkeley DB”上的文档资料,网址为http://www.sleepycat.com/docs/utility/index.html。

  2.建一个使用新数据库的PAM文件

  创建编辑文件vsftpd.pam,包含以下两行:

代码:
auth required /lib/security/pam_userdb.so db=/etc/vsftpd_login
accound required /lib/security/pam_userdb.so db=/etc/vsftpd_login




  告诉PAM使用新数据库来鉴别用户。把该PAM文件保存到PAM目录(通常为“/etc/pam.d/cp vsftpd.pam /etc/pam.d/ftp”)。

  3.为虚拟用户设置文件位置

  接下来使用以下命令为为虚拟用户设置文件位置:

代码:
$ useradd -d /home/ftpsite virtual
$ ls -ld /home/ftpsite




  将显示如下:

代码:
drwx------3 virtual ?virtual ?4096 Jul 30 00:39 /home/ftpsite




  已经创建一个叫做“virtual”的用户,并且有一个主目录“/home/ftpsite”。增加一些内容到这个下载区域,代码如下:

代码:
$ cp /etc/hosts /home/ftpsite
$ chown virtual.virtual /home/ftpsite/hosts




  4.定制vsftpd.conf配置文件

  重新定制vsftpd.conf文件:

代码:
anonymous_enable=NO
local_enable=YES
# 由于安全因素应关闭匿名FTP,并开启非匿名FTP(虚拟用户需使用)。
write_enable=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
# 出于安全目的写下这些确保命令,不许写命令执行
chroot_local_user=YES
# 限制虚拟用户到我们上面设置的虚拟FTP区域 /home/ftpsite。
guest_enable=YES
guest_username=virtual
# guest_enable很重要,能激活虚拟用户。guest_username表示所有
的虚拟用户都被映射到上面设置的真实用户“virtual”。这也将确定在文件系统上
虚拟用户的最终归宿,用户“virtual”的主目录“/home/ftpsite”。
listen=YES
listen_port=10021
# 这置vsftpd在“standalone”模式,不从inetd运行。这意味着仅需执行vsftpd
运行命令一次,它就开始运行起来。这也使得vsftpd监听在10021的非标准端口上
的FTP需求(FTP通常使用端口21)。
pasv_min_port=30000
pasv_max_port=30999
# 这些命令在被动FTP接收端放置一个端口序列。对配置防火墙很有用。



  5.开始运行vsftpd

  进入vsftpd源代码所在的目录,并执行“./vsftpd”,如果光标一直停在那里说明无误;否则将会看到一些错误信息。

  6.测试

  装载另一个Shell会话进程(或者把程序切换到后台运行,按CTRL+Z然后敲“bg”)。以下是一个FTP会话样例:

代码:
ftp localhost 10021
Connected to localhost (127.0.0.1).
220 ready, dude (vsFTPd 1.1.3: beat me, break me)
Name (localhost:chris): tom
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (127,0,0,1,117,135)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp> size hosts
213 147
ftp>



  这里给出的密码是“foo”。不要因为出现“failed to open directory”而害怕,那是因为目录“/home/ftpsite”不全部可读。可以看到,通过size命令已经访问到复制进虚拟FTP区域的“hosts”文件。

  功能扩充

  虽然第一个vsftpd已经可以运行,但下面的内容可以扩充“VIRTUAL_USERS”,使设置变得稍微复杂一些。假定需要两类虚拟用户,一类仅仅能浏览和下载内容,另一种除能下载存在的内容之外还能上传新内容。可使用vsftpd强大的单用户使用配置能力(版本1.1.0以上)来完成这个设置。我们在早先的虚拟用户样例中创建了tom和fred两个用户,并设置fred拥有写权限,可访问上传的新文件;tom仅能下载。

  1.激活单用户配置能力

  要激活vsftpd的这个强大功能,增加下面的内容到“/etc/vsftpd.conf”:

代码:
user_config_dir=/etc/vsftpd_user_conf




  并用“mkdir /etc/vsftpd_user_conf”创建目录。

  2.给tom读取所有文件/目录的能力

  在上个样例的末尾, 我们注意到虚拟用户仅能看全可读文件和目录。可以使“/home/ftpsite”目录全可读,并且上传有全可读许可的文件。但是做到这点的另一种方法是给tom下载非全可读文件的能力。

  对于用户tom,强行提供一个配置设置给“anon_world_readable_only”,代码如下:

代码:
echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/tom




  然后检测一下,用tom登录,键入“ls”将返回目录清单。而用fred登录则应不显示。

  可以重启vsftpd使刚才对“/etc/vsftpd.conf”文件的更改有效(高级用户可发送SIGHUP给vsftpd监听进程)。

  3.给fred读取所有文件/目录和创建新文件/目录的权限,但是不具有干扰已经存在文件的能力,代码如下:

代码:
echo "anon_world_readable_only=NO" > /etc/vsftpd_user_conf/fred
echo "write_enable=YES" >> /etc/vsftpd_user_conf/fred
echo "anon_upload_enable=YES" >> /etc/vsftpd_user_conf/fred




  最后检测一下,用tom登陆应该不能上传;而用fred登录能上传。并试着分别用tom和fred删除一个文件,应不能删除。

  总结

  以上实例均在Red Hat 8.0系统上试验通过,如遇到问题请仔细检查每个细节的正确性。实例中的内容可以根据具体环境进行增减、修改。相信稍加变通便可以打造出一个满意的、安全的FTP服务器。
【亲测可行】SVN环境准备(服务端:SVNBucket,客户端:TortoiseSVN 使用SVN,就得安装好SVN的服务端和客户端 【SVN的服务端】推荐使用SVNBucket(中文名:SVN桶,是现在最好用的SVN服务)。这边使用SVNBucket。 【SVN的客户端】Win系统推荐使用:TortoiseSVN,Mac系统推荐使用:Cornstone。这边使用TortoiseSVN。 文章目录一、SVN服务端环境准备(SVNBucket)1.输入官网地址“svnbucket.com”,注册一个账号2.输入相关的注册信息,点击“注册”按钮,即可进入控制台(后面也可以自行输入用户名密码. 阅读详情

相关推荐

SVN】快速入门SVN基础使用

SVN概要 Subversion(SVN) 是一个开源的版本控制系統。 相关文档参考 SVN官网使用教程 下载与安装 参考网址:

suelta_th的博客 3万+

TortoiseSVN官网下载地址

客户端: https://mirrors.tuna.tsinghua.edu.cn/osdn/storage/g/t/to/tortoisesvn/(版本名/Application目录) 语言包: https://mirrors.tuna.tsinghua.edu.cn/osdn/storage/g/t/to/tortoisesvn/(版本名/Language Packs目录) (p...

aGreetSmile的博客 2万+

SVN入门第二讲——SVN的简单使用

版本管理工具介绍——SVN篇(一)SVN是何物SVN是Subversion的简称,是一款集中式的开源版本控制系统,因为有着明确的权限管理机制,所以为目前国内绝大多数的公司所使用。 何谓集中式:集中式核心在于中央服务器,开发者需要先从服务器上获取代码,开发,解决冲突,提交,所有版本信息都在服务器上,离开了服务器基本无法工作。为什么要使用SVN?通常软件开发由多人协作开发,如果对代码文件、配置文件、文

李阿昀的博客 8814

SVN官方网站

SVN官方网站:http://tortoisesvn.netSVN下载地址:http://tortoisesvn.net/downloads

5万+

SVN 安装及使用

1.简介: TortoiseSVN 是一款非常易于使用的 Windows 版本控制/版本控制/源代码控制软件。它基于Apache ™ Subversion (SVN) ®;TortoiseSVN 为 Subversion 提供了一个漂亮而简单的用户界面。 2.官网: (1)官网:Home · TortoiseSVNhttps://tortoisesvn.net/ 3.安装: (1)下载svn:Downloads · TortoiseSVNhttps://tortoisesvn.net/downlo

huivictor的博客 1万+

SVN教程-SVN基本使用

本文详细介绍了svn基本使用SVN是一个稳定且强大的版本控制工具,通过本教程的学习,我们获得了在软件开发项目中使用SVN的基础知识。随着实践的深入,我们将能够更灵活地利用SVN的高级功能,更好地适应不同项目的需求。SVN的广泛应用使得它成为团队协作中不可或缺的一部分,为项目的成功开发和维护提供了坚实的支持。

踏雨歌青春,诗酒趁年华 3317

SVN笔记-SVN基本操作

SVN笔记-SVN基本操作

YIYIYI 1023

SVN教程-SVN基本使用_svn使用教程

SVN(Apache Subversion)是一款强大的集中式版本控制系统,它在软件开发项目中扮演着至关重要的角色,用于有效地跟踪、记录和管理代码的演变过程。与分布式系统相比,SVN 的集中式架构使得团队能够更加协同地进行开发,通过对中央仓库的访问,成员们可以共享和同步彼此的工作。这种结构简化了版本控制的过程,使得代码的演进更加可控和透明。本教程致力于帮助初学者快速入门 SVN,通过详细介绍基本概念和常用操作,使他们能够理解和熟练应用这一版本控制系统。

2401_89225039的博客 1233

svn使用

嗨喽大家好,我是老黑。工作了一段时间,但是对于svn使用还是有一些问题,今天就来总结一下平时最常用到的操作。再也不想平时对项目代码管理的时候出现各种各样的问题。 一、前言 首先推荐一个svn最常用的使用平台,SVNBucket.这个的话直接百度就可以了。进入之前先注册一个账号,然后登陆就可以了。里面也有一些SVN的教程。大家可以空余的时间可以进去看看。好了,下面直接进入正题。 二、svn获取远程项目代码。 这是最常用之一,当我们进入一个新的公司,或者获取到一个新的项目的时候,需要获取到项目的代码,然后通

Laohei0101的博客 1万+

IDEA集成SVN插件及SVN使用 - 超详细

1 IDEA集成SVN 1.1 下载SVN客户端 这里使用的是TortoiseSVN,下载后安装 ,然后记住安装路径。 官方下载地址:TortoiseSVN官方下载地址 1.2 安装SVN客户端 在安装svn客户端的时候一定要勾选,否则在idea上集成svn的时候会找不到 svn.exe 而报错。 如果安装时忘记勾选了的话,安装包重新运行,选择modify,然后勾选command line cl...

weixin_44248000的博客 1万+

svn使用方法以及使用教程

一、什么是svnSVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于RCS、CVS,它采用了分支管理系统,它的设计目标就是取代CVS。二、svn的下载安装下载地址:https://tortoisesvn.net/downloads.zh.html安装完不要忘记重启电脑安装完成后,按下鼠标右键,会看到如下界面: 如果显示是这样的,就说明安装成功了三、svn的常用操作1、迁出配置

bossxu_的博客 4万+

Windows 下搭建 使用SVN,以及在eclipse中配置使用SVN服务

Windows 下搭建 使用SVN,以及在eclipse中配置使用SVN服务 目录 一、安装Visual SVN 二、配置SVN 三、安装TortoiseSVN 四、上传项目到远程仓库 五、从远程仓库下载项目 六、检出项目 七、版本回退 九、在Eclipse中安装插件subclipse 十、上传项目到svn服务器 十一、提交项目 十二、从svn检出项目到eclispe 十...

小渣渣的博客 7970

代码管理工具网站(SVNGITGIT小乌龟)

SVN: 官网:https://tortoisesvn.net/ 下载地址:http://tortoisesvn.net/downloads

ll123151190的博客 7596

SVN官网下载地址,拒绝无效垃圾链接,直接跳下载页面

官网下载址:https://www.visualsvn.com/visualsvn/download/

冥王星开发 1万+

SVN客户端-Tortoise SVN

SVN客户端-Tortoise SVN

weixin_42292547的博客 1万+

SVN(Subversion)中文站相关网址

SVN(Subversion)中文站 http://www.subversion.org.cn/ Windows版本的SVN服务端 http://subversion.apache.org/packages.html#windows .Net开发平台下推荐使用VisualSVN   http://www.visualsvn.com/server/   http://www.visualsv...

weixin_30326741的博客 1661

svn 官网

en: http://subversion.apache.org/ ch: http://www.subversion.org.cn/ 转载于:https://www.cnblogs.com/lizc/p/3691839.html

WSL_0124的博客 1210
上一篇: Struts的安装
下一篇: 在eclipse中搭建J2ME开发环境
sswt
博客等级 码龄24年 1粉丝 57原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值