当前位置: 代码迷 >> 综合 >> hydd的Linux笔记Day35
  详细解决方案

hydd的Linux笔记Day35

热度:38   发布时间:2024-03-10 01:36:06.0

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)

拓扑图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-l2dHm4NE-1603710064997)(C:\Users\BJTT\AppData\Roaming\Typora\typora-user-images\1603433454794.png)]

使用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

  1. 设置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