Linux系统安全

系统账号清理

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

锁定长期不使用的账号

删除无用的账号

锁定帐号文件passwd

shell——/sbin/nologin却比较特殊,所谓“无法登陆”指的仅是这个用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。举例来说,各个系统账号中,打印作业有lp这个账号管理,www服务器有apache这个账号管理,他们都可以进行系统程序的工作,但就是无法登陆主机而已。

将用户设置为无法登录

[root@localhost ~]# tail /etc/passwd       
#查看lisi的属性

[root@localhost ~]# chsh -s /sbin/nologin lisi     
#修改lisi的shell属性
Changing shell for lisi.
Shell changed.
[root@localhost ~]# tail -1 /etc/passwd				
#查看lisi的属性
lisi:x:1001:1001::/home/lisi:/sbin/

usermod

锁定用户

[root@localhost ~]# passwd -l zhaosi
锁定用户 zhaosi 的密码 。
passwd: 操作成功
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhaosi
密码:
su: 鉴定故障
[root@localhost ~]# passwd -u zhaosi
解锁用户 zhaosi 的密码。
passwd: 操作成功

[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhaosi
密码:
[zhaosi@localhost root]$ 

删除用户

userdel -r   用户名
家目录

家目录    无助文件  前主人的uid

锁定配置文件

chattr

-a 让文件或目录仅供附加用途。只能追加

-i 不得任意更动文件或目录。

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow
#加i
[root@localhost ~]# useradd liqi
useradd:无法打开 /etc/passwd
[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow

chattr -i /etc/passwd /etc/shadow

密码安全控制

对于新建用户

可以修改/etc/login.defs 文件里的内容来设置密码规则

[root@localhost ~]# vim /etc/login.defs              
#适用于修改后生效后修改的用户
	 --------------------------------
	 25 PASS_MAX_DAYS   99999
     26 PASS_MIN_DAYS   0
     27 PASS_MIN_LEN    5
     28 PASS_WARN_AGE   7
[root@localhost ~]# tail -5 /etc/shadow            
#修改密码有效期限

要求用户下次登陆修改密码

chage

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


[root@localhost ~]# chage -d  0 zhangsan
#强制张三下一次登录一定修改密码(密码符合复杂性要求)


[root@localhost ~]#chage -M 30 lisi
#设置密码有效期为30天
[root@localhost ~]#cat /etc/shadow|tail -1
lisi:!!:19055:0:30:7:::
第5字段

man 5 shadow


命令历史限制

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

#可以使用以下命令临时清除历史命令
history -c 
clear




[root@localhost ~]#vim /etc/profile
.............................
export HISTSIZE=200

[root@localhost ~]#source  /etc/profile



###退出清空密码#############
[root@localhost ~]#vim .bash_logout 
#退出后清除
# ~/.bash_logout
echo " " >~/.bash_history



#一定要加空格
[root@localhost ~]#vim .bashrc     自对自己生效
#开机后清除
echo " " >~/.bash_history

bash             windows 桌面
bash


#设置超时时间
[root@localhost ~]# vi /etc/profile   对所有用户生效
.................................
export  TMOUT=60

[root@localhost ~]# source /etc/profile

在这里插入图片描述

查看历史命令前十行

切换用户

su命令即switch user,命令可以切换用户身份,并且以指定用户的神扽执行命令

su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换

说明:root su至其他用户无须密码;非root用户切换时需要密码

注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱

su 切换用户是不完全切换

su - 切换用户是完全切换

即有- 选项,切换用户身份更彻底,反之,只切换了一部分,这会导致某些命令运行出现问题或错误

[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ su 
密码:
[root@localhost zhangsan]# pwd
/home/zhangsan
[zhangsan@localhost ~]$ su -
密码:
上一次登录:二 713 10:24:14 CST 2021pts/1 上
[root@localhost ~]# pwd
/root

限制使用su命令的用户

[root@localhost ~]# gpasswd -a lisi wheel
#将用户加入 wheel组 root

[root@localhost ~]#vim /etc/pam.d/su
#开启服务
#auth           required        pam_wheel.so use_uid

vim /etc/pam.d/su
2 # auth sufficient pam_ rootok.so
6 #auth required pam_ wheel.so use_ _uid

a)以上两行是默认状态(即开启第一行,注释第二行),这种状态下是允许所有用户间使用su命令进行切换的。
b)两行都注释也是允许所有用户都能使用su命令,但root'下使用su切换到其他普通用户需要输入密码;如果第一行不注释,则root使用su切换普通用户就不需要输入密码(pam rootok. so模块的主要作用是使uid为0的用户,即root用户能够直接通过认证而不用输入密码。)
c)如果开启第二行,表示只有root用户和wheel组内的用户才可以使用su命令
d)如果注释第一行,开启第二行,表示只有whee1组内的用户才能使用su命令,root用户也被禁用su命令。

在这里插入图片描述

PAM安全认证

PAM:Pluggable Authentication Modules,插件式的验证模块,Sun公司于1995 年开发的一种与认证相关的通用框架机制。PAM 只关注如何为服务验证用户的 API,通过提供一些动态链接库和一套统一的API 接口,将系统提供的服务和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序一种认证框架,自身不做认证

http://www.linux-pam.org/
#官网手册

[root@localhost ~]#rpm -qi pam
#查看当前系统pam
[root@localhost ~]#rpm -ql pam
#查看模块

[root@localhost ~]#ls /usr/lib64/security/*.so|wc -l
#60个模块是二进制文件,不会直接修改
60

[root@localhost ~]#ls /etc/security/
#和上面的模块配合使用,有些比较简单的模块没有配置文件
access.conf       console.perms.d  namespace.d     sepermit.conf
chroot.conf       group.conf       namespace.init  time.conf
console.apps      limits.conf      opasswd
console.handlers  limits.d         pam_env.conf
console.perms     namespace.conf   pwquality.conf
我们会去修改配置文件
/etc/security
/etc/pam.d/*


[root@localhost ~]#cd /etc/pam.d/
#这里的文件是应用程序怎么调用模块的
[root@localhost pam.d]#ls
atd                     login              smtp
chfn                    other              smtp.postfix
chsh                    passwd             sshd
config-util             password-auth      sssd-shadowutils
crond                   password-auth-ac   su
cups                    pluto              sudo
fingerprint-auth        polkit-1           sudo-i
fingerprint-auth-ac     postlogin          su-l
gdm-autologin           postlogin-ac       system-auth
gdm-fingerprint         ppp                system-auth-ac
gdm-launch-environment  remote             systemd-user
gdm-password            runuser            vlock
gdm-pin                 runuser-l          vmtoolsd
gdm-smartcard           setup              vsftpd
ksu                     smartcard-auth     xserver
liveinst                smartcard-auth-ac

[root@localhost pam.d]#cat /etc/pam.d/sshd 
#文件类型
#%PAM-1.0
auth	   required	    pam_sepermit.so
auth       substack     password-auth
auth       include      postlogin
# Used with polkit to reauthorize users in remote sessions
-auth      optional     pam_reauthorize.so prepare
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
# pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    required     pam_namespace.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    include      postlogin
# Used with polkit to reauthorize users in remote sessions
-session   optional     pam_reauthorize.so prepare

type:指模块类型,即功能
control :    PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments:   用来传递给该模块的参数

PAM相关文件

包名: pam

模块文件目录:/lib64/security/*.so

特定模块相关的设置文件:/etc/security/

man 8 加模块名 可以查看帮助

应用程序调用PAM模块的配置文件

  1. 主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
  2. 为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
  3. 注意:如/etc/pam.d存在,/etc/pam.conf将失效

PAM工作原理

PAM认证一般遵循这样的顺序:Service(服务)→PAM(配置文件)→pam_*.so

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

1.使用者执行/usr/bin/passwd 程序,并输入密码
2.passwd开始调用PAM模块,PAM模块会搜寻passwd程序的PAM相关设置文件,这个设置文件一般是在/etc/pam.d/里边的与程序同名的文件,即PAM会搜寻/etc/pam.d/passwd此设置文件
3.经由/etc/pam.d/passwd设定文件的数据,取用PAM所提供的相关模块来进行验证
4.将验证结果回传给passwd这个程序,而passwd这个程序会根据PAM回传的结果决定下一个动作(重新输入密码或者通过验证)

专用配置文件/rtc/pam.d/格式

type control module-path arguments



application:指服务名,如:telnet、login、ftp等,服务名字“OTHER”代表所有没有在该文件中明确配置的其它服务
type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数

type:指模块类型,即功能
control :PAM库该如何处理与该服务相关的PAM模块的成功或失败情况,一个关健词实现
module-path: 用来指明本模块对应的程序文件的路径名
Arguments: 用来传递给该模块的参数

模块类型(module-type)**

  • Auth 账号的认证和授权
  • Account 帐户的有效性,与账号管理相关的非认证类的功能,如:用来限制/允许用户对某个服务的访问时间,限制用户的位置(例如:root用户只能从控制台登录)
  • Password 用户修改密码时密码复杂度检查机制等功能
  • Session 用户会话期间的控制,如:最多打开的文件数,最多的进程数等
  • -type 表示因为缺失而不能加载的模块将不记录到系统日志,对于那些不总是安装在系统上的模块有用

Control: ( 控制位)

  • required :一票否决,表示本模块必须返回成功才能通过认证,但是如果该模块返回失败,失败结果也不会立即通知用户,而是要等到同一type中的所有模块全部执行完毕,再将失败结果返回给应用程序,即为必要条件
  • requisite :一票否决,该模块必须返回成功才能通过认证,但是一旦该模块返回失败,将不再执行同一type内的任何模块,而是直接将控制权返回给应用程序。是一个必要条件
  • sufficient :一票通过,表明本模块返回成功则通过身份认证的要求,不必再执行同一type内的其它模块,但如果本模块返回失败可忽略,即为充分条件,优先于前面的
  • equired和requisiteoptional :表明本模块是可选的,它的成功与否不会对身份认证起关键作用,其返回值一般被忽略include: 调用其他的配置文件中定义的配置
  • optional 可选项

第三列代表PAM模块

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

每一行都是一个独立的认证过程;
每一行可以区分为三个字段:
认证类型 控制类型 PAM 模块及其参数
PAM 认证类型包括四种:
认证管理(authentication management):接受用户名和密码,进而对该用户的密码进行认证;
帐户管理(account management):检查帐户是否被允许登录系统,帐号是否已经过 期,帐号的登录是否有时间段的限制等;
密码管理(password management):主要是用来修改用户的密码;
会话管理(session management):主要是提供对会话的管理和记账。 控制类型也可以称做 Control Flags,用于 PAM 验证类型的返回结果。
1)required 验证失败时仍然继续,但返回 Fail
2)requisite 验证失败则立即结束整个验证过程,返回 Fail
3)sufficient 验证成功则立即返回,不再继续,否则忽略结果并继续
4)optional 不用于验证,只是显示信息(通常用于 session 类型)

[root@localhost pam.d]#cat system-auth
第一列type   第二列 control   第三列配置文件   第四列参数
#验明正身,是张三李四王五
auth        required      #pam_env.so
auth        required      pam_faildelay.so delay=2000000
auth        sufficient    pam_fprintd.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        required      pam_deny.so
#账户有效性,账户是否在有效期内
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     required      pam_permit.so
#密码策略  比如 长度,复杂性
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so
#最多打开几个文件
session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
#带横线 代表可选,后面的模块可能没有
-session     optional      pam_systemd.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so

retry=3 authtok_=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
#最多打开几个文件
session optional pam_keyinit.so revoke
session required pam_limits.so
#带横线 代表可选,后面的模块可能没有
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
sudo

sudo 即superuser do,允许系统管理员让普通用户执行一些或者全部的root命令的一个工具,如halt,reboot,su等等。这样不仅减少了root用户的登录 和管理时间,同样也提高了安全性在最早之前,一般用户管理系统的方式是利用su切换为超级用户。但是使用su的缺点之一在于必须要先告知超级用户的密码。sudo于1980年前后推出,sudo使一般用户不需要知道超级用户的密码即可获得权限。首先超级用户将普通用户的名字、可以执行的特定命令、按照哪种用户或用户组的身份执行等信息,登记在特殊的文件中(通常是/etc/sudoers),即完成对该用户的授权(此时该用户称为“sudoer”);在一般用户需要取得特殊权限时,其可在命令前加上“sudo”,此时sudo将会询问该用户自己的密码(以确认终端机前的是该用户本人),回答后系统即会将该命令的进程以超级用户的权限运行。之后的一段时间内(默认为5分钟,可在/etc/sudoers自定义),使用sudo不需要再次输入密码。由于不需要超级用户的密码,部分Unix系统甚至利用sudo使一般用户取代超级用户作为管理帐号,例如Ubuntu、Mac OS X等

sudo特性:

  • sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用 sudo,会提示联系管理员
  • sudo提供了丰富的日志,详细地记录了每个用户干了什么。它能够将日志传到中心主机或者日志服务器
  • sudo使用时间戳文件来执行类似的“检票”系统。当用户调用sudo并且输入它的密码时,用户获得了一张存活期为5分钟的票
  • sudo的配置文件是sudoers文件,它允许系统管理员集中的管理用户的使用权限和使用的主机。它所存放的位置默认是在/etc/sudoers,属性必须为0440
root@localhost ~]#vim /etc/sudoers
[root@localhost ~]#visudo
#语法检查

visudo -c
#检查语法

配置文件格式说明:/etc/sudoers, /etc/sudoers.d/

配置文件中支持使用通配符 glob

#用户    登入主机    =    (代表用户)     命令
#user  	host       =    (runas)       command
root     ALL=(root)                   A

user: 运行命令者的身份
host: 通过哪些主机 多个 192.168.91.100 - 110  localhost
(runas):以哪个用户的身份
command: 运行哪些命令这里插入代码片

别名

sudo别名有四种类型:

  • User_Alias(用户)
  • Runas_Alias(代表用户)
  • Host_Alias(登录主机)
  • Cmnd_Alias(命令)

别名格式:必须大写字母,数字可以使用但是不能放在开头

User和runas: 
 username
 #uid
 %group_name
 %#gid
 user_alias|runas_alias
host:
 ip或hostname
 network(/netmask)
 host_alias
command:
 command name
 directory
 sudoedit
 Cmnd_Alias

###别名
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

root  ALL=(ALL)  ALL
用户   主机名ip=    命令

子目录

[root@localhost sudoers.d]#vim /etc/sudoers.d/test
lisi ALL= sudoedit
#lisi 变相管理员 ,可以使用 sudoedit 命令
lisi  vim sudoers
[root@localhost sudoers.d]#chmod 440 test 
#设置权限,加固安全

[root@localhost ~]#su lisi
[lisi@localhost root]$ sudoedit /etc/sudoers
#李四使用sudoedit  可以修改sudo配置文件


通配符
? 任意单一字符
* 匹配任意长度字符
[wxc] 匹配其中一个字符
[!wxc] 除了这三个字符的其它字符
\x 转义 
 [[alpha]] 字母  
 
 
[root@localhost sudoers.d]#vim /etc/sudoers.d/test
liliu ALL= /bin/cat /var/log/vmware*
  • 29
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值