如何保证Linux服务器的基本系统安全?

博文目录
一、账号安全控制
二、基本安全措施
三、用户切换与提权
四、开关机安全控制
五、终端及登录控制

一、账号安全控制

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

二、基本安全措施

1、系统账号

各种非登录用户账号中,还有相当一部分是很少用到的,如“games”等,这些用户账号可以视为冗余账号,直接删除即可,包括一些程序账号,若卸载程序后,账号没能被删除,则需要我们手动进行删除。

对于Linux服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。示例如下:

1)usermod命令锁定账户:

[[email protected] ~]# usermod -L zhangsan   <!--锁定账户-->
[[email protected] ~]# passwd -S zhangsan   <!--查看账户状态-->
zhangsan LK 2019-11-22 0 99999 7 -1 (密码已被锁定。)
[[email protected] ~]# usermod -U zhangsan   <!--解锁zhangsan账户-->
[[email protected] ~]# passwd -S zhangsan     <!--查看账户状态-->
zhangsan PS 2019-11-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

2)passwd命令锁定账户:

[[email protected] ~]# passwd -l zhangsan<!--锁定zhangsan账户-->
锁定用户 zhangsan 的密码 。
passwd: 操作成功
[[email protected] ~]# passwd -S zhangsan   <!--查看账户状态-->
zhangsan LK 2019-11-22 0 99999 7 -1 (密码已被锁定。)
[[email protected] ~]# usermod -U zhangsan <!--解锁zhangsan账户-->
[[email protected] ~]# passwd -S zhangsan    <!--查看账户状态-->
zhangsan PS 2019-11-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)

2、锁定账户配置文件

如果服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用chattr命令,分别结合“+i” “-i”选项来锁定、解锁文件,使用lsattr命令可以查看文件锁定情况。示例如下:

[[email protected] ~]# chattr +i /etc/passwd /etc/shadow <!--禁用账户密码配置文件-->
[[email protected] ~]# lsattr /etc/passwd /etc/shadow  <!--查看锁定的账户密码配置文件-->
----i----------- /etc/passwd
----i----------- /etc/shadow
[[email protected] ~]# chattr -i /etc/passwd /etc/shadow <!--解锁账户密码配置文件-->
[[email protected] ~]# lsattr /etc/passwd /etc/shadow<!--查看锁定的账户密码配置文件-->
---------------- /etc/passwd
---------------- /etc/shadow

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

3、密码安装控制

为了降低密码被第三方破解或被猜出的危险性,可以设置密码有效期来限制密码最大有效天数,对于密码已过期的用户,登录时则必须重置密码,否则将拒绝登录。

[[email protected] ~]# vim /etc/login.defs  <!--适用于新建的用户-->
 ........................   <!--此处省略部分-->
PASS_MAX_DAYS   10    <!--将该配置项默认的值“99999”改为所期望的值,如10天。-->
[[email protected] ~]# chage -d 5 zhangsan  <!--设置密码过期时间为5天-->
[[email protected] ~]# cat /etc/shadow <!--查看密码过期时间是否设置成功-->
zhangsan:$6$cigVri.K$wME7C78i0uvZpCSBzpYdoKcuxX.QkiLw7/3bsEZz5/IZWm9jZtT6ExSzmiwa0eFqjGQuuSza8CX7TeITQQNYJ/:5:0:99999:7:::
[[email protected] ~]# chage -d 0 zhangsan   <!--设置zhangsan用户下次登录修改密码-->
<!--重新登录设置新密码-->
更改用户 zhangsan 的密码 。
为 zhangsan 更改 STRESS 密码。
(当前)UNIX 密码:   <!--输入当前密码-->
新的 密码:<!--设置新密码(切记不能和此前的密码相似)-->
重新输入新的 密码:      <!--确定新密码-->
passwd:所有的身份验证令牌已经成功更新。
[[email protected] ~]$

4、命令历史、自动注销

Shell环境的命令历史机制为用户提供了极大的便利,但另一方面也给用户带来了潜在的风险。只要获得用户的命令历史文件,该用户的命令操作过程将会一览无余,如果曾经在命令行输入明文的密码,则无意之中服务器的安全壁垒又多了一个缺口。历史命令的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中的所有用户。示例如下:

[[email protected] ~]# export HISTSIZE=5  <!--设置记录5条历史命令-->
[[email protected] ~]# history   <!--验证是否生效-->
    6  chage -d 0 zhangsan
    7  export HISTSIZE=10
    8  history
    9  export HISTSIZE=5
   10  history
[[email protected] ~]# vim .bash_logout   <!--设置重启或者注销清空历史命令-->
# ~/.bash_logout
history -c
clear
[[email protected] ~]# export TMOUT=500  <!--终端500秒无人操作自动注销-->

需要注意的是,当正在执行程序代码编译、修改系统配置等时间较长的操作时,应避免设置TMOUT变量。必要时可以执行“unset TMOUT”命令取消TMOUT变量设置。

三、用户切换与提权

Linux系统为我们提供了su、sudo两种命令。

  • su命令:主要用来切换用户;
  • sudo命令:用来提升执行权限;

1、su命令——切换用户

su命令可以使用的选项如下:

  • -:单纯使用-,如“su -”代表使用login-shell的变量文件读取方式来登录系统;若没有指定用户名,则代表切换为root的身份。
  • -l:与“-”类似,但后面需要加想要切换的使用者账号,也是login-shell的方式。
  • -m:表示使用目前的环境设置,而不读取新使用者的环境变量的配置文件。
  • -c:仅进行一次指令,所以-c后面需要加上指令,命令格式为:su - -c "head -n 3 /etc/shadow",双引号内的就是要执行的命令。

使用su命令,可以切换为指定的另一个用户,从而具有该用户的所有权限。当然,切换时需要对目标用户的密码进行验证(从root用户切换为其他用户时除外)。
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,这样带来了安全风险。为了加强su命令的使用控制,可以借助于pam_wheel认证模块,只允许极个别用户使用su命令进行切换。实现过程如下:将授权使用su命令的用户添加到wheel组,修改/etc/pam.d/su认证配置以启用pam_wheel认证。启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。

示例如下:

[[email protected] ~]$ su       <!--普通用户切换到管理员-->
密码:
[[email protected] zhangsan]# cd
[[email protected] ~]#
[[email protected] ~]$ su --login<!--普通用户切换到root用户-->
密码:
上一次登录:六 11月 23 07:53:15 CST 2019pts/2 上
[[email protected] ~]#
[[email protected] ~]# su zhangsan   <!--管理员切换到普通用户-->
[[email protected] root]$ cd
[[email protected] ~]$
[[email protected] ~]# gpasswd -a zhangsan wheel   <!--将zhangsan用户加入到wheel组-->
正在将用户“zhangsan”加入到“wheel”组中
[[email protected] ~]# grep wheel /etc/group    <!--验证是否加入到wheel组-->
wheel:x:10:test,radmin,zhangsan
[[email protected] ~]# vim /etc/pam.d/su    <!--配置su的pam验证-->
#%PAM-1.0
auth            sufficient      pam_rootok.so
auth            required        pam_wheel.so use_uidi
[[email protected] ~]#$su -root        <!--尝试切换为root-->
密码:
su:拒绝权限                 <!--切换失败,仍为原用户-->

使用su命令切换用户的操作将会记录到安全日志/var/log/secure文件中,可以根据需要进行查看。

2、sudo命令——提升执行权限

通过su命令可以非常方便地切换为另一个用户,但前提条件是必须知道目标用户的登录密码。若要从普通用户切换为root用户,必须知道root用户的密码。对于生产环境中的Linux服务器,每多一个人知道特权密码,其安全风险也就增加一分。

sudo命令的控制只需在/etc/sudoers配置文件中添加授权即可,文件的默认权限为440,需要使用专门的visudo工具进行编辑。虽然也可以用vim进行编辑,但保存时必须执行“:wq!”命令来强制操作,否则系统将提示为只读文件而拒绝保持。

配置文件/etc/sudoers中,授权记录的基本配置格式如下所示:

user MACHINE=COMMANDS

授权配置主要包括用户、主机、命令三个部分,即授权哪些人在哪些主机上执行哪些命令,各部分的具体含义如下:

  • 用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
  • 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共有同一份sudoers文件,一般设为localhost或者时间的主机名即可。
  • 命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。

典型的sudo配置记录中,每行对应一个用户或组的sudo授权配置。若要授权用户zhangsan能够执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码即可执行任何命令。示例如下:

[[email protected] ~]# vim /etc/sudoers
root    ALL=(ALL)       ALL
zhangsan localhost=/sbin/ifconfig <!--针对用户zhangsan设置命令的使用权限-->
%wheel  ALL=NOPASSWD:ALL<!--针对组wheel设置命令的使用权限-->
:wq!
[[email protected] ~]$ sudo ifconfig ens32 192.168.100.20 255.255.255.0   <!--zhangsan账户修改IP地址-->
[sudo] zhangsan 的密码:

当使用相同授权的用户较多,或者授权的命令较多时,可以采用集中定义的别名。用户、主机、命令部分都可以定义为别名(必须为大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。示例如下:

[[email protected] ~]# vim /etc/sudoers
.........................    <!--此处为省略部分-->
User_Alias      OPERATORS=lisi,wangwu,zhaoliu    <!--定义用户名列表-->
Host_Alias      MAILSVRS=smtp,pop            <!--定义主机列表-->
Cmnd_Alias      PKGTOOLS=/bin/rpm,/usr/bin/yum   <!--定义命令列表-->
OPERATORS       MAILSVRS=PKGTOOLS    <!--使定义的列表关联起来-->

sudo配置记录的命令部分可以使用通配符 “ * ” 、取反符号“ !”,当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。。例如:授权用户zhangsan可以执行/sbin/目录下除了ifconfig、route以外的其他命令,并且启用日志记录:

[[email protected] ~]# vim /etc/sudoers
 .........................
zhangsan        localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route <!--通配符及取反符的应用-->
Defaults logfile = "/var/log/sudo"    <!--启用日志记录-->

sudo命令使用中注意事项:

1、第一次通过sudo命令执行命令时,必须以用户自己的密码进行验证,此后再次执行sudo命令,只要与前一次sudo操作的间隔时间不超过5分钟,则不需重复验证。

2、若想要查看用户自己获得哪些sudo授权,可以执行“ sudo -l”,若是某个用户的sudo权限列表中出现了(ALL) ALL字样,则表示授权有误,此时,该用户拥有所有命令的执行权限。若visudo命令编辑的授权列表没有错误的话,就需要看看是否将该用户添加到了wheel组中,并且启用了pam_wheel认证。

四、开关机安全控制

通常大部分服务器是通过远程登录的方式来进行管理的,而本地引导和终端登录过程往往容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺乏严格、安全的管控制度时,如何防止其他用户的非授权介入就成为必须重视的问题。

1、调整BIOS引导设置

1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
2)禁止从其他设备(如光盘、U盘、网络等)引导系统,对应的项为“Disabled”。
3)将BIOS的安全级别改为“setup”,并设置好管理密码,以防止未授权的修改。

2、禁止ctrl+alt+del快捷键重启

[[email protected] ~]# systemctl mask ctrl-alt-del.target<!--设置禁用ctrl+alt+del键-->
[[email protected] ~]# systemctl daemon-reload<!--重新加载服务-->

若要重新开启ctrl-alt-del快捷键功能,示例如下:

[[email protected] ~]# systemctl unmask ctrl-alt-del.target
Removed symlink /etc/systemd/system/ctrl-alt-del.target.
[[email protected] ~]# systemctl daemon-reload 

3、限制更改GRUB引导参数

当Linux系统在启动时,到了下面这个界面,按“e”就可以进入GRUB引导菜单,并且通过修改配置后,无须任何密码就可以进入系统环境中,这个漏洞显然对服务器是一个极大的漏洞,那么可以执行以下操作,为grub菜单设置一个密码,只有提供正确的密码才被允许修改引导参数:

[[email protected] ~]# grub2-mkpasswd-pbkdf2   <!--设置生成grub引导菜单密码-->
输入口令:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B
[[email protected] ~]# cp /etc/grub.d/00_header  <!--备份引导菜单--> /etc/grub.d/00_header.bak
[[email protected] ~]# cp /boot/grub2/grub.cfg<!--备份引导菜单--> /boot/grub2/grub.cfg.bak
[[email protected] ~]# vim /etc/grub.d/00_header   <!--修改grub引导菜单加载密码(末行)-->
cat <<EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B
EOF
[[email protected] ~]# grub2-mkconfig -o /boot/grub2/grub.cfg
                           <!--生成grub引导菜单-->
Generating grub configuration file ...
/etc/grub.d/00_header.bak: line 360: warning: here-document at line 359 delimited by end-of-file (wanted `EOF‘)
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-2b580d1a2e8348b8aa9f78be11137b41
Found initrd image: /boot/initramfs-0-rescue-2b580d1a2e8348b8aa9f78be11137b41.img
done

现在重启服务器,进入grub菜单时,按E键将无法修改引导参数,若要修改,还需输入正确的grub用户名及密码:

五、终端及登录控制

1、禁止root用户登录

在Linux系统中,login程序会读取/etc/securetty文件,以决定允许root用户从哪些终端(安全终端)登录系统。若要禁止root用户从指定的终端登录,只需从该文件中删除或者注释掉对应的行即可。例如,若要禁止root用户从tty5、tty6登录,可以修改/etc/securetty文件,将tty5、tty6行注释掉:

[[email protected] ~]# vim /etc/securetty
.........................  <!--此处省略部分内容-->
#tty5
#tty6

2、禁止普通用户登录

当服务器正在进行备份或调试等维护工作时,可能不希望再有新用户登录系统的话,这时候,可以建立/etc/nologin文件即可,login程序会检查/etc/nologin文件是否存在,如果存在,则拒绝普通用户登录系统(root用户不受限制)。这个方法只建议在服务器维护期间临时使用,当手动删除/etc/nologin文件或者重新启动主机后,即可恢复正常,如下:

[[email protected] ~]# touch /etc/nologin

—————— 本文至此结束,感谢阅读 ——————

原文地址:https://blog.51cto.com/14156658/2453135

时间: 2024-08-30 17:08:46

如何保证Linux服务器的基本系统安全?的相关文章

多方面来保证Linux服务器的基本系统安全

作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势而得以广泛应用,但是,若不加以控制,也不见得安全到哪里,这篇博文主要从账号安全控制价.系统引导和登录控制的角度,来进行Linux系统安全优化.并且使用辅助工具来查找安全隐患,以便我们运维人员及时采取相应的措施. 安全方面确实需要注意的比较多,这篇博文从各个方面写了下来,比较琐碎,还需要耐心些看,根据需要来配置服务器的安全性 一.基本安全措施: 1. 系统各种冗余账号,如"games"等,可直接删除,包括一些程序

Linux服务器集群系统(一)(转)

add by zhj:虽然是2002年的文章,但读来还是收益良多.在 章文嵩:谈LVS及阿里开源背后的精彩故事 中LVS发起人及主要贡献者谈了LVS的开发过程及阿里开源的一些故事 原文:http://www.linuxvirtualserver.org/zh/lvs1.html 本文介绍了Linux服务器集群系统--LVS(Linux Virtual Server)项目的产生背景和目标,并描述了LVS服务器集群框架及目前提供的软件,列举LVS集群系统的特点和一些实际 应用,最后,本文谈论了LVS

保证 Linux 服务器安全基本措施

作为一种开放源代码的操作系统,Linux服务器以其安全,高效和稳定的显著优势而得以广泛应用,但是,若不加以控制,也不见得安全到哪里,这篇博文主要从账号安全控制.系统引导和登录控制的角度,来进行Linux系统安全优化.并且使用辅助工具来查找安全隐患,以便我们及时采取相应的措施.基本安全措施:1. 系统各种冗余账号,如"games"等,可直接删除,包括一些程序账号,若卸载程序后,账号没能被删除,则需要我们手动进行删除. 2. 当服务器中的用户账号已经固定,不再进行更改,可以直接锁定账号配置

如何在Linux服务器和windows系统之间上传与下载文件

Do not let dream just be your dream. 背景:Linux服务器文件上传下载. XShell+Xftp安装包(解压即用)百度网盘链接:https://pan.baidu.com/share/init?surl=M8L4ud2NUYcC9qaG_0XPKg 提取码: tec4 方式一.通过Shell First. 开启本地虚拟机,在Shell中连接本地Linux服务器,其中主机填Linux的IP地址.用户名和密码是Linux的登陆名和密码.其它的保留默认值,确定,然

linux服务器开发二(系统编程)--线程相关

线程概念 什么是线程 LWP:Light Weight Process,轻量级的进程,本质仍是进程(在Linux环境下). 进程:独立地址空间,拥有PCB. 线程:也有PCB,但没有独立的地址空间(共享). 进程与线程的区别:在于是否共享地址空间. 独居(进程). 合租(线程). Linux下: 线程:最小的执行单位. 进程:最小分配资源单位,可看成是一个线程的进程. 安装man文档 sudo apt-get install glibc-doc sudo apt-get install manp

linux服务器centos系统apache路径不区分大小写的解决办法

大家都知道linux服务器的centos系统.ubuntu系统等 访问路径都是区分大小写,这里分享centos系统下apache路径不区分大小写的解决办法.修改 http.conf文件: usr/local/apache/为我的环境apache目录,完成上述后会在/usr/local/apache/modules/目录下多一个mod_speling.so模块文件 在/usr/local/apache/conf/httpd.conf中加上 1 2 LoadModule speling_module

20个Linux服务器性能调优技巧

Linux是一种开源操作系统,它支持各种硬件平台,Linux服务器全球知名,它和Windows之间最主要的差异在于,Linux服务器默认情况下一般不提供GUI(图形用户界面),而是命令行界面,它的主要目的是高效处理非交互式进程,响应时间并不是那么重要,相反,能够长时间处理高负载才是最关键的. Linux高可用服务器集群解决方案让IT系统管理员可以从容应对许多常见的硬件和软件故障,允许多台计算机一起工作,为关键服务正常运行提供保障,系统管理员可以不中断服务执行维护和升级.Linux服务器有各种用途

《Linux服务器的监控》

本文地址:http://www.cnblogs.com/aiweixiao/p/7131532.html 原文地址(公众号):http://t.cn/RKwmqUs 点击关注 微信公众号 1. 监控概要 Linux服务器要保证高可用性,就要对其进行有效的监控,实时了解到服务器的运行状况,各项性能指标是否正常,以防患以未然,进行运维日志的记录,图形化的监控,出现问题的消息报警机制,都是保证Linux服务器能正常对外提供服务的先决条件. 2. 监控的内容 监控,是预防的其中的一项重要工作.这里先说说

Linux服务器集群LVS

本文主要介绍了Linux服务器集群系统–LVS(Linux Virtual Server),并简单描述下LVS集群的基本应用的体系结构以及LVS的三种IP负载均衡模型(VS/NAT.VS/DR和VS/TUN)的工作原理,以及它们的优缺点和LVS集群的IP负载均衡软件IPVS在内核中实现的各种连接调度算法. 参考文献 http://www.linuxvirtualserver.org/zh/index.html 前言 LVS(Linux Virtual Server)的简写,翻译为Linux虚拟服