linux的系统安全及应用

目录

一、账号的安全控制

1、账号的优化

2、密码的安全的控制

二、用户命令的权限控制

1、历史命令的管理

2、切换用户

3、pam模块

4、sudo

5、grub加密


一、账号的安全控制

1、账号的优化

账号的优化一般分为下面几个步骤

1、将一些用户设置无法登录,防止其破坏系统

2、锁定无用账号

3、删除长期不登录的闲置账号

4、锁定用户和账号密码的配置文件,防止系统被入侵

1.1 设置用户无法登录

通常linux中想让用户无法登录,一般会将用户的shell改为 /sbin/nologin ,而/sbin/login的作用是用户无法使用bash或其他shell来登陆系统而已,并不是说这个账号就无法使用系统资源。

1、查看用户的属性

 2、修改用户无法登录

 3、使用切换用户来验证用户是否能正常登录

1.2 锁定无用账号

1、锁定账号

 2、查看是否锁定

​​​​[root@localhost ~]# cat /etc/shadow |grep ^zs
# 查看密码的配置文件并检索出zs开头的用户

zs:!$6$LA7n3jCI3IvhMBHS$.9YqBUKpKwb9DHSIPX9KDVV4YJ5g04GxFQI8jdGx8XJoMqEgkdLrlAd03ahyCcjejZ7iKuO.Iv5OSlGxoSCTD.::0:99999:7:::

#!表示密码是锁定状态

 3、解锁账号并验证

[root@localhost ~]# usermod -U zs
#解锁zs用户的密码

[root@localhost ~]# cat /etc/shadow |grep ^zs
#  查看密码的配置文件并检索出zs开头的用户

zs:$6$LA7n3jCI3IvhMBHS$.9YqBUKpKwb9DHSIPX9KDVV4YJ5g04GxFQI8jdGx8XJoMqEgkdLrlAd03ahyCcjejZ7iKuO.Iv5OSlGxoSCTD.::0:99999:7:::

#密码字段开头没有!说明密码已经解锁

1.3 删除账号

[root@localhost ~]# userdel  lisi

#删除用户lisi

1.3 锁定用户配置文件

chattr

选项

(1)-a

让文件和目录追加用途

(2)+i

锁定文件和目录

(3)-i

解锁文件和目录

锁定配置文件

[root@localhost ~]# chattr +i /etc/passwd /etc/shadow

查看是否属于锁定状态

[root@localhost ~]# lsattr /etc/passwd /etc/shadow
----i----------- /etc/passwd
----i----------- /etc/shadow

2、密码的安全控制

2.1 密码规则的设定

1.新建用户设置密码规则

[root@localhost ~]# vim /etc/login.defs 
 
# 修改 /etc/login.defs 配置文件


PASS_MAX_DAYS   99999
# 密码最大有效期

PASS_MIN_DAYS   0
#两次密码修改最少间隔时间

PASS_MIN_LEN    5
#设置的密码长度,root用户无效


PASS_WARN_AGE   7
#密码过期前多少天提示

2、已有用户设置密码

chage [选项]  用户名

常见的选项

(1)m

设置密码最少到期天数

(2)M

设置密码最多到期天数

(3)W

密码到期前,提前收到警告提醒

(4)E

账号到期时不能使用该账号

(5)d

上一次密码到期的日期

[root@localhost ~]# chage -d 0 ls

  # 让 ls用户下次登录必须修改密码

[root@localhost ~]# chage -M 15 ls
# 设置用户ls 密码15天到期

[root@localhost ~]# cat /etc/shadow |grep ^ls


ls:$6$ViTJMlj1$Xgkd1y157FqI84nodUIgJZ8.YLYH8hBO8QnpTNaGkjuQ9HjViLyDfexoD5RVy.DDrEi.rX3KZtovzbr3PqbwT1:0:0:15:7:::
#第五字段有到期天数

二、用户命令的权限控制

1、历史命令管理

bash中默认命令记忆可达1000个。这些命令保存在主文件夹内的.bash_history中

1.1 设置历史命令保存个数

[root@localhost ~]# vim /etc/profile
#修改历史命令的保存个数

HISTSIZE=5
#当前历史命令为5个

. /etc/profile  
 #刷新配置文件

1.2 退出时清空命令

[root@localhost ~]# vim .bash_logout
#编辑配置文件


# ~/.bash_logout
echo " " > ~/.bash_history

#将空白写入到存放历史命令的文件

1.3 开机时清空历史命令

[root@localhost ~]# vim .bashrc
#编辑配置文件

echo " ">~/.bash_history

#将空白导入

[root@localhost ~]# . .bashrc
# 刷新配置文件

   

2、切换用户

su命令用于切换当前用户身份到其他用户身份,变更时须输入所要变更的用户帐号与密码

命令格式

su   用户名

su - 用户名

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

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

[root@localhost ~]# su zs
[zs@localhost root]$ pwd
/root
# 非登录式切换


[root@localhost ~]# su - zs
上一次登录:一 3月  7 14:33:15 CST 2022pts/0 上
[zs@localhost ~]$ pwd
/home/zs

#登录式切换


限制使用su 命令


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

[root@localhost ~]# vim /etc/pam.d/su
编辑配置文件

auth            required        pam_wheel.so use_uid
# 开启文件

3、pam模块

在Linux中执行有些程序时,这些程序在执行前首先要对启动它的用户进行认证,符合一定的要求之后才允许执行,例如login, su等。在Linux中进行身份或是状态的验证程序是由PAM来进行的,PAM(Pluggable Authentication Modules)可动态加载验证模块,因为可以按需要动态的对验证的内容进行变更,所以可以大大提高验证的灵活性。

Linux-PAM有四种模块类型,分别代表四种不同的任务,它们是:
认证管理(auth),账号管理(account),会话管理(session)和密码(password)管理,一个类型可能有多行,它们按顺序依次由PAM模块调用。

auth:表示鉴别类接口模块类型用于检查用户和密码,并分配权限;
这种类型的模块为用户验证提供两方面服务。让应用程序提示用户输入密码或者其他标记,确认用户合法性;通过他的凭证许可权限,设定组成员关系或者其他优先权。

account:表示账户类接口,主要负责账户合法性检查,确认帐号是否过期,是否有权限登录系统等;
这种模块执行的是基于非验证的帐号管理。他主要用于限制/允许用户对某个服务的访问时间,当前有效的系统资源(最多可以多少用户),限制用户位置(例如:root只能通过控制台登录)。

多数情况下auth和account会一起用来对用户登录和使用服务的情况进行限制。这样的限制会更加完整。比如下面是一个具体的例子:login是一个应用程序。Login要完成两件工作——首先查询用户,然后为用户提供所需的服务,例如提供一个shell程序。通常Login要求用户输入名称和密码进行验证。当用户名输入的时候,系统自然会去比对该用户是否是一个合法用户,是否在存在于本地或者远程的用户数据库中。如果该账号确实存在,那么是否过期。这些个工作是由account接口来负责。

如果用户满足上述登录的前提条件,那么它是否具有可登录系统的口令,口令是否过期等。这个工作就要由auth接口来负责了,他通常会将用户口令信息加密并提供给本地(/etc/shadow)或者远程的(ldap,kerberos等)口令验证方式进行验证。

如果用户能够登录成功,证明auth和account的工作已经完成。但整个验证过程并没有完全结束。因为还有一些其他的问题没有得到确认。例如,用户能够在服务器上同时开启多少个窗口登录,用户可以在登录之后使用多少终端多长时间,用户能够访问哪些资源和不能访问哪些资源等等。也就是说登录之后的后续验证和环境定义等还需要其他的接口。这就是我们下面要提到的两组接口:

session:会话类接口。实现从用户登录成功到退出的会话控制;
处理为用户提供服务之前/后需要做的些事情。包括:开启/关闭交换数据的信息,监视目录等,设置用户会话环境等。也就是说这是在系统正式进行服务提供之前的最后一道关口。

password:口令类接口。控制用户更改密码的全过程。也就是有些资料所说的升级用户验证标记。

required:表示该行以及所涉及模块的成功是用户通过鉴别的必要条件。换句话说,只有当对应于应用程序的所有带 required标记的模块全部成功后,该程序才能通过鉴别。同时,如果任何带required标记的模块出现了错误,PAM并不立刻将错误消息返回给应用程序,而是在所有模块都调用完毕后才将错误消息返回调用他的程序。 反正说白了,就是必须将所有的模块都执行一次,其中任何一个模块验证出错,验证都会继续进行,并在执行完成之后才返回错误信息。这样做的目的就是不让用户知道自己被哪个模块拒绝,通过一种隐蔽的方式来保护系统服务。就像设置防火墙规则的时候将拒绝类的规则都设置为drop一样,以致于用户在访问网络不成功的时候无法准确判断到底是被拒绝还是目标网络不可达。

requisite:与required相仿,只有带此标记的模块返回成功后,用户才能通过鉴别。不同之处在于其一旦失败就不再执行堆中后面的其他模块,并且鉴别过程到此结束,同时也会立即返回错误信息。与上面的required相比,似乎要显得更光明正大一些。

sufficient:表示该行以及所涉及模块验证成功是用户通过鉴别的充分条件。也就是说只要标记为sufficient的模块一旦验证成功,那么PAM便立即向应用程序返回成功结果而不必尝试任何其他模块。即便后面的层叠模块使用了requisite或者required控制标志也是一样。当标记为sufficient的模块失败时,sufficient模块会当做 optional对待。因此拥有sufficient 标志位的配置项在执行验证出错的时候并不会导致整个验证失败,但执行验证成功之时则大门敞开。所以该控制位的使用务必慎重。

optional:他表示即便该行所涉及的模块验证失败用户仍能通过认证。在PAM体系中,带有该标记的模块失败后将继续处理下一模块。也就是说即使本行指定的模块验证失败,也允许用户享受应用程序提供的服务。使用该标志,PAM框架会忽略这个模块产生的验证错误,继续顺序执行下一个层叠模块。

include:表示在验证过程中调用其他的PAM配置文件。在RHEL系统中有相当多的应用通过完整调用/etc/pam.d/system-auth来实现认证而不需要重新逐一去写配置项。这也就意味着在很多时候只要用户能够登录系统,针对绝大多数的应用程序也能同时通过认证。

4、sudo 命令

sudo是linux下常用的允许普通用户使用超级用户权限的工具,允许系统管理员让普通用户执行一些或者全部的root命令,如halt,reboot,su等等。这样不仅减少了root用户的登陆和管理时间,同样也提高了安全性。Sudo不是对shell的一个代替,它是面向每个命令的

4.1 给用户添加命令

[root@localhost ~]#  vim /etc/sudoers
# 进入提权的配置文件

zs      ALL=(root)      /usr/sbin/useradd, /usr/bin/su,/usr/sbin/which

加权限,这里的/usr/sbin/useradd ,/usr/bin/su, /usr/bin/which表示普通用户执行时必须使用全路径

4.2 别名

  1. Host_Alias:主机别名

  2. User_Alias:用户别名

  3. Runas_Alias:在哪些主机以谁的身份运行 的别名

  4. Cmnd_Alias:命令别名
[root@localhost ~]#  vim /etc/sudoers
# 进入提权的配置文件
Host_Alias USERHOST=kgc,localhost
# 定义主机别名  可以在哪些主机使用
User_Alias USERMYSE=ls
#定义能使用的用户
Cmnd_Alias MYCMDS=/usr/bin*,/usr/sbin*
#定义能使用的命令

5、grub 加密

 设置grub密码:

    众所周知,通过编辑GRUB启动参数可以轻松的进入单用户模式从而修改root密码,这对于一台多用户的计算机或服务器来说,无疑增加了安全隐患。大家一定很像为自己的GRUB加一把锁吧,大家可以通过GRUB的password参数对GRUB设置密码。

给cenos 6 grub 加密

[root@kgc ~]# grub2-mkpasswd-pbkdf2      #根据提示设置GRUB菜单的密码
输入口令:
Reenter password:  123456
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i

[root@kgc ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@kgc ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
#备份文件  
[root@kgc ~]# vim /etc/grub.d/00_header
#最后
cat << EOF 
set superusers="root"  
#设置登录用户

password_pbkdf2 root 
#设置密码
grub.pbkdf2.sha512.10000.E96097D1B1E470345D9FB62759335832B4A0F39CD4C9A57B502BD59CF1B8C393EEA37847984E242AAD4BFBB72E4BDC2196E6A7495CE7C86BF3D2498A34CAC2B7.B2EB99ED40267AE9496357B78C0DC04CE79957980A4A3FFA577B7502D70A5412D2EAD5CE4DAAC0FE068621CB29B76E44A7645EDCC7784FF20E113AF0B95E3467i
EOF
使用 grub2-mkconfig 命令生成新的 grub.cfg 配置文件。
[root@kgc ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的 grub.cfg 文件

重启系统进入GRUB菜单时,按e键将需要输入账号密码才能修改引导参数。

cat << EOF
set superusers="root"
password_pbkdf2 root  grub.pbkdf2.sha512.10000.4F3CD9383616C3AAFB1E98A289CB707A6FEEDAE7BEFB10A59642FE641C8F13AD9A27EAD43DEB07D9F4228149C716FA40C8C04E13E98FFAC45EF7AA2AD76C96B9.49CEC46B324DC9A94D0B461C711569ADB79213708929B1891232DB5FE31EC6F5A0A4E4D0A4AA0EAA64E38A6876EEB3B5EBF8991D0FB04537E1F39D1AA40D1AD5
EOF


cat << EOF
set superusers="用户" 
password_pbkdf2 用户  加密密码
EOF

给cenos 7 配置 grub密码

[root@localhost ~]# grub2-setpassword

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值