配置Centos7
查看操作系统相关信息
1 | uname -a //查看到的是瞬态的(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 主机名
永久生效: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进入图形界面来修改主机名。将光标通过键盘的上下键移动到“设定系统主机名”菜单处,按下回车键。
此时,屏幕出现“设定主机名”选项卡,输入需要设定的主机名,通过键盘方向键将光标移动到“确定”处,回车键确定即可完成主机名的修改。
修改主机名与ip映射
域名和ip地址的映射
windows C:\Windows\System32\drivers\etc
linux:
vi /etc/hosts
添加
1
2
3127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.61.101 hdp1测试:
ping hdp1
Centos7配置静态IP
在rhel8(含centos8)上,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,没有传统的network.service。因此只能通过其它方法进行网络配置,包括NM命令工具集。换言之,在rhel8上,必须开启NM,否则无法使用网络。
手动配置文件静态IP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23[root@centos ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
- BOOTPROTO="dhcp"
+ BOOTPROTO="static"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth0"
UUID="c3766d2e-1c20-4ff0-a984-c8f2b6ba61fd"
DEVICE="eth0"
ONBOOT="yes"
+ IPADDR=192.168.61.45
+ NETMASK=255.255.255.0
+ GATEWAY=192.168.61.2
+ DNS1=192.168.61.2
+ DNS2=8.8.5.5
+ PREFIX=24重启网卡
1
2
3
4
5
6
7
8
9service 方式重启网络服务
service network restart
Centos8 重新回载网络配置
[root@centos ~]# nmcli c reload
[root@centos ~]# nmcli c #查看
NAME UUID TYPE DEVICE
docker0 a2b07a6c-142a-4f39-b13e-1b1a2f5cdff0 bridge docker0
eth0 c3766d2e-1c20-4ff0-a984-c8f2b6ba61fd ethernet eth0
Centos8重启网卡
不能使用service和systemctl
方法:
nmcli c reload
+网卡名 例:nmcli c reload eth0
如果不行,可尝试以下命令
1
2
3
4
5
6
7
8
9# 重载所有ifcfg或route到connection(不会立即生效)
nmcli c reload ifcfg-xxx
# 重载指定ifcfg或route到connection(不会立即生效)
nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX
nmcli c load /etc/sysconfig/network-scripts/route-ethX
# 立即生效connection,有3种方法
nmcli c up ethX
nmcli d reapply ethX
nmcli d connect ethX重启主机后发现网卡不能开机自启,需要手动启动网卡:
1
nmcli connection modify ens33 connection.autoconnect yes
防火墙
打开防火墙
1 | 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的一个工具; |
系统的启动级别
查看当前的系统启动级别(0-6) :
runlevel
1
2
3
4
5
6
7
8
9
10
11
12
13> 0:关机
> 1:单用户
> 2:多用户,不能访问网络
> 3:多用户,能访问网络(全功能,不带图形界面,速度快)
> 4:未使用
> 5:带有图形界面系统模式
> 6.重启修改启动级别
1
2
3
4# vim /etc/inittab
id:3:initdefault:
# 重启
reboot
selinux
SELinux 主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
关闭
1 | #查看 |
查看SELinux状态
1 | # getenforce 用这个命令检查 |
Enforcing:强制模式。代表SELinux在运行中,且已经开始限制domain/type之间的验证关系
Permissive:宽容模式。代表SELinux在运行中,不过不会限制domain/type之间的验证关系,即使验证不正确,进程仍可以对文件进行操作。不过如果验证不正确会发出警告
Disabled:关闭模式。SELinux并没有实际运行
目录挂载
将一个文件系统的顶层目录挂到另一个文件系统的子目录上,使它们成为一个整体,称为挂载。把该子目录称为挂载点。
- 挂载源:设备文件
- 挂载点: 存在的目录
临时挂载:
mount -t iso9660 -o ro/loop 挂载源 挂载点
永久挂载:
vim /etc/fstab
卸载: umount 挂载点
注意:
- 挂载点必须是一个目录。
- 一个分区挂载在一个已存在的目录上,这个目录可以不为空,但挂载后这个目录下以前的内容将不可用。
- mount命令没有建立挂载点的功能,因此你应该确保执行mount命令时,挂载点已经存在。(不懂?说白了点就是你要把文件系统挂载到哪,首先要先建上个目录。)
挂载命令
格式:
mount [-参数][设备名称][挂载点]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22# -t <文件系统类型> 指定设备的文件系统类型,常见的有:
minix linux最早使用的文件系统
ext2 linux目前常用的文件系统
msdos MS-DOS的fat,就是fat16
vfat windows98常用的fat32
nfs 网络文件系统
iso9660 CD-ROM光盘标准文件系统 -> 挂载镜像文件
ntfs windows NT 2000的文件系统
hpfs OS/2文件系统
auto 自动检测文件系统
# -o<选项> 指定挂载文件系统时的选项。有些也可用在/etc/fstab中。常用的有
codepage=XXX 代码页 codepage指定文件系统的代码页,简体中文中文代码是936;
iocharset=XXX 字符集 iocharset指定字符集,简体中文一般用cp936或gb2312。
ro 以只读方式挂载
rw 以读写方式挂载
nouser 使一般用户无法挂载
user 可以让一般用户挂载设备
# 例子
mount -t iso9660 /dev/cdrom /mnt/cdrom
mount -o ro /dev/hda1 /mnt
自动挂载
- 在/etc目录下有个fstab文件,它里面列出了linux开机时自动挂载的文件系统的列表。
- 第一列:**/dev/cdrom**:挂载源,要挂在的磁盘分区或者存储设备,或者文件系统
- 第二列:**/mnt/cdrom**:挂载点,挂载位置
- 第三列:iso9660:文件系统类型,ext4文件系统,swap表示交换分区,……
- 第四列:defaults:挂载参数
- 第五列:0:表示dump选项,dump工具通过这个选项位置上的数字来决定文件系统是否需要备份。如果是0,dump就会被忽略,事实上大多数的dump设置都是0
- 第六列:0:读取文件系统时候的检查顺序,允许的数字是0,1,2,根目录应当获得最高的优先权 1, 其它所有需要被检查的设备设置为2,0表示不检查
启动apache http
apache http服务器
- 默认端口80
- 资源文件的根目录
/var/www/html
- 配置文件
/etc/httpd/
下载
1
2
3yum install -y httpd
# 服务的启动与关闭
service httpd start/stop http查看httpd服务
1
2
3service --status-all | grep httpd
service httpd status
本地yum 源
yum仓库服务器本质上就是一台http服务器,服务器的目录中放置了rpm包,及rpm包的索引信息文件,即可为yum客户端提供rpm文件下载
准备一个apache http服务器, 在httpd服务的web目录中放入rpm库,
1
2
3
4
5
6# 将centos安装光盘中的rpm库放入:
mkdir /var/www/html/centos
# 拷贝
cp -r /mnt/cdrom/ /var/www/html/centos/
# 上面这种方式比较浪费空间,可以不用拷贝,其实只要创建一个软连接即可
ln -s /mnt/cdrom /var/www/html/centos用浏览器访问一下httpd服务,看看是不是能看到这些东西
地址:http://192.168.123.202/centos配置yum客户端repo地址文件,将本地http服务器加入repo地址
1
2
3cd /etc/yum.repos.d/
# 将内置的源全部disable掉
rename .repo .repo.bak *新建一个repo源
1
2
3
4
5
6
7
8vi CentOS-Local.repo
[CentOS-Local]
name=CentOS-Local
baseurl=http://192.168.123.202/centos/cdrom0
http://192.168.123.202/centos/cdrom1
gpgcheck=0
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6检查我们自定义的源是否生效,使用命令:
yum repolist
再接下来,就可以使用yum像从公网安装软件一样在内网服务器上下载软件进行安装了
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
命令了
- 在客户端使用
ssh-genkey
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26ssh-genkey是生成密钥的工具,执行完成后生成公钥和密钥,这两个文件会默认保存在~/.ssh/路径下。常用的参数为:
-t: 指定生成密钥类型(rsa、dsa)。默认为rsa
-f: 指定存放私钥的文件,公钥文件名为私钥文件名加.pub后缀。默认为id_rsa
-P: 指定passphrase(私钥的密码),用于确保私钥的安全。默认为空
-C: 备注。默认为user@hostname
我们直接执行来生成密钥,所有的参数都可以为空,也就是一直回车确认:
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Created directory '/home/hadoop/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
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:DFFUH19Nv9PkOpZ3HpvttCawBXJrKFttIWHYQLeBjTg hadoop@hadoop01
## 此时,生成的文件在~/.ssh/目录下,我们会看到这些文件:
id_rsa // 私钥文件
id_rsa.pub // 公钥文件
authorized_keys // 存放客户端公钥的文件
known_hosts // 确认过公钥指纹的可信服务器列表的文件
config // 指定不同域名使用哪个密钥的配置文件
## 因为一台机器即能是客户端,又能是服务端,因此同时存在authorized_keys(在该机器为服务端时使用)和Known_hosts(在该机器为客户端时使用)。例子
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
JDK安装
查询自带的jdk
1
2rpm -qa | grep java
rpm -e java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64 --nodeps下载JDK文件,解压:
/usr/loc
|/opt
配置环境变量:
1
2
3vim /etc/profile
export JAVA_HOME=/usr/local/jdk1.8.0_73
export PATH=$JAVA_HOME/bin执行配置文件
source /etc/profile
安装Mysql
查询卸载已安装
1
2rpm -qa | grep -i mysql
rpm -e 程序名安装服务器端
1
rpm -ivh MySQL-server-5.6.26-1.linux_glibc2.5.x86_64.rpm
安装客户端
1
rpm -ivh MySQL-client-5.6.26-1.linux_glibc2.5.x86_64.rpm
启动服务
1
2
3service mysql start
# 查看网络接口
netstat -nltp配置
1
2
3
4
5
6
7
8
9
10# 获取初始密码
cat /root/.mysql_secret
# mysql配置文件
cp /use/my.cnf /etc/my.cnf
# 启动mysql, 设置密码
set PASSWORD=PASSWORD('root');
# 增加远程登录权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
# 刷新权限
FLUSH PRIVILEGES;