文章目录

  • 前言
  • 一、账号安全控制
    • 1.账号安全措施
      • 1.1 系统账号清理
      • 1.2 密码安全控制
      • 1.3 命令历史限制
    • 2.用户切换与提权
      • 2.1 切换用户(su)
      • 2.2 提升执行权限(sudo)
    • 3.PAM 安全认证
      • 3.1 PAM 及其作用
      • 3.2 PAM 认证原理
      • 3.3 PAM认证的构成
      • 3.4 PAM控制类型
  • 二、系统引导和登录控制
    • 1.开关机安全控制
    • 2.终端登录安全控制
    • 3.网络扫描(NMAP)
  • 总结

前言

Linux 作为一种开放源代码的操作系统,Linux 服务器以其安全、高效和稳定的显著优势而得以广泛应用。下面是我总结的一些有关 Linux 系统安全优化方面的基础知识,希望能给刚接触 Linux 系统的小白一些帮助。


一、账号安全控制

用户账号是计算机使用者的身份凭证或标识,每一个要访问系统资源的人,必须凭借其用户账号才能进入计算机。
在 Linux 系统中,提供了多种机制来确保用户账号额正当、安全使用。

1.账号安全措施

1.1 系统账号清理

  • 将非登录用户的 Shell 设为 /sbin/nologin
  • 锁定长期不使用的账号
  • 删除无用的账号
  • 锁定账号文件passwd、shadow

命令如下

[root@localhost ~]# usermod -L zhangsan      #锁定账号
[root@localhost ~]# passwd -S zhangsan       #查看状态
[root@localhost ~]# usermod -U zhangsan      #解锁账号
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow       #锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow          #查看为锁定的状态
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow       #解锁文件

在账号文件被锁定的情况下,其内容将不允许变更,因此无法添加、删除账号,也不能更改用户的密码、登录 Shell、宿主目录等属性信息。

1.2 密码安全控制

在不安全的网络环境中,为了降低密码被猜出或被暴力破解的风险,用户应养成定期更改密码的习惯,避免长时间使用同一个密码。

  • 我们可以使用 chage 命令设置密码时限,例如执行下面的操作可以将密码的有效期设置为30天。
[root@localhost ~]# chage -M 30 lisi             #适用于已有的用户
[root@localhost ~]# vim /etc/login.defs          #使用于新建的用户
PASS_MAX_DAYS   30
  • chage 命令还可以强制让用户在下次登录的时候重设密码,操作如下。
[root@localhost ~]# chage -d 0 zhangsan
[root@localhost ~]# cat /etc/shadow |grep zhangsan

1.3 命令历史限制

Shell 环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的危险。只要获得用户的命令历史文件,该用户的命令操作过程将一览无余,如果里面有曾经输入的密码,那么意味着服务器的安全又多了一个隐患。

  • 我们可以自己定义历史命令最多纪录多少条,如下,设置最多纪录200条命令。
[root@localhost ~]# vim /etc/profile                          #适用于新登录用户
HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200                       #适用于当前用户
  • 除此之外,我们还可以修改用户宿主目录中的 ~/.bash_logout 文件,添加清空历史命令的操作语句,这样的话当用户退出已登录的 Bash 环境后,所记录的历史命令将会自动清空。
[root@localhost ~]# vim ~/.bash_logout
history -c                                #添加清空历史命令的语句
clear

或者

[root@localhost ~]# vim .bash
echo ' ' > ~/.bash_history
  • 除了设置自动清除之外还可以设置闲置超时时间,当超过指定的时间没有任何输入时自动注销终端,这样可以避免当管理员不在时其他的人对服务器误操作风险。
[root@localhost ~]# vim /etc/profile           #适用于新登录用户
export TMOUT=600[root@localhost ~]# export TMOUT=600           #适用于当前用户

2.用户切换与提权

大多数情况下并不建议用户直接以 root 用户进行登录服务器。这样可以大大减少因误操作而导致的破坏,也降低了密码在不安全的网络中泄露的风险。所以我们就需要为普通用户提供一种身份切换或权限的提升,以便在必要的时候执行管理任务。

2.1 切换用户(su)

  • 使用 su 命令可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要对目标的密码进行验证(root 用户切换到其他用户不需要)。
[gulei@localhost ~]$su - root
密码:                                        #输入root 用户的密码
上一次登录:四 8月 19 21:37:26 CST 2021从 192.168.24.1pts/0 上
[root@localhost ~]#                          #验证成功后获得root权限

上面操作中,选项“-”表示切换用户后进入目标用户的宿主目录,不加则表示切换到当前目录。

  • 默认情况下,任何用户都允许使用 su 命令,从而有机会反复尝试 root 用户的登陆密码,带来安全隐患。我们可以使用 pam_whell 认证模块只允许极个别的用户使用 su 命令进行切换。具体操作如下:
[root@localhost ~]#gpasswd -a zhangsan wheel                   #添加授权用户zhangsan
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]#grep wheel /etc/group                       #确认 wheel 组成员
wheel:x:10:zhangsan
[root@localhost ~]#vim /etc/pam.d/su
auth            required        pam_wheel.so use_uid          #去掉此行开头的“#号”
wq                                                            #保存并退出

验证是否设置成功

[lisi@localhost ~]$su - root
密码:
su: 拒绝权限                                    # lisi 用户没有授权所以登陆失败
[zhangsan@localhost ~]$su - root
密码:
上一次登录:五 8月 20 00:52:07 CST 2021pts/0 上
[root@localhost ~]#                          # zhangsan 用户可以可以登录
  • 我们也可以在 /etc/pam.d/su 文件里设置禁止用户使用su命令
[root@localhost ~]#vim /etc/pam.d/su
......#auth sufficient pam rootok.so#auth required pam wheel.so useuid
  1. 以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
  2. 两行都注释是运行所有用户都能使用su命令,但 root 下使用 su 切换到其他普通用户需要输入密码。
  3. 如果第一行不注释,则 root 使用 su 切换普通用户就不需要输入密码。
  4. 如果开启第二行,表示只有 root 用户和 wheel 组内的用户才可以使用 su 命令。
  5. 如果注释第一行,开启第二行,表示只有 wheel 组内的用户才能使用 su 命令,root 用户也被禁用 su 命令。
  • 使用 su 命令切换用户的操作将会记录到安全日志 /var/log/secure 文件中,可以根据需要进行查看。

2.2 提升执行权限(sudo)

通过 su 命令可以很方便的切换为另外一个用户,前提条件是必须知道用户的登录密码。但对于服务器来说,多一个人知道密码,它的安全风险也就会多增加一分。我们可以使用 sudo 命令进行提升权限,这样就可以降低密码泄露的风险。

  • 在配置文件 /etc/sudoers 中添加授权,文件的默认权限为440, 保存退出时必须执行 “:w!” 命令来强制操作,否则系统将提示为只读文件而拒绝保存
  • 配置文件中,授权记录的基本格式如下
用户 主机名列表=命令程序列表上面主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令,含义如下
用户:授权的用户名,或者用“%组名”的形式,授权一个组的所有用户
主机:使用此配置文件的主机名称,没配置过的主机名时可用local host ,配置过则用实际主机名,ALL 代表所有主机
命令:运行授权的用户通过sudo方式执行的特权命令,需要填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔
  • 例如,授权用户zhangsan 能够执行 ifconfig 命令来修改 IP地址,wheel 组的用户不需要验证密码就可以执行任何命令
[root@localhost ~]# visudo    或者  vim /etc/sudoers
......
zhangsan    localhost=/sbin/ifconfig
%wheel   ALL=NOPASSWD:ALL
  • 当使用相同授权的用户较多,或者授权命令较多时,可以使用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias 来进行设置。
[root@localhost ~]# visudo
...
User_Alias USERS=zs, wer,lisi
Host_Alias HOSTS=localhost, bogon
Cmnd_Alias CMNDS=/sbin/ifconfig, /usr/sbin/useradd, /usr/sbin/userdel
USERS HOSTS=CMNDS
  • sudo 配置记录的命令部分允许使用通配符“*”、取反符号“!”,当需要授权某个目录下的所有命令或取消其中个别命令时也别有用。
[root@localhost ~]# visudo
...
Host_Alias MYHOSTS=kgc,localhost
User_Alias MYUSERS=zhangsan,wangwu,lisi
Cmnd_Alias MYCMNDS = /sbin/*,!/sbin/reboot,!/sbin/poweroff,!/sbin/init,!/usr/bin/rm
MYUSERS MYHOSTS=NOPASSWD:MYCMNDS
  • 若要查看用户自己获得哪些 sudo 授权,可以执行 sudu -l 命令,未授权的用户将会得到“may not run sudo”的提示,已授权的用户可以看到自己的 sudo 配置。
[root@localhost ~]# sudo -l
  • 如果已经启用 sudo 日志,则可以从 /var/log/sudo 文件中看到用户的 sudo 操作记录。
[root@localhost ~]# tail /var/log/sudo

3.PAM 安全认证

3.1 PAM 及其作用

  • PAM,是linux 系统可插拔认证模块,是一套可定制、 可动态加载的共享库,使本地系统管理员可以随意选择程序的认证方式。
  • PAM使用/etc/pam.d/下的配置文件,来管理对程序的认证方式。应用程序调用相应的PAM配置文件,从而调用本地的认证模块,模块放置在/1ib64/security下,以加载动态库的形式进行认证。比如使用su命令时,系统会提示输入root用户的密码,这就是su命令通过调用PAM模块实现的。

3.2 PAM 认证原理

  • PAM认证一般遵循的顺序: Service (服务) --> PAM (配置文件) --> pam_ *.so
  • PAM认证首先要确定哪一项应用服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于/lib64/security/下)进行安全认证。
  • 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。不同的应用程序所对应的PAM模块也是不同的。

如果想查看某个程序是否支持PAM 认证,可以用 ls 命令进行查看,例如查看 su 是否支持 PAM 模块认证,操作如下

[root@localhost ~]# ls /etc/pam.d | grep su

3.3 PAM认证的构成

查看 su 的PAM 配置文件

[root@localhost ~]#cat /etc/pam.d/su
#%PAM-1.0
auth        sufficient  pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth       sufficient  pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
auth        required    pam_wheel.so use_uid
auth        substack    system-auth
auth        include     postlogin
account     sufficient  pam_succeed_if.so uid = 0 use_uid quiet
account     include     system-auth
password    include     system-auth
session     include     system-auth
session     include     postlogin
session     optional    pam_xauth.so

上面输出结果中

  • 每一行都是独立的认证过程

  • 每一行可区分为三个字段:认证类型、控制类型、PAM 模块及其参数

  • 第一列代表PAM认证模块类型

参数 说明
auth 对用户身份进行识别,如提示输入密码,判断是否为root。
account 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。
password 使用用户信息来更新数据,如修改用户密码。
session 定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统。
  • 第二列代表PAM控制标记
格式 说明
required 表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。
requisite 与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。
sufficient 如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。
optional 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型),
include 表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。
  • 第三列代表PAM模块,默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。
    同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。

  • 第四列代表PAM模块的参数,这个需要根据所使用的模块来添加。传递给模块的参数。参数可以有多个,之间用空格分隔开

3.4 PAM控制类型

  • required 验证失败时仍然继续,但返回 Fail
  • requisite 验证失败则立即结束整个验证过程,返回 Fail
  • sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional 不用于验证,只是显示信息(通常用于 session 类型)

验证流程图如下图所示

二、系统引导和登录控制

在互联网环境中,大部分服务器都是通过远程登录来进行管理的,而本地引导和终端登录过程中往往容易被忽略,从而留下安全隐患。

1.开关机安全控制

  • 调整 BIOS 引导设置
    (1)将第一引导设备设为当前系统所在硬盘。
    (2)禁止从其他设备(如光盘、U盘、网络等)引导系统。
    (3)将安全级别设为"setup",并设置管理员密码,以防止未授权的修改。

  • GRUB 限制
    (1)通过修改 GRUB 引导参数进入单用户模式,可以不需要密码就能进入系统,从而拥有 root 权限,从安全的角度来看,如果任何人都能够这样修改参数,对服务器显然是很大的威胁。
    (2)为了加强对引导过程的安全控制,可以为 GRUB 菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
    (3)使用 “grub2-mkpasswd-pbkdf2” 生产密钥
    (4)修改 /etc/grub.d/00_header 文件中,添加密码记录
    (5)生成新的 grub.cfg 配置文件

2.终端登录安全控制

  • 限制 root 只在安全终端登录
[root@localhost ~]# vim/etc/securetty
...
#tty5
#tty6                    #禁止root用户从终端tty5、tty6登录
  • 禁止普通用户登录
[root@localhost ~]# touch /etc/nologin                    #禁止普通用户登录
[root@localhost ~]# rm -rf /etc/nologin                   #取消上述登录限制

3.网络扫描(NMAP)

NMAP是一个强大的端口扫描类安全评测工具,官方网站 ,支持 ping 扫描,多端口检测,OS识别等多种技术。使用 NMAP 定期扫描内部网络,可以找出网络中不可控的应用服务,及时关闭不安全的服务,能减小安全风险。

  • 安装 NMAP 软件包
[root@localhost ~]# yum install -y nmap
  • 扫描语法及类型(程序位于/usr/bin/nmap 目录下)
nmap   [扫描类型]   [选项]   < 扫描目标... >

常用选项如下

选项 说明
-P 指定扫描的端口
-n 禁用 反向DNS 解析
-sS TCP 的 SYN 扫描(半开扫描)
-sT TCP连接扫描
-sF TCP FIN扫描
-sU UDP 扫描
-sP ICMP 扫描
-P0 跳过 ping 检测

案例
检查本机开放了哪些常用的 TCP 端口、UDP 端口

[root@localhost ~]#nmap 127.0.0.1Starting Nmap 6.40 ( http://nmap.org ) at 2021-08-21 23:00 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000030s latency).
Not shown: 996 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
111/tcp open  rpcbind
631/tcp open  ippNmap done: 1 IP address (1 host up) scanned in 0.07 seconds

总结

上面就是我对于账号安全控制,系统引导和登陆控制基础知识的一些总结,希望能给刚接触 Linux 系统的人一些帮助。

Linux—系统安全及应用相关推荐

  1. 【Linux系统】基础总结

    我不太清楚运维部门具体是做什么的,就接触过一点点运维部门! 也就是是知道他们负责管理服务器,管理网络,管理项目部署 偶尔自己需要部署,不得不接触一些linux命令.简单总结一些基础 linux系统发展 ...

  2. Linux系统中创建大文件,并作为文件系统使用

    在LInux系统的使用过程中,有时候会遇到诸如某个磁盘分区的大小不够用了,导致其下的文件系统不能正常写入数据.亦或者是系统swap分区太小,不够用或者不满足条件而导致的其他一系列问题.如果我们系统上挂 ...

  3. Linux系统开发之路-中

    4.Linux的安装(Windows环境下): 1)Windows环境需要借助虚拟机来安装Linux系统,这个推荐使用的软件是VMWare,官网能下载到的最新版本是Workstation Pro15. ...

  4. Linux学习之三-Linux系统的一些重要配置文件

    Linux学习之三-Linux系统的一些重要配置文件 1.网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth0 说明: DEVICE=eth0        ...

  5. 关于内网linux系统如果安装nodejs,npm,express,mongodb,forever等

    内网的linux系统要安装nodejs以及express等系列的框架,因为系统是局域网和互联网是物理隔离的,所以,没法像官网的安装教程那样直接install了,只能手动安装,这里已经我们自己的linu ...

  6. linux源码安装浏览器,Linux系统手动安装Firefox浏览器

    大多数Linux发行版都以Firefox作为默认的浏览器,并可以轻松地从软件库中安装.例如: Debian/Ubuntu: sudo apt-get install firefox Fedora: s ...

  7. 计划任务执行php文件,linux系统下添加计划任务执行php文件方法

    在web开发过程中,经常需要设定一些定期执行的任务,比如商品定时上下架.我们以php文件为例,讲解linux下的计划任务. 方法/步骤 1.打开linux系统命令行界面. 在命令行界面中输入如下命令: ...

  8. .tar.gz mysql 安装_mysql tar.gz 版本 linux系统的安装-Go语言中文社区

    mysql下载地址: https://dev.mysql.com/downloads/mysql/ 1.  上传下载的tar.gz文件发送到linux 上传的路径: /usr/local/mysql/ ...

  9. qt工程在linux系统里颜色显示错误_【飞凌嵌入式RK3399开发板试用体验】+QT开发环境搭建测试(二)...

    作者:飞扬的青春 在拿到开发板之后,已经体验了Android操作系统,接下来就是体验Linux下的开发,本次以QT的一个小案例来测试下. 首先是自己先搭建了一个Ubuntu18.04的虚拟机,使用真机 ...

  10. 外网访问arm嵌入式linux_嵌入式Linux系统编程——文件读写访问、属性、描述符、API

    Linux 的文件模型是从 Unix 的继承而来,所以 Linux 继承了 UNIX 本身的大部分特性,然后加以扩展,本章从 UNIX 系统接口来描述 Linux 系统结构的特性. 操作系统是通过一系 ...

最新文章

  1. LSI IOC,ROC,HBA,Raid Adapter
  2. 程序猿接私活经验总结,来自csdn论坛语录
  3. 图解Oracle用户管理
  4. php输出查询mysql中文乱码_解决php mysql查询插入中文乱码问题
  5. 用键盘来操纵鼠标指针(鼠标损坏时的应急措施)
  6. jms 如何测试_使用JMSTester对JMS层进行基准测试
  7. 经典同步问题一——生产者和消费者问题
  8. 前端的ajax缓存,解析jquery中的ajax缓存问题
  9. google appid申请
  10. rust里面的柴油桶有什么用_用了橡木桶的红酒就一定好吗?什么样的酒才适合橡木桶?...
  11. c++ 调用com组件步骤
  12. 炉石兄弟 修复图腾师问题 by大神beebee102, 还有阴燃电鳗
  13. 常用应用服务器——Tomcat的常用小技巧
  14. Unity项目捏脸解决方案BlendShape
  15. Mybatis注解@Results、@Result、@ResultMap
  16. JAVA根据PDF文件生成图片
  17. 基于Proteus学习单片机系列(七)——实时时钟DS1302
  18. 一 ROS基础教程
  19. N本名著浓缩成的N句话
  20. HackTheBox-baby WAFfles order

热门文章

  1. Linux应用:安装Nginx
  2. Java学习之路-----Java基础简介,基础语法,Java标识符,修饰符,关键字与注释
  3. 算法训练一(贪心、二分)(含解题思路)(上)
  4. Mysql出现问题:ERROR 2058: Plugin caching_sha2_passward could not be loaded解决方案
  5. #{}与${}的语法
  6. winfrom 实现条形码批量打印以及将条形码信息生成PDF文件
  7. PASCAL VOC2012 数据集讲解与制作自己的数据集
  8. el-dialog组件实现可以拖拽移动功能
  9. Spark环境搭建Standalone模式
  10. chrome无法打开无痕模式的解决方案