常见的网络服务
文件共享服务:FTP SMB NFS
域名管理服务:DNS
网站服务:Apache(httpd) Nginx IIS Lighttpd
邮件服务:Mail
远程管理服务:SSH telnet
动态地址管理服务:DHCP
什么是服务?
-
本质是运行在操作系统后台的一个或者多个程序
-
它是可靠的、并发的、连续的、不间断的运行,随时可以接受请求
-
交互式提供服务
服务架构模型
1 B/S架构
browser浏览器<=>server服务器
概念:这种结构的用户界面完全通过浏览器实现,使用http协议
优势:节约开发成本;广域网,有浏览器即可;维护升级简单
劣势:面向整个互联网,安全性低;
例如:www.taobao.com
2 C/S架构
client客户端<=>server服务端
概念:指客户端与服务端之间的通信方式,客户端提供用户请求接口,服务端响应请求进行相应处理并给客户端返回结果
优势:面向固定用户,安全性高
劣势:专业网络、小型局域网,需要安装相应的软件
例如:淘宝APP
关于端口号的设定
服务的端口号只有整数,范围是0到65535
1-255 知名端口号;如FTP 21号、WEB 80号、SSH 22号
256-1023 通常是UNIX系统占用来提供特定的服务
1024-5000 客户端的临时端口,随机产生
> 5000 互联网上的其他服务预留端口
如何查看系统的默认注册端口号?
/etc/serivces
SSH服务概述
SSH是一种用于安全访问远程服务器的协议,一个远程管理工具
1 加密算法
①DES:对称加密算法
发送方使用密钥将明文数据加密成密文,然后发送
接收方收到密文后,使用同一个密钥将密文解密成明文进行读取
优点:加密速度快;数据传输快;效率高
劣势:使用同一个密钥进行加密和解密,密钥易泄露;安全性低
②RSA:非对称加密
首先接收方生成一对有相互关系的密钥对:公钥e和私钥f
发送方使用接收方发送过来的公钥将明文数据加密成密文,然后发送
接收方收到密文后,使用本地留存的私钥将密文解密成明文进行读取
优点:使用不同的密钥进行加密和解密,安全性高
劣势:加密速度慢;数据传输慢
2 SSH基于用户名密码认证原理
SSH客户端向SSH服务端发送登录请求
SSH服务端将自己的公钥发送给SSH客户端
SSH客户端使用公钥将自己的密码加密后发送给SSH服务端
SSH服务端收到SSH客户端发送来的密文后使用本地留存的私钥解密
SSH服务端将解密后的密码与/etc/shadow
文件里面的密码对比认证
若认证成功,则返回登录成功结果,并返回一个随机会话口令给SSH客户端
这个随机口令用于后面两台主机进行数据传输的一个临时加密会话口令
注意:
SSH服务在用户登录认证时使用RSA加密算法;安全
认证通过后进行数据传输时使用DES加密算法;速度快
3 openssh软件
openssh软件是SSH服务底层的软件;openssh属于C/S架构,拥有客户端和服务端;open是开源,ssh是SSH服务
检查openssh是否安装
rpm -qa|grep openssh
or
yum list installed|grep openssh
——————————————————————————————————
openssh-7.4p1-22.el7_9.x86_64 //服务端和客户端的公共组件
openssh-server-7.4p1-22.el7_9.x86_64 //服务端安装包
openssh-clients-7.4p1-22.el7_9.x86_64 //客户端安装包
openssh安装命令:
yum install openssh -y
关于openssh生成的文件
rpm -ql openssh-server
--------
/etc/ssh/sshd_config //服务端配置文件
/etc/sysconfig/sshd //SSH服务的主配置文件
/usr/lib/systemd/system/sshd.service //服务管理
/usr/sbin/sshd //二进制文件
/usr/sbin/sshd-keygen //公钥生成工具
——————————————————————————————————
rpm -ql openssh-clients
--------
/etc/ssh/ssh_config //客户端配置文件
/usr/bin/scp //远程copy命令
/usr/bin/sftp //sftp客户端,上传下载文件
SSH服务搭建
基本语法
查看参数和帮助
ssh --help
man ssh
——————————————————————————————————
ssh [option]
-l 指定连接的用户
-p 指定连接端口号
——————————————————————————————————
ssh 10.1.1.1 -l tom 或 ssh tom@10.1.1.1
SSHD服务管理
systemctl start/stop/restart/status sshd #开启/停止/重启/状态
systemctl enable/disable sshd #开机自启动/开机不启动
ps -ef|grep sshd #进程
netstat -tnlp|grep sshd #端口
ss -naltp|grep sshd
环境假设:
服务器 | 主机名 | IP |
---|---|---|
跳板机 | jumpserver | 192.168.27.192(NET)\192.168.153.131(主机) |
真实业务服务器 | realserver | 192.168.153.130(主机) |
其他:
假设每个开发人员在jumpserver上有自己的账户tom和jerry;且他们只能管理自己的文件
realserver不允许使用默认端口22,防止自动脚本攻击;不允许使用root远程登录
开发人员在realserver上使用code账号登录,密码使用随机工具生成;
1 修改主机名
hostnamectl set-hostname jumpserver
hostnamectl set-hostname realserver
su #立即生效
2 静态IP设置
jumpserver
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.27.192
NETMASK=255.255.255.0
GATEWAY=192.168.27.2
DNS1=192.168.27.2
————————————————————————————————
cp ifcfg-ens33 ifcfg-ens37 #仅主机模式网卡没有配置文件,复制过来
————————————————————————————————
vim ifcfg-ens37
NAME="ens37" #名称需要修改
UUID="10ac807e-4d23-44a6-9885-c0efe3a4cjh7" #后3位字符随便改一下
DEVICE="ens37"
IPADDR=192.168.153.131
NETMASK=255.255.255.0
————————————————————————————————
systemctl restart network
realserver
vim /etc/sysconfig/network-scripts/ifcfg-ens33
BOOTPROTO="static"
IPADDR=192.168.153.130
NETMASK=255.255.255.0
————————————————————————————————
systemctl restart network
扩展:关闭NetworkManager
Linux图形化界面中的网络管理器,有些时候我们设置了静态IP。但是重启网络后,其并没有生效或者和你设置的IP地址不一致,很可能是由于NetworkManager工具的影响。
systemctl stop NetworkManager
systemctl disable NetworkManager
3 关闭firewalld和SElinux
systemctl stop firewalld
systemctl disable firewalld
关闭SElinux
getenforce #查看状态
setenforce 0 #临时关闭
vim /etc/selinux/config #永久关闭
SELINUX=disabled
4 配置yum源
jumpserver配置外网yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.cloud.tencent.com/repo/centos7_base.repo
yum clean all
yum makecache
realserver配置本地yum源(仅主机模式不可上外网)
mkdir /mnt/cdrom
mount -o ro /dev/sr0 /mnt/cdrom
chmod +x /etc/rc.local
echo 'mount -o ro /dev/sr0 /mnt/cdrom' >> /etc/rc.local #永久挂载
————————————————————————————————
vim /etc/yum.repos.d/local.repo
[local]
name=local yum
baseurl=file:///mnt/cdrom
gpgcheck=0
enabled=1
5 在jumpserver上创建用户
#创建前端用户组html
groupadd html
#创建组内用户tom和jerry
useradd -g html tom
useradd -g html jerry
#添加密码
echo 123456 |passwd --stdin tom
echo 123456 |passwd --stdin jerry
6 在jumpserver上创建数据目录并设置权限
#创建数据目录/code/html
mkdir -p /code/html
drwxr-xr-x 2 root root 6 May 21 00:23 html
#更改/code/html的属组为html并添加w权限
chgrp -R html /code/html
chmod -R g+w /code/html
drwxrwxr-x 2 root html 6 May 21 00:23 html
#添加粘滞位t,防止误删除
chmod 1770 /code/html
drwxrwx--T 2 root html 6 May 21 00:23 html
7 在realserver上修改SSH服务端配置文件(完成)
禁止root远程登录、修改端口号为3712;注意选用的端口是否被占用
vim /etc/ssh/sshd_config
PermitRootLogin no #38行
Port 3712 #17行,去掉注释并修改
重启SSH服务,使配置文件生效
systemctl restart sshd
创建code账号
useradd code
echo 123456|passwd --stdin code
测试:在jumpserver上远程连接realserver
[tom@jumpserver code]$ ssh -p 3712 code@192.168.153.130
关于指纹验证
如果你不想要指纹验证,可以修改jumpserver(SSH客户端)的配置文件
vim /etc/ssh/ssh_config
StrictHostKeyChecking no #35行
8 密码生成工具pwgen
在实际生产环境中,其用户密码一定不要手工设置,建议使用专业的密码生成工具如pwgen。
安装pwgen
#pwgen工具在epel源中
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
wget -O /etc/yum.repos.d/epel.repo http://mirrors.cloud.tencent.com/repo/epel-7.repo
yum clean all
yum makecache
————————————————————————————————
yum install pwgen -y #安装
————————————————————————————————
#因为realserver不能连接外网,可以在jumpserver下载再传过去安装
yumdownloader --destdir=/code --resolve pwgen
--destdir 指定下载的软件包存放路径
--resolve 解决依赖关系并下载所需的包
————————————————————————————————
[tom@jumpserver code]$ scp -P 3712 pwgen-2.08-1.el7.x86_64.rpm code@192.168.153.130:/home/code
pwgen基本语法
pwgen 选项参数 长度 生成个数
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]
OPTIONS:
-c 密码中至少包含一个大写字母or –capitalize
-A 密码中不包含大写字母or –no-capitalize
-n 密码中至少包含一个数字or –numerals
-0 密码中不包含数字or –no-numerals
-y 密码中至少包含一个特殊符号or –symbols
-s 生成完全随机密码or –secure
-B 密码中不包含歧义字符(例如1,l,O,0)or –ambiguous
-H 使用SHA1 hash给定的文件作为一个随机种子or –sha1=path/to/file[#seed]
-C 在列中打印生成的密码
-1 不要在列中打印生成的密码,即一行一个密码
-v 不要使用任何元音,以避免偶然的脏话or –no-vowels
pwgen -cnBs1 10 1
9 SSH服务补充——scp命令
用于Linux系统与Linux系统之间进行文件的传输(上传、下载)
基本语法
上传:
scp [选项] 本地文件路径 远程用户名@远程服务器的IP地址:远程文件存储路径
下载:
scp [选项] 远程用户名@远程服务器的IP地址:远程文件路径 本地文件存储路径
-r : 递归上传,主要针对文件夹
-P : 更换了SSH服务的默认端口必须使用-P选项
10 SSH服务补充——踢出用户
查看当前在线用户:w
踢出某个账号:
pkill -kill -t pts/1
SSH免密登录
使得jumpserver与realserver自动连接,无须输入密码
思路:
在jumpserver针对某个用户生成公钥和私钥,再把公钥发送到realserver中,然后追加到authorized_keys文件中
方法有二,分别使用tom和jerry来演示
方法1:比较常用(登录tom账号操作)
①使用tom账号生成他的公钥和私钥
ssh-keygen #一路enter键就可以了
②使用命令ssh-copy-id
把公钥中的内容传输到服务端的~/.ssh/authorized_keys
文件中
ssh-copy-id -p 3712 code@192.168.153.130
③现在可以免密连接了
ssh -p 3712 code@192.168.153.130
方法2:集群常用(登录jerry账号操作)
①使用jerry账号生成他的公钥和私钥
ssh-keygen
②使用scp命令,将jerry的公钥id_rsa.pub
上传到realserver服务端
scp -P 3712 /home/jerry/.ssh/id_rsa.pub code@192.168.153.130:/home/code
③登录realserver服务端,将id_rsa.pub
文件中的内容追加到authorized_keys
[code@realserver ~]$
cat /home/code/id_rsa.pub >> /home/code/.ssh/authorized_keys
④现在可以免密登录了
ssh -p 3712 code@192.168.153.130
扩展:关于authorized_keys和known_hosts文件
共同点:位置相同~/.ssh/
authorized_keys:将本地公钥复制到远程服务端的authorized_keys文件中,就可以实现免密登录了;
known_hosts:做个记录更加方便:它会记录曾经使用SSH服务远程连接过的IP地址;