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服务器初始化工作的主要内容,如果未能解决你的问题,请参考以下文章

linux下ss命令

Linux ss命令详解

Linux服务器初始化工作

每天一个linux命令(57):ss命令

Linux下ss命令的研究

Linux搭建Socks5代理服务器