分类 linux 中的文章

openssh8.1 rpm build

1. 创建工作路径 mkdir -p /root/rpmbuild/{SOURCES,SPECS} cp openssh-8.1p1.tar.gz /root/rpmbuild/SOURCES/ 2. 下载源码包 wget https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/openssh-8.1p1.tar.gz 3. 制作准备 yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip tar -zxf openssh-8.1p1.tar.gz cp ./openssh-8.1p1/contrib/redhat/openssh.spec . sed -i -e "s/%define no_x11_askpass 0/%define no_x11_askpass 1/g" openssh.spec sed -i -e "s/%define no_gnome_askpass 0/%define no_gnome_askpass 1/g" openssh.spec 4. 制作rpm包 rpmbuild -ba openssh.spec 如果出现 错误:构建依赖失败: openssl-devel < 1.1 被 ?? 需要 解决方法: vi openssh.spec 注释掉 BuildRequires: openssl-devel < 1.……

阅读全文

自建kvm虚拟机

1. 自定义虚拟机 egrep -q "(svm|vmx)" /proc/cpuinfo && echo "yes" lsmod|grep kvm # centos yum install -y qemu-kvm #KVM主程序,KVM虚拟化模块 yum install -y libvirt #虚拟化服务库 yum install -y bridge-utils ln -s /usr/libexec/qemu-kvm /usr/bin/qemu-kvm # ubuntu apt install qemu qemu-kvm apt install libvirt-bin apt install bridge-utils ln -s /usr/bin/qemu-system-x86_64 /usr/bin/qemu-kvm systemctl start libvirtd systemctl enable libvirtd qemu-img create -f qcow2 vm_NGC.img 20G #创建磁盘镜像 qemu-kvm -name vm_NGC -m 4096 -cpu host -enable-kvm -smp 8 -hda vm_NGC.……

阅读全文

keepalived应用

1. 监控脚本 在Master节点和Slave节点 /etc/keepalived目录下添加check_nginx.sh 文件,用于检测Nginx的存活状况 #!/bin/bash #时间变量,用于记录日志 d=`date --date today +%Y%m%d_%H:%M:%S` #计算nginx进程数量 n=`ps -C nginx --no-heading|wc -l` #如果进程为0,则尝试启动nginx,并且再次检测nginx进程数量, #如果还为0,说明nginx无法启动,此时需要关闭keepalived if [ $n -eq "0" ]; then #如果挂掉了,就启动nginx #注意nginx.conf配置文件的位置 #尝试重新启动nginx /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf sleep 3 #睡眠3秒 n2=`ps -C nginx --no-heading|wc -l` if [ $n2 -eq "0" ]; then #把nginx宕机时间写入日志 echo "$d nginx down,keepalived will stop" >> /usr/local/nginx/logs/check_ng.log #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 service keepalived stop fi fi 授权: chmod 755 /etc/keepalived/check_nginx.sh 2. 非抢占模式 在Master 节点 /etc/keepalived目录下,配置keepalived.……

阅读全文

网卡命名

1. 背景 服务器通常有多块网卡,有板载集成的,同时也有插在PCIe插槽的. Linux系统的命名原来是eth0,eth1这样的形式,但是这个编号往往不一定准确对应网卡接口的物理顺序. 为解决这类问题,dell开发了biosdevname方案. systemd v197版本中将dell的方案作了进一步的一般化拓展. linux内核启动过程中,会默认给网卡以ethX方式随机命名,然后再通过systemd去rename成其他名称. 2. rename流程 step1 依据/usr/lib/udev/rules.d/60-net.rules, 查看是否有ifcfg-xx配置文件(路径在/etc/sysconfig/network-scripts/), 是否有定义了指定MAC地址的配置文件(ifcfg-xx ,xx必须和配置文件的内容DEVICE一致),如果有,则命名改网卡; step2 依据/usr/lib/udev/rules.d/71-biosdevname.rules,如果biosdevname使能了(安装了biosdevname这个包,且内核启动参数显式设置为1), 且网卡没有在step1中定义,则按照biosdevname命名规则rename网卡;(注意,如果没有安装biosdevname这个包,就没有这个文件) step3, 依据/lib/udev/rules.d/75-net-description.rules,将udev工具会根据device属性将填写网卡的属性命名,可能一个网卡会有多个维度的名称; step4,udev 根据step3中的赋值,按照指定的scheme规则,去给在step1 step2中没有命名的网卡命名; 强调:这个step顺序是在我们没有自定义自己的rules的前提下,如果用户自定义了自己的rules,则用户自定义为优先级最高 3. 命令策略(scheme规则) 1.如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名,例如: eno1,如不能则尝试2 2.如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽(注:pci槽位号)的索引号,则使用这个索引号命名,例如: ens1,如不能则尝试3 3.如果能拿到设备所连接的物理位置(PCI总线号+槽位号?)信息,则使用这个信息命名,例如:enp2s0,如不能则尝试4 4.传统的kernel命名方法,例如: eth0,这种命名方法的结果不可预知的,即可能第二块网卡对应eth0,第一块网卡对应eth1 5.使用网卡的MAC地址来命名,这个方法一般不使用 同一个网卡通常同时具有多个维度的名称,systemd在选取的时候,按照有先后次序,使用先命中的 顺序可以简单理解为(eno1-ens1-enp1) root@Bai5gc:/sys/class/net/eth1# udevadm info /sys/class/net/eth1 P: /devices/pci0000:00/0000:00:02.2/0000:03:00.0/net/eth1 E: DEVPATH=/devices/pci0000:00/0000:00:02.2/0000:03:00.0/net/eth1 E: ID_BUS=pci E: ID_MODEL_FROM_DATABASE=Ethernet Connection X552 10 GbE Backplane E: ID_MODEL_ID=0x15ab E: ID_NET_DRIVER=ixgbe E: ID_NET_LINK_FILE=/lib/systemd/network/99-default.link E: ID_NET_NAME_MAC=enxb4a9fca897e7 E: ID_NET_NAME_ONBOARD=eno3 E: ID_NET_NAME_PATH=enp3s0f0 E: ID_PATH=pci-0000:03:00.0 E: ID_PATH_TAG=pci-0000_03_00_0 E: ID_PCI_CLASS_FROM_DATABASE=Network controller E: ID_PCI_SUBCLASS_FROM_DATABASE=Ethernet controller E: ID_VENDOR_FROM_DATABASE=Intel Corporation E: ID_VENDOR_ID=0x8086 E: IFINDEX=3 E: INTERFACE=eth1 E: SUBSYSTEM=net E: SYSTEMD_ALIAS=/sys/subsystem/net/devices/eth1 E: TAGS=:systemd: E: USEC_INITIALIZED=5061037 E: net.……

阅读全文

搭建本地apt仓库

1. 安装工具 #apt-get install dpkg-dev #这个比较全 apt-get install gnupg apt-get install rng-tools 2. 搜集软件和依赖 # 查询依赖关系 root@localhost:~/df/packages# apt-cache depends nginx nginx |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras |Depends: nginx-core |Depends: nginx-full |Depends: nginx-light Depends: nginx-extras # 下载 sudo rm -rf /var/cache/apt/archives/* # 清空缓存目录,这一步也可以不做 sudo apt-get -d install <包名> root@localhost:~/df/packages# sudo apt-get install --reinstall -d `apt-cache depends nginx | grep depends | cut -d: f2 |tr -d "<>"` root@localhost:~/df/packages# sudo apt-get download `apt-cache depends nginx | grep depends | cut -d: f2 |tr -d "<>"` 3.……

阅读全文

frp内网穿透

1. 正常情况一个内网主机与外网服务器的交互 以访问google为例 假设我们的主机IP是192.168.0.10,路由器LAN IP为192.168.0.1,WAN IP为211.22.145.234(这是一个公网IP), google 服务器 IP 为74.125.204.101。 1.主机构建HTTP请求数据包,目标IP为74.125.204.101,目标端口是80/443,源IP为192.168.0.10,源端口随机生成,假定为5000 2.主机检查目标IP地址,发现不在一个网段,数据包丢给默认网关192.168.0.1 3.路由器LAN口收到数据包,构建NAT映射,随机生成端口,假定为5500,这样映射就是:5500->192.168.0.10:5000. WIN口收到的数据包,如果目标端口是5500,则会转发给192.168.0.10的5000端口 4.路由器修改数据包的源端口为5500,源IP地址为211.22.145.234,使用WAN口将数据包发出去 5.google服务器收到请求,构建响应HTTP数据包,目标IP地址为211.22.145.234,目标端口是5500 6.路由器WAN口收到数据包,目标端口是5500,查询NAT表,发现对应的机器是192.168.0.10:5000, 所以修改目标IP为192.168.0.10,目标端口为5000,并通过LAN口发送给主机 7.主机收到数据包,完成一次通信 2. 内网穿透实现 测试服务器没有公网IP,想要让外网直接调用内网的服务,就需要用到内网穿透. 和使用路由器与外网交互类似,需要有一个第三方拥有公网IP的服务器进行路由的中转,代替路由器的角色. 由内网服务器主动请求公网服务器,建立一个长连接,这时公网服务器就可以随时随地的向内网服务器发送消息了 当使用浏览器想要访问内网服务时,先将请求发送到公网服务器上,公网服务器再通过之前建立的长连接将请求发送到内网服务器中。 从而实现在外网请求内网服务的需求 3. 公网服务器设置 # wget https://github.com/fatedier/frp/releases/download/v0.14.1/frp_0.14.1_linux_amd64.tar.gz # sudo tar zxf frp_0.14.1_linux_amd64.tar.gz # cd frp_0.14.1_linux_amd64/ # sudo vim frps.ini # [common] bind_port = 8989 # frp服务的端口 vhost_http_port = 8889 # frp的http服务的端口 # 启动服务 # ./frps -c frps.ini # 前台直接启动,测试看日志方便 # nohup ./frps -c ./frps.ini > /dev/null 2>&1 & # 后台运行 4.……

阅读全文

github加速

1. 给git设置socks5/vmess代理 前提是开启代理服务,可以使用V2rayL: https://github.com/jiangxufeng/v2rayL 和 ghelper 使用 https 的时候,就是使用 https 协议复制仓库的时候 git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks5://127.0.0.1:1080' git config --global http.proxy 'vmess://127.0.0.1:1081' git config --global https.proxy 'vmess://127.0.0.1:1081' 也可以直接修改用户主目录下的 .gitconfig 文件 [http] proxy = socks5://127.0.0.1:1080 [https] proxy = socks5://127.0.0.1:1080 [http] proxy = vmess://127.0.0.1:1081 [https] proxy = vmess://127.0.0.1:1081 取消代理 git config --global --unset http.proxy git config --global --unset https.proxy 查看已有代理 git config --global -l 在使用 git 开头的路径时,也就是在使用 ssh 通道时……

阅读全文

cpu亲和性

1. 什么是cpu亲和性(affinity) CPU的亲和性, 就是进程要在指定的 CPU 上尽量长时间地运行而不被迁移到其他处理器,也称为CPU关联性; 再简单的点的描述就将制定的进程或线程绑定到相应的cpu上; 在多核运行的机器上,每个CPU本身自己会有缓存,缓存着进程使用的信息,而进程可能会被OS调度到其他CPU上, 如此,CPU cache命中率就低了,当绑定CPU后,程序就会一直在指定的cpu跑,不会由操作系统调度到其他CPU上,性能有一定的提高。 软亲和性(affinity): 就是进程要在指定的CPU上尽量长时间地运行而不被迁移到其他处理器,Linux内核进程调度器天生就具有被称为软CPU亲和性(affinity) 的特性,这意味着进程通常不会在处理器之间频繁迁移。 这种状态正是我们希望的,因为进程迁移的频率小就意味着产生的负载小。 硬亲和性(affinity): 简单来说就是利用linux内核提供给用户的API,强行将进程或者线程绑定到某一个指定的cpu核运行。 解释: 在linux内核中,所有的进程都有一个相关的数据结构,称为 task_struct。这个结构非常重要,原因有很多;其中与 亲和性(affinity)相关度最高的是 cpus_allowed 位掩码。 这个位掩码由 n 位组成,与系统中的 n 个逻辑处理器一一对应。 具有 4 个物理 CPU 的系统可以有 4 位。如果这些 CPU 都启用了超线程,那么这个系统就有一个 8 位的位掩码。 如果为给定的进程设置了给定的位,那么这个进程就可以在相关的 CPU 上运行。因此,如果一个进程可以在任何 CPU 上运行,并且能够根据需要在处理器之间进行迁移,那么位掩码就全是 1。 实际上,这就是 Linux 中进程的缺省状态;(这部分内容在这个博客中有提到一点:http://www.cnblogs.com/wenqiang/p/4802619.html) cpus_allowed用于控制进程可以在哪里处理器上运行 sched_set_affinity() (用来修改位掩码) sched_get_affinity() (用来查看当前的位掩码) 2. 进程与cpu的绑定 sched_setaffinity可以将某个进程绑定到一个特定的CPU。你比操作系统更了解自己的程序,为了避免调度器愚蠢的调度你的程序,或是为了在多线程程序中避免缓存失效造成的开销,你可能会希望这样做 在进行进程与cpu的绑定前,我们先了解编写程序需要准备的知识点 SCHED_SETAFFINITY(2) Linux Programmer's Manual SCHED_SETAFFINITY(2) NAME sched_setaffinity, sched_getaffinity - set and get a process's CPU affinity mask SYNOPSIS #define _GNU_SOURCE /* See feature_test_macros(7) */ #include <sched.……

阅读全文

CentOS7系统优化

1. 修改ip地址、网关、主机名、DNS等 [root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 #网卡名字 BOOTPROTO=static #静态IP地址获取状态 如:DHCP表示自动获取IP地址 IPADDR=192.168.1.113 #IP地址 NETMASK=255.255.255.0 #子网掩码 ONBOOT=yes#引导时是否激活 GATEWAY=192.168.1.1 [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.113 NETMASK=255.255.255.0 ONBOOT=yes GATEWAY=192.168.1.1 [root@localhost ~]# vi /etc/sysconfig/network HOSTNAME=c64 #修改主机名,重启生效 GATEWAY=192.168.1.1 #修改默认网关,如果上面eth0里面不配置网关的话,默认就使用这里的网关了。 [root@localhost ~]# cat /etc/sysconfig/network HOSTNAME=c64 GATEWAY=192.168.1.1 我们也可以用 hostnamec64 来临时修改主机名,重新登录生效 修改DNS [root@localhost ~]# vi /etc/resolv.conf #修改DNS信息 nameserver 114.114.114.114 nameserver 8.8.8.8 [root@localhost ~]# cat /etc/resolv.conf #查看修改后的DNS信息 nameserver 114.114.114.114 nameserver 8.8.8.8 [root@localhost ~]# systemctl restart network #重启网卡,生效 2.……

阅读全文

CentOS7安全加固

1. 账号和口令 1 )禁用或删除无用账号 减少系统无用账号,降低安全风险 #删除不必要的账号 userdel <用户名> #锁定不必要的账号 passwd -l <用户名> #解锁必要的账号 passwd -u <用户名> 2 )检查特殊账号 检查是否存在空口令和root权限的账号 #查看空口令账号 awk -F: '($2=="")' /etc/shadow #为空口令账号设定密码 passwd <用户名> #查看UID为零的账号,确认只有root账号 awk -F: '($3==0)' /etc/passwd 3 )添加口令策略 加强口令的复杂度,降低被猜解的可能性 vi /etc/login.defs 修改配置文件 PASS_MAX_DAYS 90 #新建用户的密码最长使用天数 PASS_MIN_DAYS 0 #新建用户的密码最短使用天数 PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数 #或者使用chage命令修改用户设置 #将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户 chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名> #设置连续输错三次密码,账号锁定五分钟 vi /etc/pam.d/common-auth 修改配置文件,添加 auth required pam_tally.so onerr=fail deny=3 unlock_time=300 4 )限制用户su 限制能su到root的用户……

阅读全文

最近文章

分类

标签

友情链接

其它