本文是在课程课件基础上修改的学习笔记
课程原地址:https://www.bilibili.com/video/BV1nW411L7xm
如有侵删
运维基本功(一):Linux系统安装
运维基本功(二):Linux基本命令
运维基本功(三):Linux文件管理
运维基本功(四):Linux文件管理-Vim编辑器概述
运维基本功(五):Linux文件管理-用户管理
运维基本功(六):Linux用户管理-远程管理
运维基本功(七):Linux的权限管理操作
运维基本功(八):Linux自有服务与软件包管理
运维基本功(九): Linux自有服务-防火墙&计划任务
运维基本功(十): Linux计划任务以及进程检测与控制
运维基本功(十一): LAMP项目部署实战
运维基本功(十二): Linux命令回顾与扩展
运维基本功(十三): 再谈用户组管理
运维基本功(十四):Linux下yum源配置实战
运维基本功(十五):Linux系统优化基础
运维基本功(十六):远程管理SSH服务
为了最大程度的保护公司内网服务器的安全,公司内部有一台服务器做跳板机(跳板机(Jump Server),也称堡垒机,是一类可作为跳板批量操作远程设备的网络设备,是系统管理员或运维人员常用的操作平台之一)。运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。由于开发人员有时候需要通过跳板机登录到线上生产环境查看一些业务日志,所以现在需要运维人员针对不同的人员和需求对账号密码进行统一管理,并且遵循权限最小化原则。
概念:这种结构用户界面是完全通过浏览器来实现,使用http协议
优势:节约开发成本
概念:指的是客户端和服务端之间的通信方式,客户端提供用户请求接口,服务端响应请求进行对应的处理,并返回给客户端
优势:安全性较高,一般面向具体的应用
B/S:
1、广域网,只需要有浏览器即可
2、一般面向整个互联网用户,安全性低
3、维护升级简单
C/S:
1、专用网络、小型局域网,需要具体安装对应的软件
2、一般面向固定用户,安全性较高
思考:C/S B/S哪种更好呢?
思考1:
我们通过网络是如何找到我们想要访问的服务的?
IP(提供服务的服务器)+Port(找到相应的服务)
说明:端口号只有整数,范围是从0 到65535
• 1~255:一般是知名端口号,如:ftp 21号、web 80、ssh 22、telnet 23号等
• 256~1023:通常都是由Unix系统占用来提供特定的服务
• 1024~5000:客户端的临时端口,随机产生
• 大于5000:为互联网上的其他服务预留
思考2:
如何查看系统默认的注册端口?
/etc/serivces
熟悉Linux的人那肯定都对SSH不陌生。ssh是一种用于安全访问远程服务器的协议,远程管理工具。它之所以集万千宠爱为一身,就是因为它的安全性。那么它到底是怎么样来保证安全的呢?到底是如何工作的呢?
首先,在讲SSH是如何保证安全的之前,我们先来了解以下几个密码学相关概念:
①对称加密算法(DES)
总结:
- 发送方使用密钥将明文数据加密成密文,然后发送出去
- 接收方收到密文后,使用同一个密钥将密文解密成明文进行读取
②非对称加密算法(RSA)
总结:
- 发送方使用接收方发送过来的公钥将明文数据加密成密文,然后发送出去
- 接收方收到密文后,使用自己本地留存的私钥将密文解密成明文进行读取
对称加密算法与非对称加密算法区别
- 对称加密
- 使用同一个密钥进行加密和解密,密钥容易泄露
- 加密速度快,效率高,数据传输速度快,安全性较低
- 非对称加密
- 使用不同的密钥(公钥和私钥)进行加密和解密
- 加密速度远远慢于对称加密,数据传输速度慢,安全性较高
问: 了解了加密算法,那SSH到底是如何保证数据安全的呢?
答:SSH服务有两种认证方式,分别是基于用户名密码认证和密钥对认证
SSH客户端向SSH服务端发起一个登录请求
SSH服务端将自己的公钥发送给SSH客户端
注意:如果是第一次访问,则提示以下内容:
# ssh远程登录操作 首次
ssh 192.168.19.101
# 显示结果
# 无法确认主机的真实性
The authenticity of host '192.168.19.101 (192.168.19.101)' can't be established.
ECDSA key fingerprint is SHA256:Y/cQNWWkX15o2MsJ5HOQBI2m8S33qIA+x3zys8J4pOY.
ECDSA key fingerprint is MD5:76:61:86:8b:d5:ee:bf:9c:60:e6:12:fa:f6:f0:74:36.
Are you sure you want to continue connecting (yes/no)?yes
Warning: Permanently added '192.168.19.101' (ECDSA) to the list of known hosts.
#说明:
#当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
SSH客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端
SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密
SSH服务端将解密出来的密码和/etc/shadow
文件里的用户密码对比认证
SSH服务端认证成功,则返回登录成功结果,并发送一个随机会话口令给客户端,该口令用于后面两台主机进行数据传输的一个临时加密会话口令
- 关闭防火墙和selinux(实验环境都先关闭掉)
- 配置yum源(公网源或者本地源)
- 软件安装和检查
- 了解并修改配置文件
- 启动服务检查运行状态并设置开机自启动
# 关闭firewalld防火墙
# 临时关闭
systemctl stop firewalld
# 关闭开机自启动
systemctl disable firewalld
# 关闭selinux
# 临时关闭
setenforce 0
# 修改配置文件 永久关闭
vim /etc/selinux/config
SELINUX=disabled
注意:一般情况下使用网络源即可。如果没有网络的情况下,才需要配置本地源
【配置开始】
# 建立光盘挂载目录文件夹
mkdir /dvd
# 手动挂载光盘
mount /dev/sr0 /dvd
# lsblk查看是否挂载成功 查看mount点或者查看挂载到的目录内容
# 添加到开启加载脚本 开机自动挂载光盘
echo "mount /dev/sr0 /dvd" >> /etc/rc.local
cd /etc/yum.repos.d
mkdir bak
#移动默认源 备份并使其失效
mv ./* ./bak
#按照挂载光盘位置,配置光盘源
cd bak
cp CentOS-Media.repo ../
vim CentOS-Media.repo
#修改文件第16行,修改为光盘挂载点/dvd/即可。修改第20行,开启源使用
14 [c7-media]
15 name=CentOS-$releasever - Media
16 baseurl=file:///dvd/
17 file:///media/cdrom/
18 file:///media/cdrecorder/
19 gpgcheck=1
20 enabled=1
21 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
22
【配置结束】
rpm -qa|grep openssh
查询结果
# 服务端和客户端的公共组件
openssh-7.4p1-16.el7.x86_64
# 客户端安装包
openssh-clients-7.4p1-16.el7.x86_64
# 服务端安装包
openssh-server-7.4p1-16.el7.x86_64
rpm -ql openssh-server
查询结果
# 配置文件
/etc/ssh/sshd_config
/etc/sysconfig/sshd
# 服务管理脚本
/usr/lib/systemd/system/sshd.service => systemctl start sshd
# 文件共享服务 提供文件上传下载的服务
/usr/libexec/openssh/sftp-server
# 二进制文件程序文件
/usr/sbin/sshd
# 公钥生成工具
/usr/sbin/sshd-keygen
# man手册
/usr/share/man/man5/sshd_config.5.gz
/usr/share/man/man8/sftp-server.8.gz
/usr/share/man/man8/sshd.8.gz
rpm -ql openssh-clients
查询结果
# 客户端配置文件
/etc/ssh/ssh_config
# 远程copy命令 服务器间进行文件传输
/usr/bin/scp
# sftp客户端 上传下载文件操作
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-add
/usr/bin/ssh-agent
/usr/bin/ssh-copy-id
/usr/bin/ssh-keyscan
# 客户端man手册
/usr/share/man/man1/scp.1.gz
/usr/share/man/man1/sftp.1.gz
/usr/share/man/man1/slogin.1.gz
/usr/share/man/man1/ssh-add.1.gz
/usr/share/man/man1/ssh-agent.1.gz
/usr/share/man/man1/ssh-copy-id.1.gz
/usr/share/man/man1/ssh-keyscan.1.gz
/usr/share/man/man1/ssh.1.gz
/usr/share/man/man5/ssh_config.5.gz
/usr/share/man/man8/ssh-pkcs11-helper.8.gz
# man 5 sshd_config
需求:禁止root用户远程登录
vim /etc/ssh/sshd_config
# 打开文件第38行 修改以下内容
#PermitRootLogin yes
PermitRootLogin no
# 重启服务
systemctl restart sshd
# 查看状态
systemctl status sshd
# 进程查看方式
ps aux |grep sshd
# 端口查看方式
netstat -lntp|grep sshd
# 开启自启动
systemctl enable sshd
IP地址 | 主机名称 | 服务器角色 |
---|---|---|
192.168.19.100 | jumpserver | 跳板机 |
192.168.19.101 | realserver | 真实业务服务器 |
公司的开发测试服务器,有多个团队使用:
①html 前端组 jerry tom
②server 后端组 xiaoming xiaoqiang
③app 手机软件组 rose xiaohong
注意:在跳板机完成用户创建及其授权
groupadd html
useradd jerry -g html
useradd tom -g html
echo 123456|passwd --stdin jerry
echo 123456|passwd --stdin tom
mkdir -p /code/html
# 查看默认权限
cd /
ll -d /code/html
# 查询结果
drwxr-xr-x. 2 root root 6 3月 21 23:16 /code/html
# 修改所属组
chgrp html /code/html
# 增加组 写权限
chmod g+w /code/html
# 查看默认权限
ll -d /code/html
# 查询结果
drwxrwxr-x. 2 root html 6 3月 21 23:16 /code/html
# 设置粘滞位 其它用户不允许删除不属于它的目录和文件
chmod 1700 /code/html
# 查看默认权限
ll -d /code/html
# 查询结果
drwxrwx--T. 2 root html 6 3月 21 23:16 /code/html
测试用户权限是否设置成功,可以结合第(三)步一起完成
注意:在生产服务器server端完成
参见上面sshd的配置文件的操作
需求:防止扫IP使用默认端口暴力破解(一次一次试)。故将默认端口更改为:3721
netstat -lntp|grep 3721
# 或者
ss -nalp|grep 3721
# 或者
lsof -i :3721
vim /etc/ssh/sshd_config
# 找到文件第13行添加以下内容
# Port 22
Port 3721
systemctl restart sshd
# 或者
systemctl reload sshd
ssh @192.168.19.100
ssh: connect to host 192.168.19.100 port 22: Connection refused
#原因:端口号不对
#解决:指定端口 -p参数
ssh -p 3721 jerry@192.168.19.100
Tip:
更改客户端配置文件,不想验证指纹vim /etc/ssh/ssh_config #StrictHostKeyChecking ask StrictHostKeyChecking no
注意:在线上生产环境中创建一个开发人员专用的账号
思路:
1、在线上生成环境,创建公共账号(开发人员)
2、安装随机密码生成工具pwgen
3、使用pwgen工具生成随机密码
4、给账号设置密码
useradd code
pwgen软件需要配置epel源安装
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum install -y pwgen
pwgen
echo 上面生成的密码选一个 |passwd --stdin code
ssh --help
man ssh
# 指定连接用户
-l
# ssh 192.168.19.101 -l jerry 相当于 ssh [email protected]
# 指定连接端口
-p
# 默认以当前机器用户身份登录,或者连接时指定用户身份
cp 本地文件的复制
scp 远程文件的复制
①在服务器A上将本地文件复制到远程服务器B
②在服务器A上将远程服务器B的文件复制到本地
这里以服务器A为操作服务器
使用scp工具 注意这只是其中之一解决方案
# scp 本地路径 远程路径
scp jerry.html jerry@192.168.19.100:/home/jerry/
# scp 远程路径 本地路径
scp jerry@192.168.19.100:/home/jerry/tom.html ./
# 递归拷贝目录
-r
# 指定远程服务器的端口
-P
pwgen --help
# 用法: pwgen 选项参数 长度 生成个数
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
# 密码中至少包含一个大写字母
-c or –capitalize
# 密码中不包含大写字母
-A or –no-capitalize
# 密码中至少包含一个数字
-n or –numerals
# 密码中不包含数字
-0 or –no-numerals
# 密码中至少包含一个特殊符号
-y or –symbols
# 生成完全随机密码
-s or –secure
# 密码中不包含歧义字符(例如1,l,O,0)
-B or –ambiguous
# 使用SHA1 hash给定的文件作为一个随机种子
-H or –sha1=path/to/file[#seed]
# 在列中打印生成的密码
-C
# 不要在列中打印生成的密码,即一行一个密码
-1
# 不要使用任何元音,以避免偶然的脏话
-v or –no-vowels
pwgen -cnBs1 10 3
# 查看当前在线用户
w
# 断开ssh客户端连接
# pkill -kill -t pts/1
选择网络连接属性 | 意义 |
---|---|
Use bridged networking(使用桥接网络) | 使用(连接)VMnet0虚拟交换机,此时虚拟机相当于网络上的一台独立计算机,与主机一样,拥有一个独立的IP地址 |
Use network address translation(NAT)(使用NAT网络) | 使用(连接)VMnet8虚拟交换机,此时虚拟机可以通过主机单向访问网络上的其他工作站(包括Internet网络),其他工作站不能访问虚拟机 |
Use Host-Only networking(仅主机网络) | 使用(连接)VMnet1虚拟交换机,此时虚拟机只能与虚拟机、主机互连,与网络上的其他工作站不能访问 |
VMnet0 桥接模式 : 和物理真机连接在同一交换机,相当于系统与Windows处于同一个网段
① 与物理真机同网段,如192.168.43.X
② 桥接模式可以连接外网(有网络)
桥接模式中,Linux系统就相当于一台独立的计算机,与Windows物理真机处于同一个网络环境中。
VMnet1 仅主机模式:封闭的网络环境,仅能与Windows物理真机进行连接。无法连接外网
① 与物理真机不在同一个网段,拥有独立的IP网段
② 仅主机模式仅能用于内部连通(VMware=>JumpServer、RealServer)
③ 仅主机模式无法连接外网
VMnet8 NAT模式:相当于一个独立的网络环境,与物理真机不处于同一个网段。但是其可以通过虚拟网络路由器(NAT地址转化)连接外网。
① 与物理真机不在同一个网段,拥有独立的IP网段
② 不仅可以进行内部连接(VMware=> CentOS6、CentOS7)
③ 拥有一个虚拟的路由器(NAT设备)可以让我们虚拟机连接到外网环境
给JumpServer配置两张网卡(NAT模式 + 仅主机模式)
添加仅主机模式网卡:
重启network网络,然后使用ifconfig获取仅主机模式的网卡信息。
# systemctl restart network
# ifconfig
由上图可知,仅主机模式的网卡为ens37,NAT模式网卡为ens33。遇到一个问题,ens37这张网卡没有配置文件:
# cd /etc/sysconfig/network-scripts/
# ls
添加ens37配置文件:
# cp ifcfg-ens33 ifcfg-ens37
# vim ifcfg-ens37
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR=11.1.1.10
NETMASK=255.255.255.0
NAME="ens37"
DEVICE="ens37"
ONBOOT="yes"
重启计算机网络:
# systemctl restart network
Linux图形化界面中的网络管理器,有些时候我们设置了静态IP。但是重启网络后,其并没有生效或者和你设置的IP地址不一致,很可能是由于NetworkManager工具的影响。
# systemctl stop NetworkManager
# systemctl disable NetworkManager
把NAT模式的网卡更改为仅主机模式,然后设置一个静态IP地址。
由于现在只有一张网卡,所以仅主机模式对应的网卡为ens33,配置:
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="none"
IPADDR=11.1.1.100
NETMASK=255.255.255.0
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
设置完成后,重启计算机网络
# systemctl stop NetworkManager
# systemctl disable NetworkManager
# systemctl restart network
SSH服务作为目前Linux远程连接服务。采用SSL加密方式,启到了不错的安全作用。学习好SSH服务,是之后连接管理远程服务的基本操作。
老师之前管理公司机房的服务器的时候,安装完系统,第一件事情就是开启ssh服务。还会做以下操作:
① 修改默认端口 可以避免一些自动脚本测试连接
② 免密登录 方便直接连接,避免泄露密码。只需添加需要操作人的公钥即可