为了最大程度的保护公司内网服务器的安全,公司内部有一台服务器做跳板机。运维人员在维护过程中首先要统一登录到这台服务器,然后再登录到目标设备进行维护和操作。由于开发人员有时候需要通过跳板机登录到线上生产环境查看一些业务日志,所以现在需要运维人员针对不同的人员和需求对==账号密码进行统一==管理,并且遵循权限最小化原则。
#任务要求
#任务拆解
#涉及知识点
#课程目标
#理论储备
##一、什么是服务
##二、服务架构模型
概念:这种结构用户界面是完全通过浏览器来实现,使用http协议
优势:节约开发成本
概念:指的是客户端和服务端之间的通信方式,客户端提供用户请求接口,服务端响应请求进行对应的处理,并返回给客户端
优势:安全性较高,一般面向具体的应用
B/S:
1、广域网,只需要有浏览器即可
2、一般面向整个互联网用户,安全性低
3、维护升级简单
C/S:
1、专用网络、小型局域网,需要具体安装对应的软件
2、一般面向固定用户,安全性较高
思考1:
我们通过网络是如何找到我们想要访问的服务的?
IP(提供服务的服务器)+Port(找到相应的服务)
##三、端口号设定
说明:端口号只有整数,范围是从0 到65535
? 1~255:一般是知名端口号,如:ftp 21号、web 80、ssh 22、telnet 23号等
? 256~1023:通常都是由Unix系统占用来提供特定的服务
? ==1024~5000==:客户端的临时端口,随机产生
? 大于5000:为互联网上的其他服务预留
思考2:
如何查看系统默认的注册端口?
/etc/serivces
##五、SSH服务概述
? 熟悉Linux的人那肯定都对SSH不陌生。ssh是一种用于安全访问远程服务器的协议,远程管理工具。它之所以集万千宠爱为一身,就是因为它的安全性。那么它到底是怎么样来保证安全的呢?到底是如何工作的呢?
? 首先,在讲SSH是如何保证安全的之前,我们先来了解以下几个密码学相关概念:
###1、加密算法(了解)
####㈠ 对称加密算法(DES)
总结:
####㈡ 非对称加密算法(RSA)
总结:
对称加密算法与非对称加密算法区别
问: 了解了加密算法,那SSH到底是如何保证数据安全的呢?
答:SSH服务有两种认证方式,分别是基于用户名密码认证和密钥对认证
SSH客户端向SSH服务端发起一个登录请求
SSH服务端将自己的公钥发送给SSH客户端
注意:如果是第一次访问,则提示以下内容:
[root@MissHou ~]# ssh 192.168.10.171
The authenticity of host ‘192.168.10.171 (192.168.10.171)‘ can‘t be established. //无法确认主机192.168.10.171的真实性
RSA key fingerprint is 9f:71:de:3c:86:25:dd:f0:06:78:ab:ba:96:5a:e4:95.
Are you sure you want to continue connecting (yes/no)?yes
说明:
当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。
SSH客户端使用服务端发过来的公钥将自己的密码加密并且发送给SSH服务端
SSH服务端收到SSH客户端发过来的加密密码后使用本地留存的私钥进行解密
SSH服务端将解密出来的密码和/etc/shadow
文件里的用户密码对比认证
###3、 ==SSH介绍总结==
##六、SSH服务配置
###1、搭建所有服务的思路
1)安装软件
2)确认是否安装
[root@jumper-server ~]# rpm -q openssh-server
openssh-server-5.3p1-94.el6.x86_64
[root@jumper-server ~]# rpm -q openssh-clients
openssh-clients-5.3p1-94.el6.x86_64
3)查看软件包的文件列表
[root@jumper-server ~]# rpm -ql openssh-server
/etc/rc.d/init.d/sshd 启动脚本
/etc/ssh/sshd_config 配置文件
/usr/sbin/sshd 程序本身(二进制文件)
/usr/share/man/man5/sshd_config.5.gz 配置文件的man手册
/usr/share/man/man8/sshd.8.gz sshd程序的man手册
[root@jumper-server ~]# rpm -ql openssh-clients
/etc/ssh/ssh_config 客户端配置文件
以下是客户端相关命令:scp、sftp、slogin|ssh、ssh-copy-id
/usr/bin/scp
/usr/bin/sftp
/usr/bin/slogin
/usr/bin/ssh
/usr/bin/ssh-copy-id
客户端命令以及配置文件的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
# man 5 sshd_config
需求:禁止==root用户==远程登录
# vim /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no
#任务解决方案
##1. 创建用户并授权
注意:在跳板机上完成jumper-server
环境:开发部门3个人code1~code3
1) 创建组和相应用户
groupadd coding
useradd code1 -g coding
useradd code2 -g coding
useradd code3 -g coding
2) 使用非交互式设置密码
echo 123|passwd --stdin code1
echo 123|passwd --stdin code2
echo 123|passwd --stdin code3
3) 为开发人员创建数据目录并且设置相应的权限
mkdir /data/code -p
[root@jumper-server ~]# ll -d /data/code/
drwxr-xr-x 2 root root 4096 Dec 27 11:15 /data/code/
[root@jumper-server ~]# chgrp coding /data/code/
[root@jumper-server ~]# chmod g+w /data/code/
[root@jumper-server ~]# ll -d /data/code/
drwxrwxr-x 2 root coding 4096 Dec 27 11:15 /data/code/
[root@jumper-server ~]# chmod 1770 /data/code/
[root@jumper-server ~]# ll -d /data/code/
drwxrwx--T 2 root coding 4096 Dec 27 11:18 /data/code/
4) 测试验证
code1人员不能删除其他人员创建的文件;并且coding组所有成员都以在该目录下创建文件
注意:在生产服务器server端完成
1. 搭建sshd服务
默认系统已经安装好,并且已经成功启动
2. 根据需求修改配置文件
vim /etc/ssh/sshd_config
#PermitRootLogin yes
PermitRootLogin no
3. 重启服务
service sshd restart
或者
service sshd reload
4. 测试验证
##3. 更改默认端口
端口默认更改为:10086
1. 确定当前服务器端口没有被占用
[root@server ~]# netstat -nltup|grep 10086
[root@server ~]# ss -nalp|grep 10086
[root@server ~]# lsof -i :10086
2. 修改配置文件
vim /etc/ssh/sshd_config
#Port 22
Port 10086
3. 重启服务
service sshd restart
或者
service sshd reload
4.测试验证
[code1@jumper-server ~]$ ssh stu1@10.1.1.1
ssh: connect to host 10.1.1.1 port 22: Connection refused
原因:端口号不对
解决:指定端口 -p参数
[code1@jumper-server ~]$ ssh -p 10086 stu1@10.1.1.1
stu1@10.1.1.1‘s password:
Last login: Thu Dec 27 11:50:09 2018 from 10.1.1.250
补充:
更改客户端配置文件,不想验证指纹:
# vim /etc/ssh/ssh_config
# StrictHostKeyChecking ask
StrictHostKeyChecking no
##4. 用户密码随机
注意:在线上生产环境中创建一个开发人员专用的账号
思路:
0. 需要在线上生产环境服务器中,创建一个公共账号(开发人员)
[root@server ~]# useradd code
1. 安装pwgen工具
分析:
1)pwgen工具本地镜像没有,需要通过外网epel源下载安装
2)生产环境不能访问互联网
3)跳板机可以访问互联网,所以通过跳板机配置epel网络源来缓存软件包
4)缓存下来的软件包再远程拷贝到server端进行安装
步骤:
1)跳板机配置epel网络yum源
[root@jumper-server ~]# cat /etc/yum.repos.d/epel.repo
[epel]
name=xxxx
baseurl=http://mirrors.aliyun.com/epel/6/x86_64/
enabled=1
gpgcheck=0
2)修改配置文件来缓存软件包
3)跳板机安装pwgen软件包
[root@jumper-server yum.repos.d]# yum -y install pwgen
4)将缓存下来的软件包远程拷贝到server端
5)在server端安装pwgen工具
[root@server ~]# rpm -ivh /tmp/pwgen-2.08-1.el6.x86_64.rpm
2. 使用pwgen工具生成随机密码
[root@server ~]# pwgen -cnsB1 15 1
RTMU4scsh7e7vAi
3. 给线上code用户设置随机密码
[root@server ~]# echo RTMU4scsh7e7vAi |passwd --stdin code
Changing password for user code.
passwd: all authentication tokens updated successfully.
命令的使用:
# pwgen --help
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
生成完全随机密码
-B or –ambiguous
密码中不包含模糊字符(如1,l,O,0)
-C
在列中打印生成的密码
-1
不要在列中打印生成的密码,即一行一个密码
# pwgen -cnBs1 10 3
生成长度为10,包含大写、数字、不包含模糊字符完全随机的3个密码
[root@app1 tmp]# pwgen -cnBs1 10 5
J9xREhKP9b
CJXoJffW4F
nTi4mAzjPx
UiJTiVcz9i
xTFK7KLbRc
[root@app1 tmp]# echo ‘J9xREhKP9b‘ |passwd --stdin yunwei
Changing password for user yunwei.
passwd: all authentication tokens updated successfully.
注意:
在实际的工作中,以shell脚本形式定期修改用户的密码,并且用户名和密码对应会保存到一个密码文件里!
#补充扩展
##1. ssh客户端工具
ssh --help
man ssh
[user@]hostname [command]
-l:指定连接用户
-p:指定端口
注意:
当前本机用户是root,如果不指定连接用户,那么会让你输入远程主机的root密码。
如果指定了连接用户pos1,那么不管你当前是什么用户就只让你输入远程主机的pos1用户密码。
##2. scp客户端工具
cp 本地文件的拷贝
scp 远程文件拷贝
用法:
将本地文件拷贝到远程:
scp 需要拷贝的文件 远程服务器
scp file1 pos1@10.1.1.1:/tmp/
scp -r dir1 pos1@10.1.1.1:/tmp
将远程文件拷贝到本地:
scp 远程文件 本地路径
scp -r pos1@10.1.1.1:/tmp/dir1 /data/code
-r:递归拷贝目录
-P:指定远程服务器的端口
# scp -P10022 1.txt pos@10.1.1.2:/tmp
原文:https://blog.51cto.com/14625831/2548860