Linux系统安全及应用(你迷茫的原因在于,读书太少,想的太多)

简介: Linux系统安全及应用(你迷茫的原因在于,读书太少,想的太多)

一、账号安全基本措施


1.1 系统账号清理

将非登录用户的shell设为/sbin/nologin

usermod -s /sbin/nologin

锁定长期不使用的账号

usermod -L 用户名 锁定
passwd -l 用户名 锁定 u小
passwd -S 用户名 查看用户状态

删除无用的账号

userdel -r 用户名

锁定账号文件passwd、shadow

chatter +i /etc/passwd /etc/shadow 锁定
lsatter /etc/passwd /etc/shadow 查看
chatter -i /etc/passwd /etc/shadow 解锁


1.2 密码安全控制

设置密码有效期


要求用户下次登录时修改密码


示例1:查看密码的配置文件/etc/login.defs





1.2.1 chage命令--修改账号和密码的有效期

chage命令是用来临时修改帐号和密码的有效期限;这个信息由系统用于确定用户何时必须更改其密码


常用选项:


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

示例1


示例2


0表示用户应该在下次登录系统时更改密码


1.3 命令历史限制

减少记录的命令条数


注销时自动清空命令历史


示例1:临时清除



示例2:永久生效



source一下就生效了


1.4 终端自动注销

示例1:开机永久清空历史命令




示例2:设置每60秒清空一次历史命令



1.5 使用su命令切换用户

用途:切换用户


格式:su - 目标用户


1.5.1 密码验证:

root切换至任意用户,不需要密码


普通用户切换到其他用户,需要验证密码


示例1:



示例2:



1.5.2 限制使用su命令的用户

默认情况下,任何用户都允许使用su命令,从而有机会登录到其他用户,这样带来了安全风险,为了加强su命令的使用控制,可以借助于pam_wheel认证模块


查看某个程序是否支持PAM认证,可以用ls命令:ls /etc/pam.d |grep su


查看su的PAM配置文件:cat /etc/pam.d/su


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


每一行可以区分为三个字段:


1.认证类型


2.控制类型


3.PAM模块及其参数

1 #%PAM-1.0
   2 auth            sufficient      pam_rootok.so
   3 # Uncomment the following line to implicitly trust users in the "wheel" g    roup.
   4 #auth           sufficient      pam_wheel.so trust use_uid
   5 # Uncomment the following line to require a user to be in the "wheel" gro    up.         
   6 #auth            required        pam_wheel.so use_uid
   7 auth            substack        system-auth
   8 auth            include         postlogin
   9 account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
  10 account         include         system-auth
  11 password        include         system-auth
  12 session         include         system-auth
  13 session         include         postlogin
  14 session         optional        pam_xauth.so
  # a)开启第二行和注释第六行是默认状态,这种状态下是允许所有用户使用su命令进行切换的
  # b)两行都注释也是运行所有用户都使用su命令,但是root切换到普通用户需要输入密码
  # c)如果开启第六行表示使用root用户和wheel组内的用户才可以使用su命令
  # d)如果注释第二行开始第六行,表示只有wheel组内的用户才能使用su命令,root用户也被禁用su命令

将允许使用su命令的用户加入wheel组(附加组)


启用pam_wheel认证模块,在/etc/pam.d下的su文件中



图:pam认证


1.6 PAM认证原理

顺序:service(服务)->PAM(配置文件)->pam_*.so


首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib64/security下)进行安全认证


用户访问服务器时,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证


不同的应用程序所对应的PAM模块是不同的


PAM的配置文件中的每一行都是一个独立的认证过程,它们按从上往下的顺序依次由PAM模块调用 cat /etc/pam.d/system-auth 第一列代表PAM认证模块类型 1.auth: 对用户身份进行识别,如提示输入密码,判断是否为root。 2.account: 对账号各项属性进行检查,如是否允许登录系统,帐号是否已经过期,是否达到最大用户数等。 3.password: 使用用户信息来更新数据,如修改用户密码。 4.session:定义登录前以及退出后所要进行的会话操作管理,如登录连接信息,用户数据的打开和关闭,挂载文件系统,能连接几个终端


第二列代表PAM控制标记 1.required:表示需要返回一个成功值,如果返回失败,不会立刻将失败结果返回,而是继续进行同类型的下一验证,所有此类型的模块都执行完成后,再返回失败。 2.requisite:与required类似,但如果此模块返回失败,则立刻返回失败并表示此类型失败。 3.sufficient:如果此模块返回成功,则直接向程序返回成功,表示此类成功,如果失败,也不影响这类型的返回值。 4.optional: 不进行成功与否的返回,一般不用于验证,只是显示信息(通常用于session类型), 5.include:表示在验证过程中调用其他的PAM配置文件。比如很多应用通过完整调用/etc/pam.d/system-auth(主要负责用户登录系统的认证工作)来实现认证而不需要重新逐一去写配置项。


第三列代表PAM模块


默认是在/lib64/security/目录下,如果不在此默认路径下,要填写绝对路径。同一个模块,可以出现在不同的模块类型中,它在不同的类型中所执行的操作都不相同,这是由于每个模块针对不同的模块类型编制了不同的执行函数。


第四列代表PAM模块的参数


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


1.6.1 PAM安全认证流程


1.required验证失败时仍然继续,但是返回Fail


2.requisite验证失败则立即结束整个验证过程,返回Fail


3.sufficient验证成功则立即返回,不再继续,否则忽略结果并继续


4.optional不用于验证,只显示信息


示例1





示例2:安全日志文件/var/log/secure



1.7 使用sudo机制提升权限

示例




1.7.1 配置sudo授权

visudo或者vi /etc/sudoers 两个文件一样


记录格式:用户 主机名列表=命令程序列表


lisi localhost=/sbin/ifconfig

liwu localhost=/sbin/*,!/sbin/ifconfig

#可以搭配通配符使用,*全部,!取反




总结


vim /etc/login.defs 适用于新建用户


chage -M 30 lisi 适用于已有用户

目录
相关文章
|
1月前
|
存储 缓存 固态存储
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
深度解析linux主机:从应用到硬盘,玩转系统I/O性能优化攻略!
|
2月前
|
Linux
linux查看应用对应的端口
linux查看应用对应的端口
19 0
|
2月前
|
网络协议 安全 Linux
linux系统安全及应用——端口扫描
linux系统安全及应用——端口扫描
41 0
|
19天前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
13 0
|
1月前
|
Cloud Native Linux 网络虚拟化
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
在Linux网络虚拟化领域,虚拟以太网设备(veth)扮演着至关重要的角色🌐。veth是一种特殊类型的网络设备,它在Linux内核中以成对的形式存在,允许两个网络命名空间之间的通信🔗。这篇文章将从多个维度深入分析veth的概念、作用、重要性,以及在容器和云原生环境中的应用📚。
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
|
13天前
|
机器学习/深度学习 自然语言处理 Linux
【专栏】Linux 中的机器学习:Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔
【4月更文挑战第28天】本文探讨了在Linux环境下,先进自动语音识别系统Whisper的运用与实现高效ASR。Whisper基于PyTorch,支持多语言识别,具有高准确性和实时性。文中介绍了安装配置Whisper的步骤,包括安装依赖、下载代码、配置环境变量及编译安装。通过数据准备、模型训练和识别,可实现语音识别功能。Whisper适用于语音助手、翻译等领域,随着技术发展,其应用前景广阔。
|
2天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
17 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
2天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
12 0
linux实时应用如何printf输出不影响实时性?
|
5天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
10天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)