Linux系统安全及应用

一.1.账号安全基本措施

  • 将用户设置为无法登录
  • 锁定账户
  • 删除账户
  • 锁定账户密码 本质锁定

2.将用户设置为无法登录

[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/nologin
3.锁定用户
[root@localhost ~]# passwd -l zhangsan
锁定用户 zhaosi 的密码 。
passwd: 操作成功
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhangsan
密码:
su: 鉴定故障
[root@localhost ~]# passwd -u zhangsan
解锁用户 zhaosi 的密码。
passwd: 操作成功
[root@localhost ~]# passwd -u zhangsan
解锁用户 zhaosi 的密码。
passwd: 操作成功
[root@localhost ~]# su zhangsan
[zhangsan@localhost root]$ su zhaangsan
密码:
[zhaosi@localhost root]$ 
3.删除账户(并删除家目录)
userdel -r  用户名
家目录 

家目录   无主文件  前主人的uid
4.切换用户

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

su [options...] [-] [user [args...]]

切换用户的方式:

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

su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换。说明:root su至其他用户无须密码;非root用户切换时需要密码

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

su 与 su -

即有 - 选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)。

[zhangsan@localhost ~]$ pwd
/home/zhangsan
[zhangsan@localhost ~]$ su 
密码:
[root@localhost zhangsan]# pwd
/home/zhangsan
[zhangsan@localhost ~]$ su -
密码:
上一次登录:二 7月 13 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

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

6.PAM安全认证

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

PAM提供了对所有服务进行认证的中央机制,适用于本地登录,远程登录,如:telnet,rlogin,fsh,ftp,点对点协议PPP,su等应用程序中,系统管理员通过PAM配置文件来制定不同应用程序的不同认证策略;应用程序开发者通过在服务程序中使用PAM API(pam_xxxx( ))来实现对认证方法的调用;而PAM服务模块的开发者则利用PAM SPI来编写模块(主要调用函数pam_sm_xxxx( )供PAM接口库调用,将不同的认证机制加入到系统中;PAM接口库(libpam)则读取配置文件,将应用程序和相应的PAM服务模块联系起来。重复利用别人的开发的功能,不必自己开发,会话,密码验证等功能,已经做好了调用下就可以了未来通用性,所以有了pam框架,类似淘宝 一边普通买家,一边卖家,淘宝上既是买家也是卖家

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个模块是二进制文件,不会直接修改


[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:   用来传递给该模块的参数
7.PAM工作原理

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

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

PAM认证过程:

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回传的结果决定下一个动作(重新输入密码或者通过验证)
8.shell模块,检查有效shell

不允许使用/bin/csh的用户本地登录

模块: pam_shells.so 只允许 规定的shell类型通过, 是在/etc/shells 文件中存在的 类型通过

[root@localhost ~]#vim /etc/pam.d/su
auth required pam_shells.so
#第一行添加


vim /etc/shells     
去掉 /bin/csh

useradd -s /bin/csh lisi

#testuser将不可登录
[root@centos7 ~]#tail /var/log/secure
9.securetty模块,只允许root用户登录
vi /etc/pam.d/remote
#将下面一行加上注释
#auth required pam_securetty.so 
#或者/etc/securetty文件中加入
pts/0,pts/1…pts/n
#测试用root telnet登录

yum install telnet-server.x86_64 -y
systemctl start  telnet.socket
ss 


[root@node2 ~]#telnet 192.168.91.100


[root@localhost pam.d]#vim remote 
auth       required     pam_securetty.so
10.pam nologin.so模块

如果/etc/nologin文件存在,将导致非root用户不能登陆,当该用户登陆时,会显示/etc/nologin文件内容,并拒绝登陆

范例: 默认此模块可以对ssh等登录有效,但不影响su登录

[root@centos7 pam.d]#grep pam_nologin *
login:account   required     pam_nologin.so
remote:account   required     pam_nologin.so
sshd:account   required     pam_nologin.so

二.1 limit

在用户级别实现对其可使用的资源的限制,例如:可打开的文件数量,可运行的进程数量,可用内存空间

修改限制的实现方式:

(1) ulimit命令

ulimit是linux shell的内置命令,它具有一套参数集,用于对shell进程及其子进程进行资源限制。

ulimit的设定值是 per-process 的,也就是说,每个进程有自己的limits值。使用ulimit进行修改,立即生效。

ulimit只影响shell进程及其子进程,用户登出后失效。

可以在profile中加入ulimit的设置,变相的做到永久生效

-H 设置硬件资源限制.
-S 设置软件资源限制.
-a 显示当前所有的资源限制.
-c size:设置core文件的最大值.单位:blocks
-d size:设置数据段的最大值.单位:kbytes
-f size:设置创建文件的最大值.单位:blocks
-l size:设置在内存中锁定进程的最大值.单位:kbytes
-m size:设置可以使用的常驻内存的最大值.单位:kbytes
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n
-p size:设置管道缓冲区的最大值.单位:kbytes
-s size:设置堆栈的最大值.单位:kbytes
-t size:设置CPU使用时间的最大上限.单位:seconds
-u size:最大用户进程数
-v size:设置虚拟内存的最大值.单位:kbytes
unlimited 是一个特殊值,用于表示不限制
[root@localhost pam.d]#ulimit -a
#可以看到系统的相关 资源限制 设置

#使用压力测试工具进行测试  打开的文件数
ab -c1025 -n 2000 http://192.168.91.100/
#必须这样写, 包括url 后面的 斜杠/


[root@localhost pam.d]#ulimit -n  10000
#修改最大值  临时修改

[root@localhost security]#vim /etc/security/limits.conf 
#永久修改不用重启   软硬一起设置可以直接使用 -
zhangsan         -       nproc            5

su  -   zhangsan
#切换时  注意要完全切换


pgrep -lu  zhangsan
2.sudo

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

mount /dev/sr0 /mnt
mount /dev/sr0 /mnt/



/bin/mount     /dev/cdrom   /mnt
/usr/bin/mount /dev/cdrom  /mnt/



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

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

User和runas: 
 username(用户名)
 #uid(id号)
 %group_name(组名)
 %#gid(组id)
 user_alias|runas_alias(别名)   MYUSER=zhangsan,lisi
host:
 ip或hostname(IP地址或主机名)
 host_alias(别名)  localhost 
command:
 command name  (命令)
 directory     (文件夹里的命令)
 sudoedit      (可以编辑sudoers这个文件,变相变成管理员)
 Cmnd_Alias    (命令别名)
root ALL=(ALL) ALL
## Allow root to run any commands anywhere 
root     ALL=(ALL)      ALL      
lisi     ALL=(root)     /usr/bin/mount /dev/cdrom /mnt/



#可以跟多个命令
lisi     ALL=(root)     /usr/bin/mount /dev/cdrom /mnt/,/usr/bin/mount  /mnt/

#也可以对组进行操作
%在前表示组
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL 

[root@localhost ~]#gpasswd -a liwu wheel
正在将用户“liwu”加入到“wheel”组中
wheel组表示管理员组是比较特殊的一个组,在wheel组中的成员可以使用任何命令

[root@localhost ~]#vim /etc/passwd
#修改passwd文件中root的uid

[root@localhost ~]$sudo -ulisi cat /etc/shadow
#-u指定用户的意思

####密码问题

[root@localhost ~]#sudo -V
#可以查看相关配置信息

#67  Defaults   env_reset,timestamp_timeout=2

#启用sudo操作日志
visudo
Defaults logfile = "/var/log/sudo"
mount /dev/sr0 /mnt
mount /dev/sr0 /mnt/



/bin/mount     /dev/cdrom   /mnt
/usr/bin/mount /dev/cdrom  /mnt/


lisi    ALL=(root)      /usr/bin/mount /dev/sr0 /mnt/

lisi    ALL=(root)     NOPASSWD:/usr/bin/mount /dev/sr0 /mnt/
#无需密码 检票机制,5分钟左右不需要



支持通配符
ll /var/log/
希望普通用户可以看日志
lisi    ALL=(root)      /bin/cat   /var/log/vmware*


修改输入密码时间
[root@localhost ~]#sudo -V
认证时间戳延时:5.0 分钟
密码提示延时:5.0 分钟

vim /etc/sudoers
#67  Defaults   env_reset,timestamp_timeout=2

#启用sudo操作日志
visudo
Defaults logfile = "/var/log/sudo"

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值