一.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模块的配置文件
-
主配置文件:/etc/pam.conf,默认不存在,一般不使用主配置
-
为每种应用模块提供一个专用的配置文件:/etc/pam.d/APP_NAME
-
注意:如/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"