-
- phoenix20111116
-
124 发帖361 回复1671 积分
- 私信他 + 关注
Ubuntu下安装apache2和svn服务器
一、安装apache和svn server
1、安装apache服务器
sudo apt-get install apache2 libapache2-svn
2、安装svn服务器
sudo apt-get install subversion,subversion-tools
二、添加用户组
以前习惯了在ubuntu下直接使用root账户登陆进行操作,这两天装服务器才从同事那里知道在ubuntu下使用root账户是很危险的(冒了一阵冷汗),由于root用户具有超级权限,这就意味着使用这个账户登陆到系统后可以为所欲为(想删就删),要是修改了其它用户不能修改的而又恢复不了的文件或误操作,那么系统就只有等着挂了。用的好好的系统又得重新花很多时间来安装,并配置到合适的状态。所以,我安装ubuntu后新建的几个一般用户,使用一般用户登陆到系统进行配置(安装软件等)。
另外需要注意的是在安装服务器系统时,分区也有讲究,最好将服务器上需要存放数据的目录的分区大小设大,尽量所有的操作都在这个目录下,无论在该目录下如何改动,影响的都只是数据而不会改变系统的配置;反之,如果在任意目录下进行操作,稍有不慎将导致系统崩溃,系统中的数据丢失。我装服务器的时候是将home目录设的很大,该目录下面存放数据,不同的用户通过ssh登陆到服务器后,默认进入各自的家目录,samba共享也是进的各自的家目录。
在进行下面的操作之前,如果对组和用户不熟悉,有必要先了解一下linux下组和用户的相关知识。这里我参考的是“LinuxSir.Org“网站上的“北南南北”网友的贴子,他讲的linux系统管理的知识很全面,又通俗易懂。这里只选部分内容参考:
管理用户(user)和用户组(group)的相关工具或命令;
1)管理用户(user)的工具或命令; useradd 注:添加用户 adduser 注:添加用户 passwd 注:为用户设置密码 usermod 注:修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等; pwcov 注:同步用户从/etc/passwd 到/etc/shadow pwck 注:pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整; pwunconv 注:是pwcov 的立逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件; finger 注:查看用户信息工具 id 注:查看用户的UID、GID及所归属的用户组 chfn 注:更改用户信息工具 su 注:用户切换工具 sudo 注:sudo 是通过另一个用户来执行命令(execute a command as another user),su 是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo 能后面直接执行命令,比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现; visudo 注:visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的; sudoedit 注:和sudo 功能差不多;
2)管理用户组(group)的工具或命令; groupadd 注:添加用户组; groupdel 注:删除用户组; groupmod 注:修改用户组信息 groups 注:显示用户所属的用户组 grpck grpconv 注:通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建; grpunconv 注:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件; |
为把不同的用户的家目录放在/home目录下,需要设置一下/etc/default/useradd 文件。
通过useradd 添加用户时的规则文件; # useradd defaults file GROUP=100 HOME=/home 注:把用户的家目录建在/home中; INACTIVE=-1 注:是否启用帐号过期停权,-1表示不启用; EXPIRE= 注:帐号终止日期,不设置表示不启用; SHELL=/bin/bash 注:所用SHELL的类型; SKEL=/etc/skel 注: 默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的; |
添加用户组的方法有两种,如下:
1、在 Ubuntu 菜单上选择“系统->系统管理->用户和组”;
(1)、切换到“组”标签;
(2)、点击“添加组”按钮;
(3)、组名为“subversion”;
(4)、将您自己(fengdongrui)和“cairong”(Apache 用户)加入组成员中;
(5)、点击“OK”以确认修改,关闭该程序。
2、或者直接使用命令,增加组和成员:
sudo addgroup subversion
sudo usermod -G subversion -a fengdongrui cairong zhoupeng
当然,修改组也可以直接修改组文件: sudo vi /etc/group。然后需要注销(我都是直接重新启动)再登录以便能够真正成为 subversion 组的一员。
这里我新建subversion组,把我允许访问apache和svn服务器的用户的属组都设成subversion。修改用户的属组可以先用id user_name来查看用户的属组。如果某用户不属于该组,可以通过以上的两种方法将用户的属组添加到subversion组中,我是用的是在菜单中添加。
三、创建svn仓库
执行下面的命令:
cd /home/work
mkdir svn
svnadmin create /home/work/svn
这里需要将目录work的属组改为subversion,是使用如下命令:
sudo chgrp -R subversion /home/work
这里-R参数是递归的改变work下的目录的属组是subversion。
chgrp的详细用法如下所示:
chgrp命令 功能:改变文件或目录所属的组。 语法:chgrp [选项] group filename? 该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。 参数: - R 递归式地改变指定目录及其下的所有子目录和文件的属组。 例1:$ chgrp -R book /opt/local /book 改变/opt/local /book/及其子目录下的所有文件的属组为book。 |
赋予组成员对所有新加入文件仓库的文件拥有相应的权限:
sudo chmod -R g+rws svn
如果上面这个命令在创建SVN文件仓库之前运行,你可能在后续Check in的时候遇到如下错误:
Can't open '/home/work/svn/db/txn-current-lock': Permission denied
在网上搜了好多资料,都说是权限的问题。
“这 种错误比较常见,而且一开始我一直以为是自己没有配置好认证权限的问题,我反复的配置10,11两步,结果还是没解决,我在windows下用 tortoiseSVN客户端一直无法commit和添加文件,老是弹出这个错误。可我在linux下可以用
#svn import …. 这个命令,我一直很纳闷,后来经过琢磨和上网搜索,终于解决。问题在于我的/home/svn目录下的一切子目录和文件都是属于root用户的,而我每次 在linux下也是以root 用户import的,所以一直没有问题。可在windows从客户端访问就有问题了。
解决办法: 把/home/svn目录下的所有文件和子目录添加读写权限
#sudo chmod –R o+rw /home/svn
查看txn-current-lock文件的权限和用户以及组信息,应该类似于:
ls -l / home/work/svn /db/txn-current-lock
-rw-rwSr-- 1 root subversion 0 2009-06-18 15:33 txn-current-lock
除了权限以外,用户及其组如果不对,则仍然会遇到上述问题,可以再次运行命令:
sudo chown -R root:subversion svn
下面是chmod和chown的用法:
chmod 命令 功能:chmod命令是非常重要的,用于改变文件或目录的访问权限.用户用它控制文件或目录的访问权限. 语法:该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。 1. 文字设定法 chmod [who] [+ | - | =] [mode] 文件名? 参数: 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它是系统默认值。 操作符号可以是: + 添加某个权限。 - 取消某个权限。 = 赋予给定权限并取消其他所有权限(如果有的话)。
设置mode所表示的权限可用下述字母的任意组合: r 可读。 w 可写。 x 可执行。 X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。 s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。 t 保存程序的文本到交换设备上。 u 与文件属主拥有一样的权限。 g 与和文件属主同组的用户拥有一样的权限。 o 与其他用户拥有一样的权限。 文件名:以空格分开的要改变权限的文件列表,支持通配符。 在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example 使同组和其他用户对文件example 有读权限。 2. 数字设定法 我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。 例如,如果想让某个文件的属主有"读/写"二种权限,需要把4(可读)+2(可写)=6(读/写). 数字设定法的一般形式为: chmod [mode] 文件名? 例子: (1)文字设定法: 例1:$ chmod a+x sort 即设定文件sort的属性为: 文件属主(u) 增加执行权限 与文件属主同组用户(g) 增加执行权限 其他用户(o) 增加执行权限 例2:$ chmod ug+w,o-x text 即设定文件text的属性为: 文件属主(u) 增加写权限 与文件属主同组用户(g) 增加写权限 其他用户(o) 删除执行权限 例3:$ chmod u+s a.out 假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看): –rws--x--x 1 inin users 7192 Nov 4 14:22 a.out 并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。 当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。 因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。 例4:$ chmod a–x mm.txt $ chmod –x mm.txt $ chmod ugo–x mm.txt 以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。 (2)数字设定法: 例1: $ chmod644 mm.txt $ ls –l 即设定文件mm.txt的属性为: -rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt 文件属主(u)inin 拥有读、写权限 与文件属主同组人用户(g) 拥有读权限 其他人(o) 拥有读权限 例2: $ chmod 750 wch.txt $ ls –l -rwxr-x--- 1 inin users 44137 Nov 12 9:22 wchtxt 即设定wchtxt这个文件的属性为: 文件主本人(u)inin 可读/可写/可执行权 与文件主同组人(g) 可读/可执行权 其他人(o) 没有任何权限 |
chown 命令 功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。 语法:chown [选项] 用户或组 文件 说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。 参数: - R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。 - v 显示chown命令所做的工作。 例1:把文件shiyan.c的所有者改为wang。 $ chown wang shiyan.c 例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。 $ chown - R wang.users /his
|
四、配置apache服务器
先备份一下apache2的配置文件,执行如下命令:
sudo cp -R /etc/apache2 /etc/apache2_back
通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须加入下面的代码片段到您的 /etc/apache2/mods-available/dav_svn.conf中:(加在文件最后面即可),下面是我的配置:
<Location /svn> DAV svn SVNPath /home/work/svn AuthType Basic AuthName "welcome to subversion respository" AuthUserFile /etc/subversion/passwd #<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user #</LimitExcept> </Location> |
如果需要用户每次登录时都进行用户密码验证,请将<LimitExcept GET PROPFIND OPTIONS REPORT>与</LimitExcept>两行注释掉。
经上面的修改后,重启apache:
sudo /etc/init.d/apache2 restart
接下来,您需要创建 /etc/subversion/passwd 文件,该文件包含了用户授权的详细信息。要添加用户,您可以执行下面的命令:
sudo htpasswd -c /etc/subversion/passwd user_name
注意,在第一次使用htpasswd设置密码时需要使用-c参数来创建passwd文件,否则无法创建。在后面使用htpasswd来设置秘密时不能加-c参数,否则会覆盖掉原来设置的密码。
创建passwd文件后执行的命令如下:
sudo htpasswd /etc/subversion/passwd user_name
此时,应该就可以通过web方式访问svn服务器了。在浏览器的地址栏输入http://192.168.10.202/svn/会弹出用户验证的窗口,输入正确的用户名和口令后,就能看到apache服务器的网页了。


-
- phoenix20111116
-
124 发帖361 回复1671 积分
- 私信他 +关注
楼主
|
回复于 2017-12-17
沙发
五、访问svn
1、导入你的源码:
这里将source目录下的文件导入到仓库svn的source目录下,先要在svn仓库目录下通过如下命令新建目录source:
cd /home/work/svn/
mkdir –p source
然后导入:
cd /home/fengdongrui/source
svn import . file:///home/work/svn/source
这样,会进入vi编辑器输入工程信息,输入完成后“CTRL+X”保存工程信息并提交。
这样,用户fengdongrui家目录下的source目录下的内容就提交到了svn服务器了。也可以不用新建source目录,而将导入家目录下的source目录到仓库中。
注意:在导入你的源码到仓库之前,需要批量删除源码的svn记录。批量删除的命令如下:
find . -name .svn -type d -exec rm -fr {} \;
2、显示导入的源码
把/home/fengdongrui/source整个目录导入到储存库中的source目录中,储存库的source目录会自动创建。显示储存库内容:
svn list file:///home/work/svn
如果显示了source目录,则导入源码成功。
3、导出项目
Subversion 文件仓库可以通过许多不同的方式进行访问(Check Out,签出)——通过本地硬盘,或者通过各种网络协议。无论如何,文件仓库的位置总是使用 URL 来表示。下表显示了不同的 URL 模式对应的访问方法:
模式 |
访问方法 |
file:/// |
直接访问本地硬盘上文件仓库 |
http:// |
通过 WebDAV 协议访问支持 Subversion 的 Apache 2 Web 服务器 |
https:// |
类似 http://,支持 SSL 加密 |
svn:// |
通过自带协议访问 svnserve 服务器 |
svn+ssh:// |
类似 svn://,支持通过 SSH 通道 |
要了解更高级的用途,我们推荐您阅读《使用 Subversion 进行版本控制》在线电子书。
(1)、直接访问文件仓库(file:///)
这是所有访问方式中最简单的。它不需要事先运行任何 SVN 服务。这种访问方式用于访问本地的 SVN 文件仓库。语法是:
svn co file:///home/work/svn/source
或者
svn co file://localhost/home/work/svn/source
注意:如果您并不确定主机的名称,您必须使用三个斜杠(///),而如果您指定了主机的名称,则您必须使用两个斜杠(//).
对文件仓库的访问权限基于文件系统的权限。如果该用户具有读/写权限,那么他/她就可以签出/提交修改。如果您像前面我们说描述的那样设置了相应的组,您可以简单的将一个用户添加到“subversion”组中以使其具有签出和提交的权限。
这里注意,如果您使用root用户签入和签出,普通用户将没有权限对仓库中的文件进行操作,所以必须使用subversion组中的一般用户对仓库中的文件签入和签出,这样其它用户才能正确访问。
(2)、通过 WebDAV 协议访问(http://)
要通过 WebDAV 协议访问 SVN 文件仓库,您必须配置您的 Apache 2 Web 服务器。您必须配置/etc/apache2/mods-available/dav_svn.conf文件,这在前面的apache2中已经配置过了。 可以通过下面的命令来访问文件仓库:
svn co http://hostname/svn/source
它会提示您输入密码。您必须输入您使用 htpasswd 设置的密码。当通过验证,项目中source目录下的文件就被签出到当前目录下了。
警告:密码是通过纯文本传输的。如果您担心密码泄漏的问题,我们建议您使用 SSL 加密,有关详情请看下一节。
六、出现的问题及解决办法
1、使用一般用户登陆系统执行sudo命令时出现“is not in the sudoers file”,无法执行该命令。
这需要修改/etc下的配置文件,将普通用户加入sudo组,才能执行sudo命令。由于我的系统是刚装的,还没有为ubuntu设置root密码,首先需要在终端输入sudo passwd(回车),提示输入新密码,重复输入密码即可设置root密码,最后提示“passwd:password updated successfully”表示root密码修改成功。
/etc/文件的属性是只读的,需要su root之后改变其属性为可写,即执行“chmod +w /etc/”命令,然后在该文件中分别加入如下:
your_user_name ALL=(ALL) ALL
将需要加入到sudo组的用户都加入sudo组,保存,退出后再使用命令“chmod –w /etc/”将其属性设为只读。这样加入到sudo组的用户便能执行sudo命令了。
2、ssh连接很慢,可以在/etc/ssh/sshd_config中加入“UseDns no”,以后连接ssh就很快。块
导
航
举报
请选择举报类别
- 广告垃圾
- 违规内容
- 恶意灌水
- 重复发帖