配置Centos7
查看操作系统相关信息
1 | 查看到的是瞬态的(Tansient hostname) |
修改主机名
静态的(Static hostname)
“静态”主机名也称为内核主机名,是系统在启动时从/etc/hostname 自动初始化的主机名。
瞬态的(Tansient hostname)
“瞬态”主机名是在系统运行时临时分配的主机名,例如,通过 DHCP 或 mDNS 服务器分配。
灵活的(Pretty hostname)
“灵活”主机名也有人叫做“别名”主机名。
“灵活”主机名则允许使用自由形式(包括特殊/空白字符)的主机名,以展示给终端用户(如 xh01@f5)。
“静态”主机名和“瞬态”主机名都遵从作为互联网域名同样的字符限制规则。在 CentOS 7 中,有个叫 hostnamectl 的命令行工具,它允许你查看或修改与主机名相关的配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21//查看一下当前主机名的情况,查看全部三种主机名
hostnamectl
//或者,查看全部三种主机名
hostnamectl status
//只查看静态、瞬态或灵活主机名,分别使用--static,--transient或--pretty选项
[root@xh00 ~]# hostnamectl --static
xh00
[root@xh00 ~]# hostnamectl --transient
xh01
[root@xh00 ~]# hostnamectl --pretty
//或者,查看到的是瞬态的(Tansient hostname)
hostname
//或者查看主机名配置文件,查看到的是静态的(Static hostname)
cat /etc/hostname
临时有效
只能临时修改的主机名,当重启机器后,主机名称又变回来了。
1
hostname xh01
永久生效:hostnamectl
一旦修改了静态主机名,/etc/hostname 将被自动更新。然而,/etc/hosts 不会更新以保存所做的修改,所以你每次在修改主机名后一定要手动更新/etc/hosts,之后再重启 CentOS 7。否则系统再启动时会很慢。
1
2
3
4
5
6
7//永久性的修改主机名称,重启(注销重新登录后可查看)后能保持修改后的。
hostnamectl set-hostname xxx
//删除hostname
hostnamectl set-hostname ""
hostnamectl set-hostname "" --static
hostnamectl set-hostname "" --pretty
永久生效:修改配置文件
修改配置文件/etc/hostname 来实现主机名的修改。把该文件内容第一行替换成自己想要的主机名重启即可。
1
2[root@hadoop01 hadoop]# cat /etc/hostname
hadoop01
永久生效: nmtui
通过 nmtui 修改,之后重启 hostnamed
1
2nmcli general hostname servername
systemctl restart systemd-hostnamed还可以通过 nmtui 进入图形界面来修改主机名。将光标通过键盘的上下键移动到“设定系统主机名”菜单处,按下回车键。
此时,屏幕出现“设定主机名”选项卡,输入需要设定的主机名,通过键盘方向键将光标移动到“确定”处,回车键确定即可完成主机名的修改。
Centos 配置静态 IP
在 rhel8(含 centos8)上,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,没有传统的 network.service。因此只能通过其它方法进行网络配置,包括 NM 命令工具集。换言之,在 rhel8 上,必须开启 NM,否则无法使用网络。
手动配置文件静态 IP
1 | [root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33 |
修改如下:
1 | [root@centos ~]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 |
1 | 重启 network centos7 |
vmware 的配置
修改 NAT 模式
我习惯删除多余不用的模式,修改子网 ip 的地址段
查看网关
点击上图的 NAT 设置:得到网关地址为 192.168.61.2
Vmware Fusion 配置
配置自定义网络连接
修改虚拟机的网络适配器
注意 : 这里的网关地址用子网 IP , 最后一位为 2, bigsur 版本为 1,具体网关查看方式
cat /Library/Preferences/VMware\ Fusion/vmnet2/nat.conf
重启
发现 IP 改变了,也能访问外网
Hyper-V 虚拟网络设置
打开 Hyper-V 上的虚拟机交换机管理器:
新建虚拟机网络交换机
如图,虚拟机交换机管理-> 新建虚拟机网络交换机, 勾选外部网络,如下
选择外部网络会出现网桥
使用内部网络需要共享网络
使用上一步创建的外部网络
配置网络
共享网络
以上设置好后就重启虚拟机,就可以在本地物理机访问虚拟机了,如下我们 ping 下刚才的 192.168.137.45,可见是可以 ping 得通的,这时就可以使用 xshell 等终端进行连接操作了:
Centos 配置 yum 源
清华大学镜像仓库(推荐)
阿里镜像
https://developer.aliyun.com/mirror/centos
1
2
3
4
5# CentOS 6
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-6.repo1
2
3
4
5# CentOS 7
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo1
2
3
4
5# CentOS 8
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
或者
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo非阿里云 ECS 用户会出现 Couldn't resolve host 'mirrors.cloud.aliyuncs.com' 信息,不影响使用。用户也可自行修改相关配置: eg: sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
1
2
3
4
5
6
- ```sh
yum clean all # 清除系统所有的 yum 缓存
yum makecache # 生成 yum 缓存
yum repolist all # 查看所有的 yum 源
yum repolist enabled # 查看可用的 yum 源# yum update 不要随便执行,会更新系统内核 # 升级所有包,改变软件设置和系抄统设置, 系统版本内核都升级。 yum -y update # 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变。 yum -y upgrade
1
2
3
4
5
6
7
## 防火墙
### 打开防火墙
```bash
systemctl start firewalld # 启动,
关闭防火墙
1 | systemctl stop firewalld # 关闭 |
重启防火墙
1 | service firewalld restart #重启 |
设置开机启动
1 | systemctl enable firewalld # 开机启动 |
取消开机启动
1 | systemctl disable firewalld # 取消开机启动 |
查看防火墙状态
1 | firewall-cmd --state |
查看防火墙规则
1 | firewall-cmd --list-all |
防火墙中添加应用
1 | firewall-cmd --add-service = postgresql --permanent |
防火墙添加端口
1 | firewall-cmd --add-port = 9527/tcp --permanent |
添加参数介绍
1 | firewall-cmd:是 Linux 提供的操作 firewall 的一个工具; |
selinux
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
关闭
1 | #查看 |
查看SELinux状态
1 | # getenforce 用这个命令检查 |
Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系
Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正确会发出警告
Disabled:关闭模式。SELinux并没有实际运行
ssh
Secure Shell
(安全外壳协议,简称SSH
)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH
通过在网络中创建安全隧道来实现SSH
客户端与服务器之间的连接。虽然任何网络服务都可以通过SSH
实现安全传输,SSH
最常见的用途是远程登录系统,人们通常利用SSH
来传输命令行界面和远程执行命令。telnet
使用23
号端口,所有的信息,包括用户名和密码都是明文传输;而ssh
使用22
号端口,所有的信息都会被加密传输,安全性得到了很大的提高。
ssh
使用十分简单,选择以什么用户连接哪台机器,然后输入密码即可:1
2$ssh user@hostname
user@hostname's password:
加密方式
ssh
的主要有点就是安全性,安全性依赖于加密方式,现在主要的加密方式有两种:对称加密和非对称加密。
- 对称加密使用同一个密钥来进行加密和解密,这样在传输时是安全可靠的,但是如何安全的保存密钥呢,在集群中,客户端的数量巨大,一旦任意一个客户端的密钥被窃取,那么整个系统的安全性也不复存在。
- 由于对称加密的这个弊端,产生了非对称加密,非对称加密中有两个密钥:公钥和私钥。公钥由私钥产生,但却无法推算出私钥;公钥加密后的密文,只能通过对应的私钥来解密。
非对称加密的登录流程
初始状态:终端要登录Server
服务器,发起连接请求ssh work@server.com
- 服务端运行有
ssh
服务,并持续监听22
号端口,因此可以生成一对公钥和私钥;此时将公钥返回给客户端 - 客户端使用公钥,对登录密码进行加密,(如服务器
work
用户密码为xxx
),生成公钥加密字符串 - 客户端将公钥加密字符串发送给服务端
- 服务端使用私钥,解密公钥加密字符串,得到原始密码
- 校验密码是否合法(此为本机
work
密码) - 返回登录结果给客户端:成功登录或密码错误
在非对称加密中,由于只有公钥会被传输,而私钥是服务端本地保存,因此即便公钥被监听,也无法拿到原始密码,从而登录服务器。
中间人攻击
在非对称加密中可以有效保护登录密码不被泄漏,但这是在建立连接到真实服务器的情况下。设想一下,如果供给者并不监听密码或公钥,而是直接伪装成服务器呢.
存在Hacker
服务器劫持了你的ssh
建连请求(如通过DNS
劫持等方式),导致你与Hacker
机器的连接一切正常,因此它能拿到你的明文密码,并通过明文密码来攻击真实的服务端。
SSH
采用了非对称的加密方式,是怎么解决这个问题的呢?
通过让我们肉眼比对来判断目标服务器是否是真实服务器
用
fingerprint
(公钥指纹)代替key
,主要是key
过于长(RSA
算法生成的公钥有1024
位),很难直接比较。所以,对公钥进行hash
生成一个128
位的指纹,这样就方便比较了。
1 | [root@hadoop01 hadoop]# ssh hadoop@192.168.61.45 |
SSH免密登录
使用ssh
登录远程服务器了,但是每次登录都要输入密码,比较麻烦。ssh
提供一种免密登录的方式:公钥登录。
- 在客户端使用
ssh-keygen
生成一对密钥:公钥+私钥 - 将客户端公钥追加到服务端的
authorized_key
文件中,完成公钥认证操作 - 认证完成后,客户端向服务端发起登录请求,并传递公钥到服务端
- 服务端检索
authorized_key
文件,确认该公钥是否存在 - 如果存在该公钥,则生成随机数
R
,并用公钥来进行加密,生成公钥加密字符串pubKey(R)
- 将公钥加密字符串传递给客户端
- 客户端使用私钥解密公钥加密字符串,得到
R
- 服务端和客户端通信时会产生一个会话
ID(sessionKey)
,用MD5
对R和SessionKey
进行加密,生成摘要(即MD5
加密字符串) - 客户端将生成的
MD5
加密字符串传给服务端 - 服务端同样生成
MD5(R,SessionKey)
加密字符串 - 如果客户端传来的加密字符串等于服务端自身生成的加密字符串,则认证成功
- 此时不用输入密码,即完成建连,可以开始远程执行
shell
命令了
1 | ssh-genkey 是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。常用的参数为: |
例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20# 第一步: 在本地机器上使用 ssh-keygen 产生公钥私钥对
[hadoop@hadoop01 ~]$ ssh-keygen -t rsa -P password
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
/home/hadoop/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256: ld27QVjFQSpPw5YeQFArbZoQrXzWxRDMGaRbJuUozCk hadoop@hadoop01
The key's randomart image is:
# 第二步: 用 ssh-copy-id 将公钥复制到远程机器中, 第一次需要密码登录
[hadoop@hadoop01 ~]$ ssh-copy-id username@hostname
# ERROR: No identities found
# 当没有值传递的时候或者 如果 ~/.ssh/identity.pub 文件不可访问(不存在), ssh-copy-id 将显示上述的错误信息
# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 23 username@hostname
# -p 制定端口
# -i 指定公钥文件
对不同服务器的配置
我们的服务器会有很多的用户,如果所有的用户都用同一份密钥,可能就没办法划分权限或者区分用户,如多个用户提交git
就需要按照用户名来生成密钥,用于区分用户。同时你可能也希望针对不同的服务器使用不同的密钥对,因此需要config
配置文件来配置针对不同服务器的配置:
1 | $vim ~/.ssh/config |
这样在连接不同的服务器时,就会使用不同的密钥文件来登录。在客户端生成密钥对之后,将公钥追加到服务器的authorized_keys
文件中即可。此时,即可免密登录服务器。
1 | ... |
私钥的安全性
假设你已经实现了服务器集群的免密登录,那么如果你的一台客户端被攻击成功了,那么整个集群的安全性便荡然无存了。因此,我们有时还需要对密钥做安全性保障,即设置私钥密码:
1 | // 使用 rsa 方法加密,生成 test 密钥对,私钥密码为 123456 |
此时,各机器仍然是免密登录,但是需要你输入私钥密码:
1 | $ssh work@a.baidu.com |
scp传输文件
scp(secure copy)
是linux
系统下基于ssh
登录进行安全的远程文件拷贝的命令。与scp
相似的命令是cp
,但是cp
只能本机拷贝而不能跨服务器,因此需要与ssh
合作构成scp
命令。远程拷贝的命令还有rsync
,scp
消耗资源少,不会提高多少系统负荷,在这一点上,rsync
就远远不及它了。rsync
比scp
会快一点,但当小文件多的情况下,rsync
会导致硬盘I/O
非常高,而scp
基本不影响系统正常使用。
传递文件到远程
1
scp local_file remote_username@remote_ip: remote_file
传递文件夹到远程
1
scp -r local_folder remote_username@remote_ip: remote_folder
复制远程文件到本地(只是调换下文件参数位置即可)
1
scp remote_username@remote_ip: remote_file local_file
我们直接使用
scp
来跨机器拷贝文件,会提示输入密码:1
2
3# 提示输入 server 端服务器的 work 用户密码
[work@client.com ~]$ scp test.php work@server.com:/home/work
work@server.com's password:scp
是先使用ssh
连接服务端机器后,再使用网络来执行远程拷贝(cp)
。参考
ssh
的过程:1
2
3# 同样的提示输入 server 端服务器的 work 用户密码
[work@client.com ~]$ ssh work@server.com
work@server.com's password:
加入sudo权限
CentOS7给普通用户配置sudo权限,即把普通用户加入wheel用户组
在CentOS系统中,默认情况下,wheel用户组成员被授予sudo权限。
1
2
3[root@localhost ~]# cat /etc/sudoers
## Allows people in group wheel to run all commands
%wheel ALL =(ALL) ALL授予 sudo 权限
1
2
3
4
5
6usermod -aG wheel user
# -g <群组> 修改用户所属的群组。
# -G <群组> 修改用户所属的附加群组。
# -a 表示在原来所属组的基础上追加
-G 修改当前次要组
-G -a 是增加新的次要组检查用户是否添加进 wheel 组
1
2
3
4
5$ lid -g wheel
# 显示用户 id 和组 id 信息
# id 命令可以显示真实有效的用户 ID(UID) 和组 ID(GID)。
# UID 是对一个用户的单一身份标识。组 ID(GID)则对应多个 UID。
$ id username
修改sudo配置文件,在root下执行,否则请加sudo
1
2
3
4
5# 打开 sudo 配置文件
visudo
# 找到下面这两行,并在下面新增红色部分
root ALL =(ALL) ALL
username ALL =(ALL) ALL
校准时间
使用ntp校时包:
1
2yum install -y ntp
ntpdate cn.pool.ntp.org