前言

博客的最近一次更新已经是一个多月以前了,最近一次文章的发布还是在四个月以前,我必须承认荒废了对博客的经营。

最近开始慢慢从wyf师兄手中接过实验室服务器管理的担子,说实在的有些惶恐。我对Linux系统的熟悉程度恐怕仅局限于在自己的普通权限账号上跑实验不遇到问题罢了,要管理整个服务器还是压力颇大,和wyf师兄对服务器的玩转程度更是相差甚远。

不过既然做了就还是踏踏实实做好,所以就记录一下应该干什么、怎么干。计划慢慢补充这篇笔记,供自己回忆使用。

(本人才疏学浅,若有理解不当之处烦请指正)

正文

更新内核

如果接手的服务器内核版本比较落后就需要更新了:

  • 首先可以通过uname -a获取内核版本和发布时间的信息;

  • 其次运行sudo yum update进行更新,这个过程可能比较长;

  • 更新内核之后,可能并不会直接用新版的内核,通过sudo awk -F\' '$1=="menuentry " {print $2}' /etc/grub2.cfg查看现有内核的启动顺序,可能得到如下输出(从0开始编号)

    1
    2
    3
    CentOS Linux (3.10.0-1160.102.1.el7.x86_64) 7 (Core)
    CentOS Linux (3.10.0-957.el7.x86_64) 7 (Core)
    CentOS Linux (0-rescue-ec876c21f6b0491a85e304065e59a6f7) 7 (Core)
  • 通过sudo grub2-set-default x指定默认启动项

  • sudo reboot重启

  • uname -a查看内核是否更新

更新显卡驱动

如果机器上的nVidia驱动版本也比较落后了同样需要更新:

  • 访问nVidia驱动下载网址输入机器信息获取nVidia驱动下载连接,下载得到.run文件
  • sh xxx.run安装驱动,会提示你卸载旧版的驱动,很方便就安装好新版驱动了

设置密码强度

  • 安装 pwquality 模块(如果尚未安装)

    1
    2
    sudo apt-get install libpam-pwquality    # 对于基于 Debian 的系统
    sudo yum install libpwquality # 对于基于 Red Hat 的系统
  • 编辑 pwquality.conf 文件:sudo vim /etc/security/pwquality.conf,添加或修改参数,如:

    1
    2
    3
    minlen = 12
    minclass = 3
    maxrepeat = 3
  • 配置 PAM 使用 pwquality:

    编辑 /etc/security/pam_common-password 文件,确保使用 pwquality 模块。找到或添加类似的行:

    1
    password requisite pam_pwquality.so retry=3

设置密码更新时间

  • sudo vim /etc/login.defs

  • 配置参数:

    1
    2
    3
    4
    5
    6
    7
    8
    # 密码的最大有效期
    PASS_MAX_DAYS 90
    # 是否可修改密码,多少天后可修改
    PASS_MIN_DAYS 0
    # 密码最小长度,pam_pwquality设置优先
    PASS_MIN_LEN 8
    # 密码失效前多少天在用户登录时通知用户修改密码
    PASS_WARN_AGE 15

禁止root远程登录

  • sudo vim /etc/ssh/sshd_config
  • 找到#PermitRootLogin yes
  • 改成PermitRootLogin no
  • 重启ssh服务使更改生效:sudo systemctl restart sshd

安装fail2ban防止ssh暴力破解密码

fail2ban的主要功能就是检测是否有ip在短时间内有大量尝试登录服务器而失败的行为,如果检测到就禁止ip近期访问,起到防止服务器被暴力破解密码的作用。(我在Ubuntu系统上装fail2ban挺顺利的,但是在CentOS上踩坑了,记录一下)

  • 首先我们需要在CentOS上安装fail2ban(fail2ban 可通过 EPEL yum 存储库获得,因此,我们必须安装 epel-release 才能访问 EPEL yum 存储库):sudo yum install -y epel-release

  • 为 yum 存储库构建缓存:sudo yum makecache fast

    这时候就报错了,大概是这样

    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
    26
    One of the configured repositories failed (Unknown),
    and yum doesn't have enough cached data to continue. At this point the only
    safe thing yum can do is fail. There are a few ways to work "fix" this:

    1. Contact the upstream for the repository and get them to fix the problem.

    2. Reconfigure the baseurl/etc. for the repository, to point to a working
    upstream. This is most often useful if you are using a newer
    distribution release than is supported by the repository (and the
    packages for the previous distribution release still work).

    3. Disable the repository, so yum won't use it by default. Yum will then
    just ignore the repository until you permanently enable it again or use
    --enablerepo for temporary usage:

    yum-config-manager --disable <repoid>

    4. Configure the failing repository to be skipped, if it is unavailable.
    Note that yum will try to contact the repo. when it runs most commands,
    so will have to try and fail each time (and thus. yum will be be much
    slower). If it is a very temporary problem though, this is often a nice
    compromise:

    yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=true

    Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again

    这时候去网络上搜,帖子都很老了,都是201x年的,很多会让你检查DNS配置、修改/etc/yum.repos.d/CentOS-Base.repo里面的网址配置,建议最好不要乱改。

    我们是下载了epel-release之后才报错的,报错的信息也是epel/x86_64找不到,其实就是访问不到epel yum存储库,尝试用代理也不行。解决方法很简单:

    • /etc/yum.repos.d目录下面决定yum下载的路径
    • CentOS-Base.repo决定基础的库
    • epel.repo决定epel的库
    • 可以到阿里云的镜像站:repo安装包下载_开源镜像站-阿里云 (aliyun.com),里面有对应的配置文件,直接照着改,就可以访问阿里云的资源进行yum的下载了
    • 我把CentOS-Base.repoepel.repo都改了
    • 记得sudo yum clean allsudo yum makecache fast
  • 下载相关安装包:sudo yum install -y fail2ban fail2ban-firewalld fail2ban-systemd

  • 启用并启动 fail2ban.service 。

    1
    2
    [root@fail2ban-01 ~] systemctl enable fail2ban.service
    [root@fail2ban-01 ~] systemctl start fail2ban.service
  • 了解 fail2ban 配置文件:

    fail2ban 配置存在于 /etc/fail2ban//etc/fail2ban/jail.d/

    **fail2ban 首先读取 .conf 文件,然后读取 .local 文件
    *因此,*.conf 文件中的所有设置都被 .local 文件中的设置覆盖

    因此,最好的做法是创建一个自定义的 jail.local 文件,而不是编辑默认的 jail.conf 文件。

    将默认的 jail.conf 文件复制为 jail.local,并编辑

    sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

  • 编辑基础配置参数:

    简单来讲就是如果某个ip在findtime时间内访问失败了maxretry次,就会被禁止bantime时间

    1
    2
    3
    bantime 它是禁止主机的时间(以秒为单位)。
    findtime 它是fail2ban 必须捕获maxretry 失败以禁止主机的时间跨度。
    maxretry 它是主机被禁止之前的失败次数。
  • 配置 fail2ban 以保护 SSH 服务:

    1
    2
    [root@fail2ban-01 ~] sed -i "/^\[sshd\]/a\enabled=true" /etc/fail2ban/jail.local
    [root@fail2ban-01 ~] systemctl restart fail2ban.service # 重启服务
  • 检查fail2ban服务状态:sudo systemctl status fail2ban

防火墙管理

Ubuntu系统的防火墙是ufw,CentOS系统的防护墙是firewalld,管理服务器需要关闭22以外的非必要端口,对于需要开端口监听服务的同学再额外开

登录欢迎信息管理

编辑/etc/motd即可

开账号

1
2
3
sudo useradd -m xxx  # 添加用户并创建对应目录
sudo passwd xxx # 设置密码
sudo chmod 700 /home/xxx # 设置用户目录仅自己可见