Linux之系统安全与应用

Linux系统提供了多种机制来确保用户账号的正当,安全使用。

系统安全措施

一. 清理系统账号

1.1 将用户设置为无法登录

Linux系统中除手动创建的各种账号外,还包括随系统或程序安装过程而生成的其他大量账号。除了超级用户root以外,其他的大量账号只是用来维护系统运作,启动或保存服务进程,一般不允许登录的,因此也被称为非登录用户。

常见的非登录用户,为了确保系统的安全,这些用户的登录shell通常设置是**/sbin/nologin**,表示禁止终端登录,确保不被人为改动。所谓 "禁止登录" 指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。

具体操作如下:

1.2 删除账户

在这些非登录用户中,有一些很少用到的用户,这些被称为冗余账号,直接删除就可以了。当然,还有一些是随程序安装的用户账号,程序卸载不一定能完全自动删除,这时需要管理员手动进行清理。

具体操作如下:

1.3 锁定账户

对于Linux服务器中长期不用的用户账号,无法确定是否删除,可以暂时锁定它,来确保安全。

具体操作如下:

方法一:

方法二:

1.4 锁定账户密码(本质锁定)

服务器中的用户账号已经固定,不能再进行修改,此时我们可以采取锁定账号的配置文件的方法。

chattr命令

|---|----------------------------------------------|
| i | 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 |
| a | 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) |

这里只参考选项 -i ,chattr命令lsattr命令 具体详解可以参考https://blog.csdn.net/qq_66204767/article/details/135326223?spm=1001.2014.3001.5501

具体操作如下:

二. 控制密码安全

在不安全的网络环境中,为了降低密码被猜出与被暴力破解的风险,要养成定期更改密码的习惯,适当避免长期使用同一个密码。对于已有用户可以使用chage命令,用于设置密码时限,对于密码过期的用户,登录时将被要求重新设置密码,否则拒绝登录。

2.1 方法一:chage

chage 命令

格式: chage 选项 用户名

**作用:**用于设置密码时限

|----|--------------------------------|
| -m | 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 |
| -M | 密码保持有效的最大天数。 |
| -w | 用户密码到期前,提前收到警告信息的天数。 |
| -E | 帐号到期的日期。过了这天,此帐号将不可用。 |
| -d | 上一次更改的日期。 |
| -i | 停滞时期。如果一个密码已过期这些天,那么此帐号将不可用。 |
| -l | 例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期。 |

具体操作如下:

2.2 方法二:/etc/login.defs

对于新建用户,可以修改**/etc/login.defs**文件中的内容来设置密码规则

具体操作如下:

java 复制代码
vim /etc/login.defs   #编辑该文件

三. 注销历史命令

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

3.1 方法一:/etc/profile

修改**/etc/profile**文件

具体操作如下:

java 复制代码
vim  /etc/profile    #编辑该文件
3.2 方法二:~/.bash------logout

修改用户宿主目录中的**~/.bash------logout**文件,添加清空历史命令的操作语句

具体操作如下:

java 复制代码
vim  ~/.bash_logout         #在文件中添加清空历史命令的操作语句

**注:**还可以使用 history -cclear命令临时清除历史命令

3.3 方法三:超时时间

设置闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端。如此可以避免管理员不在时其他人员对服务器的误操作风险。

具体操作如下:

java 复制代码
vim  /etc/profile               #编辑该文件

....................

export  TMOUT=600               #将该字段加入 /etc/profile文件中

闲置超时由变量TMOUT来控制,默认单位为秒

**注:**当正在执行程序代码编译,修改系统配置等耗时较长的操作时,应避免设置TMOUT变量。必要时可以执行 "unset TMOUT"命令取消TMOUT变量设置。

四. 切换用户和用户提权

大多数Linux服务器并不建议用户直接以root用户登录。这样的目的是为了减少因为误操作而导致的破坏,以及降低特权密码在不安全的网络中被泄露的风险。这时,需要为普通用户提供一种身份切换和权限提升机制,以便在必要的时候执行管理任务。

4.1 su命令

格式: su options... - user \[args...]

**作用:**主要用来切换用户,可以切换为指定的另外一个用户,从而具有该用户的权限。

**注:**切换时需要对目标用户的密码进行验证(root用户切换到其他用户时除外)。此外,su 切换新用户后,使用 exit退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。

su 和 su- 差异

|----------|-----------------------------------------|
| su | 仅仅切换身份,不切换用户环境,会导致某些命令运行出现问题或错误 |
| su - | 加**-** 选项,切换用户身份更彻底,表示进入到目标用户的登录shell环境 |

具体操作如下:

限制使用su命令的用户

默认情况下,任何用户都允许使用su命令,这样使得有机会可以反复尝试其他用户的登录密码,存在安全隐患。因此,我们需要借助pam_wheel认证模块,来规定只允许个别用户可以使用su命令进行切换。

具体操作如下:

java 复制代码
gpasswd -a lisi wheel          #将lisi用户加入 wheel组 root

vim /etc/pam.d/su              #编辑认证配置文件



//找到配置文件中的这两行,根据需求更改即可

# auth sufficient pam_ rootok.so      

//取消其注释,这种状态下是允许所有用户间使用su命令进行切换的。

# auth required pam_ wheel.so use_uid   

//取消其注释,表示只有root用户和wheel组内的用户才可以使用su命令


  
1. 默认情况,开启第一行,注释第二行,这种状态下是允许所有用户间使用su命令进行切换的。

2.如果开启第一,二行,表示只有root用户和wheel组内的用户才可以使用su命令

3.如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令

4.这两者都被注释的情况下,表示允许所有用户都能使用su命令。
  但root下使用su切换到其他普通用户需要输入密码;
  如果第一行不注释,则root使用su切换普通用户就不需要输入密码
  (pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)

4.2 sudo命令

格式: sudo 参数 命令名称

|-------------|-------------------------------|
| -h | 列出帮助信息 |
| -l | 列出当前用户可执行的命令 |
| -u用户名或者uid值 | 以指定的用户身份执行命令 |
| -k | 清空密码的有效时间,下次执行sudo时需要再次进行密码验证 |
| -b | 在后台执行指定的命令 |
| -p | 更改询问密码的提示语 |

**作用:**允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,提升普通用户的执行权限。

**与su对比下的区别:**su的缺点之一在于必须要先告知超级用户root的密码,而多一个人知道root用户的密码就多一份风险,而sudo可以使一般用户不需要知道超级用户的密码即可获得权限。

总结来说,sudo命令具有以下功能

1)限制用户执行指定的命令

2)记录用户执行的每一条命令

3)配置文件(/etc/sudoers)提供集中的用户管理,权限和主机等参数

4)验证密码的后5分钟内(默认值)无须让用户再次验证密码

具体操作如下:
1. /etc/sudoers

可以在配置文件/etc/sudoers中添加授权

sudo机制的配置文件为/etc/sudoers,文件中的默认权限为440,需要使用专门的visudo工具进行编辑,但是要注意只有root管理员才可以使用visduo命令编辑sudo的配置文件。

/etc/sudoers 文件

典型的sudo配置记录中,每一行对应一个用户或组的sudo授权配置

用户(user):授权的用户名,或采用 "%组名"的形式(授权一个组的所有用户)。

主机(MACHINE):使用此配置文件的主机名。这部分主要是方便在多个主机间共用同一份sudoers文件,一般设置成localhost或者实际的主机名就可以。

命令(COMMANDS) :允许授权的用户通过sudo方式执行的特权命令,需要填写命令的完整路径,多个命令之间以 ","分隔。这一部分的配置记录**允许使用通配符 "*",取反符号 " !",**当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。

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

还值得注意的是,默认情况下,通过sudo方式执行的操作并不会记录。如果我们需要启用sudo日志来供管理员查看的话,可以在/etc/sudoers文件中增加 "Defaults logfile"设置 ,如下图所示:

2. 通过sudo执行特权命令

已经获得授权的用户,可以通过sudo方式执行特权命令,只需要把正常的命令行作为sudo命令的参数即可(普通用户执行的时候需要使用绝对路径)。

如果要查看用户自己获得哪些sudo授权,可执行 "sudo -l命令"。

相关推荐
大树8831 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠34 分钟前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 小时前
Linux 11 动态监控指令top
linux
小宇宙Zz1 小时前
Maven依赖冲突
java·服务器·maven
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
不会C语言的男孩3 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_3 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化