Linux服务器初始化工作
Posted 浅水深沉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux服务器初始化工作相关的知识,希望对你有一定的参考价值。
本文内容基于AlmaLinux 8系统。
以下为一键运行脚本,此脚本在AlmaLinux8,9系统上测试通过,其它版本系统无法保证全部功能正常运行。推荐仅在全新的服务器操作系统上运行此脚本,如二次执行可能会出现未知错误!
# bash <(curl -L https://github.com/AlexWalker97/Shell/raw/main/linux_init.sh)
一、修改主机名
通常在购买一台新的服务器时服务器Hostname会被云厂商定义为特定的名称,如果需要修改的话可以按照下面步骤进行:
1. 查看系统信息
你可以使用下面指令查看到主机的相关信息:
# hostnamectl
例如下面截图是我的服务器信息:
2. 修改主机名
接下来修改服务器主机名:
# hostnamectl set-hostname 主机名
修改成功并重连ssh后可以看到服务器名称变成了server007:
二、禁用ICMP协议
部分攻击者会使用ping工具来测试服务器是否"存在",我们可以禁用ICMP协议(让我们的服务器不响应其它服务器的ping请求)来保护服务器安全。
在 /etc/sysctl.conf 文件中增加一行 net.ipv4.icmp_echo_ignore_all = 1 (= 号后面的值0表示允许,1表示禁止),之后执行 sysctl -p 使新配置生效:
# echo "net.ipv4.icmp_echo_ignore_all = 1" >> /etc/sysctl.conf
# sysctl -p
此时使用windows cmd工具ping服务器时会发现无法ping通:
三、关闭SELinux
y1s1,SELinux是个好东西,它能为linux服务器带来很强的安全防护功能。但是这个系统总是会和各种软件之间出现莫名其妙的冲突,有些问题排查极为浪费时间。在此直接将SELinux一关了之,再见!
输入getenforce检测selinux是否打开:
# getenforce
如结果如下:
Enforcing或Permissive表示SELinux为已打开(后者表示临时关闭,但重启后还会打开),若结果为Disabled则代表selinux系统未启用,无需关闭。
输入以下指令已永久关闭SELinux:
# setenforce 0
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
四、修改ssh端口
22端口为服务器默认ssh端口,因此易受攻击。我们可以通过修改服务器默认ssh端口的方式来规避风险。
1. 准备端口
首先确认我们需要开放的ssh端口(此处以端口1234为例)未被占用:
安装lsof工具(便捷查看端口占用情况):
# yum -y install lsof
查看端口占用:
# lsof -i:1234
结果如下所示则代表端口未被使用:
2. 防火墙开放端口
执行以下命令开放1234端口:
# firewall-cmd --add-port=1234/tcp --permanent
重启防火墙:
# firewall-cmd --reload
查看防火墙已开放端口:
# firewall-cmd --zone=public --list-ports
结果如下:
3.修改ssh端口
修改文件/etc/ssh/sshd_config:
# vi /etc/ssh/sshd_config
将其中的#Port 22取消注释并修改为Port 1234:
重启sshd服务:
# systemctl restart sshd
我们可以通过sudo lsof -i -P -n | grep LISTEN指令来查看所有系统监听的端口:
之后我们在ssh工具中只能使用1234端口登录服务器。
五、创建新用户
为了安全起见一般不建议直接使用root用户进行操作,为此我们需要创建新的用户,并在需要时给予他们root权限。新用户名最好不要使用user,admin等常见词,以下使用user1仅作为演示。
1. 创建用户
# adduser 用户名
2. 修改密码
为刚刚创建的用户设置密码:
# passwd 用户名
完成后结果如下:
3. 赋予新用户管理员权限
在AlmaLinux 8系统上,用户组 wheel 成员都可以使用sudo以管理员权限访问系统。如果你想要新创建的用户拥有管理员权限,添加用户到wheel用户组:
# usermod -aG wheel 用户名
查看属于wheel组中的用户:
# cat /etc/group |grep wheel
结果如下:
六、禁止root用户远程登陆
这点十分重要。一台暴露在互联网上的服务器每天可能会受到成千上百次的ip扫描或root密码暴力破解,其中远程ssh连接的用户名基本默认为root,因此我们有必要禁止root用户远程登陆,并使用我们上一步创建的新用户名登录。
1. 修改配置:
# vi /etc/ssh/sshd_config
将其中如下图位置所示Permitrootlogin改为no:
2. 重启sshd服务:
# systemctl restart sshd
现在如果我们断开此次ssh会话并再次尝试使用root登录会有如下报错:
这说明修改已经生效。
七、(可选)为服务器开启bbr
TCP BBR是谷歌出品的TCP拥塞控制算法,可以使 Linux 服务器显著地提高吞吐量和减少 TCP 连接的延迟。Linux4.9之后的内核自带bbr算法,如果linux内核版本低于4.9需要升级内核,这篇文章不会涉及到服务器升级内核的内容,仅针对服务器内核>4.9的系统。
1.查看内核
$ uname -r
如下可以看到我们的内核为4.18,因此可以直接开启bbr。
2.开启bbr并设定队列算法为fq_codel(队列算法有很多种如:fq,fq_pie,cake等,这里选择fq_codel演示):
首先进入管理员账户:
$ sudo su
之后执行:
# echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf
# echo "net.core.default_qdisc = fq_codel" >> /etc/sysctl.conf
# sysctl -p
执行这一步时可能会有报错:"sysctl: setting key "net.core.default_qdisc": No such file or directory",我们直接忽略掉错误重启机器。
3.重启电脑后输入如下指令:
$ sysctl net.ipv4.tcp_congestion_control
$ sysctl net.core.default_qdisc
$ lsmod | grep bbr
如果均出现bbr则说明启用成功,如下图所示:
总结
以上是一台新服务器到手后的一些简单安全防护及优化内容,更高级的保护措施(如:fail2ban,蜜罐技术等)之后有需要的话会再汇总成一篇文章,欢迎关注~
Systemd 初始化进程
1、Linux操作系统的开机过程
从BIOS开始 → 进入Boot Loader → 加载系统内核 → 内核进行初始化 → 启动初始化进程。
初始化进程作为Linux系统的第一个进程,它需要完成Linux系统中相关的初始化工作,为用户提供合适的工作环境。红帽RHEL 7系统已经替换掉了熟悉的初始化进程服务System V init,正式采用全新的systemd初始化进程服务。如果读者之前学习的是RHEL 5或RHEL 6系统,可能会不习惯。systemd初始化进程服务采用了并发启动机制,开机速度得到了不小的提升。虽然systemd初始化进程服务具有很多新特性和优势,但目前还是下面4个槽点。
- 槽点1:systemd初始化进程服务的开发人员Lennart Poettering就职于红帽公司,这让其他系统的粉丝很不爽。
- 槽点2:systemd初始化进程服务仅仅可在Linux系统下运行,“抛弃”了UNIX系统用户。
- 槽点3:systemd接管了诸如syslogd、udev、cgroup等服务的工作,不再甘心只做初始化进程服务。
- 槽点4:使用systemd初始化进程服务后,RHEL 7系统变化太大,而相关的参考文档不多,令用户着实为难。
2、systemd与System V init的区别以及作用
无论怎样,RHEL 7系统选择systemd初始化进程服务已经是一个既定事实,因此也没有了“运行级别”这个概念,Linux系统在启动时要进行大量的初始化工作,比如挂载文件系统和交换分区、启动各类进程服务等,这些都可以看作是一个一个的单元(Unit),systemd用目标(target)代替了System V init中运行级别的概念,这两者的区别如表1所示。
表1 systemd与System V init的区别以及作用
System V init运行级别 |
systemd目标名称 |
作用 |
0 |
runlevel0.target, poweroff.target |
关机 |
1 |
runlevel1.target, rescue.target |
单用户模式 |
2 |
runlevel2.target, multi-user.target |
等同于级别3 |
3 |
runlevel3.target, multi-user.target |
多用户的文本界面 |
4 |
runlevel4.target, multi-user.target |
等同于级别3 |
5 |
runlevel5.target, graphical.target |
多用户的图形界面 |
6 |
runlevel6.target, reboot.target |
重启 |
emergency |
emergency.target |
紧急Shell |
如果想要将系统默认的运行目标修改为“多用户,无图形”模式,可直接用ln命令把多用户模式目标文件连接到/etc/systemd/system/目录:
[[email protected] ~]# ln -sf /lib/systemd/system/multi-user.target /etc/systemd/ system/default.target
3、RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比
如果有读者之前学习过RHEL 6系统,或者已经习惯使用service、chkconfig等命令来管理系统服务,那么现在就比较郁闷了,因为在RHEL 7系统中是使用systemctl命令来管理服务的。表2和表3所示RHEL 6系统中System V init命令与RHEL 7系统中systemctl命令的对比,您可以先大致了解一下,后续章节中会经常用到它们。
表2 systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
System V init命令(RHEL 6系统) |
systemctl命令(RHEL 7系统) |
作用 |
service foo start |
systemctl start foo.service |
启动服务 |
service foo restart |
systemctl restart foo.service |
重启服务 |
service foo stop |
systemctl stop foo.service |
停止服务 |
service foo reload |
systemctl reload foo.service |
重新加载配置文件(不终止服务) |
service foo status |
systemctl status foo.service |
查看服务状态 |
表3 systemctl设置服务开机启动、不启动、查看各级别下服务启动状态等常用命令
System V init命令(RHEL 6系统) |
systemctl命令(RHEL 7系统) |
作用 |
chkconfig foo on |
systemctl enable foo.service |
开机自动启动 |
chkconfig foo off |
systemctl disable foo.service |
开机不自动启动 |
chkconfig foo |
systemctl is-enabled foo.service |
查看特定服务是否为开机自动启动 |
chkconfig --list |
systemctl list-unit-files --type=service |
查看各个级别下服务的启动与禁用情况 |
以上是关于Linux服务器初始化工作的主要内容,如果未能解决你的问题,请参考以下文章