Day35
git服务器
免密码远程git服务器
1)创建基于密码验证的SSH协议服务器(web1主机操作)。[root@web1 ~]# git init --bare /var/lib/git/base_ssh
2)客户端访问的方式(web2主机操作)。[root@web2 ~]# git clone root@192.168.2.100:/var/lib/git/base_ssh
这样操作需要输入密码,所以删掉
[root@web2 ~]# rm -rf base_ssh
3)客户端生成SSH密钥,实现免密码登陆git服务器(web2主机操作)。[root@web2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@web2 ~]# ssh-copy-id 192.168.2.100
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# git push
git协议服务器
1)安装git-daemon软件包(web1主机操作)。[root@web1 ~]# yum -y install git-daemon
2)创建版本库(web1主机操作)。[root@web1 ~]# git init --bare /var/lib/git/base_git
3)修改配置文件,启动git服务(web1主机操作)。[root@web1 ~]# cat /usr/lib/systemd/system/git@.service
#仅查看即可
[root@web1 ~]# systemctl start git.socket
#备注:默认git配置为只读服务器,如果需要读写,则需要修改git@.service配置文件,在git-daemon命令后面添加--enable=receive-pack参数即可。#另外还需要注意仓库目录的权限问题。
chmod -R 777 /var/lib/git/仓库名
4)客户端访问方式(web2主机操作)[root@web2 ~]# git clone git://192.168.2.100/base_git
基于http协议服务器
1)安装gitweb、httpd软件包(web1主机操作)。[root@web1 ~]# yum -y install httpd gitweb
2)修改配置文件,设置仓库根目录(web1主机操作)。[root@web1 ~]# vim +11 /etc/gitweb.conf
$projectroot = "/var/lib/git"; #添加一行
3) 创建版本仓库(web1主机操作)[root@web1 ~]# git init --bare /var/lib/git/base_http
4)启动httpd服务器[root@web1 ~]# systemctl start httpd
5)客户端访问方式(web2主机操作)注意:调用虚拟机中的firefox浏览器,需要在远程时使用ssh -X 服务器IP,并且确保真实主机的firefox已经关闭。[root@web2 ~]# firefox http://192.168.2.100/git/
制作nginx的RPM包
软件打包流程
? 1.准备源码软件
? 2.安装rpm-build
? 3.编写编译配置文件
? 4编译RPM包
一、安装rpm-bulid软件
1)安装rpm-build软件包[root@web1 ~]# yum -y install rpm-build
2)生成rpmbuild目录结构[root@web1 ~]# rpmbuild -ba nginx.spec //会报错,没有文件或目录
[root@web1 ~]# ls /root/rpmbuild //自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
3)准备工作,将源码软件复制到SOURCES目录[root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4)创建并修改SPEC配置文件[root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec
Name:nginx #源码包软件名称
Version:1.12.2 #源码包软件的版本号
Release: 10 #制作的RPM包版本号
Summary: Nginx is a web server software. #RPM软件的概述
License:GPL #软件的协议
URL: www.test.com #网址
Source0:nginx-1.12.2.tar.gz #源码包文件的全称
#BuildRequires: #制作RPM时的依赖关系
#Requires: #安装RPM时的依赖关系
%description
nginx [engine x] is an HTTP and reverse proxy server. #软件的详细描述
%post
useradd nginx #非必需操作:安装后脚本(创建账户)
%prep
%setup -q #自动解压源码包,并cd进入目录
%build
./configure
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc
/usr/local/nginx/* #对哪些文件与目录打包
%changelog
二、使用配置文件创建RPM包
1)安装依赖软件包[root@web1 ~]# yum -y install gcc pcre-devel openssl-devel
2)rpmbuild创建RPM软件包[root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec
[root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
三、安装软件
[root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
[root@web1 ~]# rpm -qa |grep nginx
[root@web1 ~]# ls /usr/local/nginx/
VPN
概述
? vpn:虚拟专用网络
? 在公用网络上建立专用私有网络,进行加密通讯
? 多用于为集团公司的各地子公司建立连接
? 连接完成后,各地区的子公司可以像局域网一样通讯
? 在企业网络中有广泛应用
? 偶尔可以用于翻墙
? 目前主流技的VPN技术(GRE,PPTP,L2TP+IPSec,SSL)
拓扑图
使用GRE技术实现VPN
? 启用GRE模块
1)查看计算机当前加载的模块[root@client ~]# lsmod //显示模块列表
[root@client ~]# lsmod | grep ip_gre //确定是否加载了gre模块
2)加载模块ip_gre[root@client ~]# modprobe ip_gre
3)查看模块信息[root@client ~]# modinfo ip_gre
filename: /lib/modules/3.10.0-693.el7.x86_64/kernel/net/ipv4/ip_gre.ko.xz
… …
? 主机1创建VPN隧道
1)创建隧道[root@client ~]# ip tunnel add tun0 mode gre \
> remote 201.1.2.5 local 201.1.2.10
//ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
//mode设置隧道使用gre模式
//local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址
2)启用该隧道(类似与设置网卡up)[root@client ~]# ip link show
[root@client ~]# ip link set tun0 up //设置UP
[root@client ~]# ip link show
3)为VPN配置隧道IP地址[root@client ~]# ip addr add 10.10.10.10/24 peer 10.10.10.5/24 \
> dev tun0
//为隧道tun0设置本地IP地址(10.10.10.10.10/24)
//隧道对面的主机IP的隧道IP为10.10.10.5/24
[root@client ~]# ip a s //查看IP地址如果配置错误,可以删除该隧道
ip tunnel del tun0
? 主机2创建隧道
1)查看计算机当前加载的模块[root@client ~]# lsmod //显示模块列表
[root@client ~]# lsmod | grep ip_gre //确定是否加载了gre模块
2)加载模块ip_gre[root@client ~]# modprobe ip_gre
3)创建隧道[root@proxy ~]# ~]# ip tunnel add tun0 mode gre \
> remote 201.1.2.10 local 201.1.2.5
//ip tunnel add创建隧道(隧道名称为tun0),ip tunnel help可以查看帮助
//mode设置隧道使用gre模式
//local后面跟本机的IP地址,remote后面是与其他主机建立隧道的对方IP地址
4)启用该隧道(类似与设置网卡up)[root@proxy ~]# ip a s
[root@proxy ~]# ip link set tun0 up //设置UP
[root@proxy ~]# ip a s
5)为VPN配置隧道IP地址[root@proxy ~]# ip addr add 10.10.10.5/24 peer 10.10.10.10/24 \
> dev tun0
//为隧道tun0设置本地IP地址(10.10.10.10.5/24)
//隧道对面的主机IP的隧道IP为10.10.10.10/24
[root@proxy ~]# ip a s //查看IP地址
6)测试连通性[root@client ~]# ping 10.10.10.5
[root@proxy ~]# ping 10.10.10.10
创建PPTP VPN
概述
? PPTP 支持密码身份验证,支持MPPE加密
? 默认端口1723
拓扑图
部署VPN服务器
? 部署vpn服务器
1)安装软件包(软件包参考lnmp_soft/vpn/)[root@proxy ~]# yum install pptpd-1.4.0-2.el7.x86_64.rpm
[root@proxy ~]# rpm -qc pptpd
/etc/ppp/options.pptpd
/etc/pptpd.conf
/etc/sysconfig/pptpd
2)修改配置文件[root@proxy ~]# vim /etc/pptpd.conf
.. ..
localip 201.1.2.5 //服务器本地IP
remoteip 192.168.3.1-50 //分配给客户端的IP池
[root@proxy ~]# vim /etc/ppp/options.pptpd
require-mppe-128 //使用MPPE加密数据
ms-dns 8.8.8.8 //DNS服务器
[root@proxy ~]# vim /etc/ppp/chap-secrets //修改账户配置文件
jacob * 123456 *
//用户名 服务器名称 密码 客户端IP
3)启动服务[root@proxy ~]# systemctl start pptpd
[root@proxy ~]# systemctl enable pptpd
4)翻墙设置(非必需操作)[root@proxy ~]# echo "1" > /proc/sys/net/ipv4/ip_forward //开启路由转发
[root@proxy ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
> -j SNAT --to-source 201.1.2.5
? 客户端设置
?
创建L2TP+IPSec VPN
概述
? L2TP建立主机之间的VPN隧道,压缩、验证
? IPSec提供数据加密、数据校验、访问控制功能
拓扑图
部署IPSec服务 默认端口500
1)安装软件包[root@client ~]# yum -y install libreswan
2)新建IPSec密钥验证配置文件[root@client ~]# cat /etc/ipsec.conf //仅查看一下该主配置文件
.. ..
include /etc/ipsec.d/*.conf //加载该目录下的所有配置文件
[root@client ~]# vim /etc/ipsec.d/myipsec.conf
//新建该文件,参考lnmp_soft/vpn/myipsec.conf
conn IDC-PSK-NATrightsubnet=vhost:%priv also=IDC-PSK-noNAT
conn IDC-PSK-noNATauthby=secret //加密认证ike=3des-sha1;modp1024 //加密算法phase2alg=aes256-sha1;modp2048 //加密算法pfs=noauto=addkeyingtries=3rekey=noikelifetime=8hkeylife=3htype=transportleft=201.1.2.10 //重要,服务器本机的外网IPleftprotoport=17/1701right=%any //允许任何客户端连接rightprotoport=17/%any
3)创建IPSec预定义共享密钥[root@client ~]# vim /etc/ipsec.secrets //修改该文件
include /etc/ipsec.d/*.secrets
201.1.2.10 %any: PSK "randpass" //randpass为预共享密钥//201.1.2.10是VPN服务器的IP//%any:任何客户端都可以连接服务器//PSK(pre share key)中文预共享密钥
4)启动IPSec服务[root@client ~]# systemctl start ipsec
[root@client ~]# netstat -ntulp |grep 500
udp 0 0 127.0.0.1:4500 0.0.0.0:* 3148/pluto
udp 0 0 192.168.4.10:4500 0.0.0.0:* 3148/pluto
udp 0 0 201.1.2.10:4500 0.0.0.0:* 3148/pluto
udp 0 0 127.0.0.1:500 0.0.0.0:* 3148/pluto
udp 0 0 192.168.4.10:500 0.0.0.0:* 3148/pluto
udp 0 0 201.1.2.10:500 0.0.0.0:* 3148/pluto
udp6 0 0 ::1:500 :::* 3148/pluto
部署XL2TP服务 服务端口1702
1)安装软件包(软件包参考lnmp_soft/vpn/)[root@client ~]# yum install xl2tpd-1.3.8-2.el7.x86_64.rpm
2) 修改xl2tp配置文件(修改3个配置文件的内容)[root@client ~]# vim /etc/xl2tpd/xl2tpd.conf //修改主配置文件
[global]
.. ..
[lns default]
.. ..
ip range = 192.168.3.128-192.168.3.254 //分配给客户端的IP池
local ip = 201.1.2.10 //VPN服务器的IP地址
[root@client ~]# vim /etc/ppp/options.xl2tpd //认证配置
require-mschap-v2 //添加一行,强制要求认证
#crtscts //注释或删除该行
#lock //注释或删除该行
root@client ~]# vim /etc/ppp/chap-secrets //修改密码文件
jacob * 123456 * //账户名称 服务器名称 密码 客户端IP
3)启动服务[root@client ~]# systemctl start xl2tpd
[root@client ~]# ss -ntulp |grep xl2tpd
udp 0 0 0.0.0.0:1701 0.0.0.0:* 3580/xl2tpd
4)翻墙设置(非必需操作)[root@client ~]# echo "1" > /proc/sys/net/ipv4/ip_forward #开启路由转发
[root@client ~]# iptables -t nat -A POSTROUTING -s 192.168.3.0/24 \
> -j SNAT --to-source 201.1.2.10
客户端配置
? 1.新建连接与pptp差距不大
新建网络连接(pptpd),输入VPN服务器账户与密码(参考案例2)。
设置VPN连接的属性,预共享密钥是IPSec配置文件中填写的randpass
- 设置Windows注册表(不修改注册表,连接VPN默认会报789错误),具体操作如下:
- 单击"开始",单击"运行",键入"regedit",然后单击"确定"
- 找到下面的注册表子项,然后单击它:
- HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Services\Rasman\Parameters
- 在"编辑"菜单上,单击"新建"->“DWORD值”
- 在"名称"框中,键入"ProhibitIpSec"
- 在"数值数据"框中,键入"1",然后单击"确定"
- 退出注册表编辑器,然后重新启动计算机
systemd
systemd简介
? systemd是linux系统的一组基本构建块
? 提供了一个系统和服务管理器,作为PID 1运行ing启动系统的其余部分进程
? 控制systemd的主要命令是systemctl
systemctl命令
命令列表[root@web1 ~]# systemctl #列出所有启动的服务
[root@web1 ~]# systemctl status <服务名称> #查看服务状态
[root@web1 ~]# systemctl start <服务名称> #启动服务状态
[root@web1 ~]# systemctl stop <服务名称> #关闭服务状态
[root@web1 ~]# systemctl restart <服务名称> #重启服务状态
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl enable --now <服务名称> #设置开机自启并启动
[root@web1 ~]# systemctl disable <服务名称> #禁止开机自启
[root@web1 ~]# systemctl enable <服务名称> #设置开机自启
[root@web1 ~]# systemctl is-active <服务名称> #查看是否激活
[root@web1 ~]# systemctl is-enabled <服务名称> #查看是否开启自启
[root@web1 ~]# systemctl reboot #重启计算机
[root@web1 ~]# systemctl poweroff #关闭计算机
Unit文件
? Unit文件是指systemctl管理服务时会读取对应的配置文件。
? 读取Unit文件的目录
? /etc/systemd/system(设置了开机自的Unit文件)
? /usr/lib/systemctd/system(所有已经安装软件的Unit文件)
unit文件的语法描述
编写案例
步骤二:使用systemd管理shell脚本1)编写shell脚本[root@web1 ~]# vim /root/test.sh
#!/bin/bash
while :
doecho NBecho DACHUI
done
[root@web1 ~]# chmod +x /root/test.sh
2)编写Unit文件[root@web1 ~]# cp /usr/lib/systemd/system/{crond.service,test.service}
[root@web1 ~]# vim /usr/lib/systemd/system/test.service
[Unit]
Description=my test script
After=time-sync.target
[Service]
ExecStart=/root/test.sh
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
步骤二:使用systemd管理Nginx服务1)编写Unit文件[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server #描述信息
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target
/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
步骤二:使用systemd管理Nginx服务
1)编写Unit文件
[root@web1 ~]# vim /usr/lib/systemd/system/nginx.service
[Unit]
Description=The Nginx HTTP Server #描述信息
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
#仅启动一个主进程的服务为simple,需要启动若干子进程的服务为forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT ${MAINPID}
[Install]
WantedBy=multi-user.target