1、帐号安全基本措施
一、系统帐号清理
- 将非登陆用户的shell设为/sbin/nologin
usermod -s /sbin/nologin 用户名
- 锁定长期不使用的帐号
usermod -L 用户名 passwd -l 用户名 passwd -S 用户名
- 删除无用的帐号
userdel 【-r】用户名
- 锁定帐号文件passwd、shadow
chattr +i /etc/passwd /etc/shdow #锁定文件 chattr -i /etc/passwd /etc/shdow #解锁文件 lsattr /etc/passwd /etc/shdow #查看状态
用户帐号文件/etc/shadow
默认只有root用户可以读取shadow文件中的内容,且不容许直接编辑该文件中的内容。
linux
**字段1:**用户帐号的名称
**字段2:**使用MD5加密的密码字串信息,若为"*"或“!!”表示此用户不能登陆到系统,若为空字段表示此用户无需密码便可登陆系统。
**字段3:**上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数(18445)
**字段4:**密码的最短有效天数,自本次修改密码后,必须至少通过该天数才能再次修改密码。默认值为0,表示不进行限制
**字段5:**密码的最长有效天数,自本次修改密码后,通过该天数之后必须再次修改密码。默认值为99999,表示不进行限制(99999)
**字段6:**提早多少天警告用户密码将过时,默认值为7(7)
**字段7:**在密码过时以后多少天禁用此用户
**字段8:**账号失效时间,此字段指定了用户做废的天数(从1970年01月01日起计算),默认值为空,表示帐号永久可用。
**字段9:**保留字段(未使用)
注:字段七、八、9使用较少,通常使用默认,了解便可
shell
二、密码安全控制
- 设置密码有效期
- 要求用户下次登陆时修改密码
vim /etc/login.defs #修改密码配置文件(适用于新建用户) chage -M 30 lisi #适用于已有用户 chage -d 0 zhangsan #强制在下次登陆时更改密码(shadow文件中的第三个字段被修改成0)
新用户vim /etc/login.defs 设置密码有效期
最多多少天后必须改密码
密码的最长有效天数改成30
新建用户wangwu能够看到第五字段变为30
vim
已有用户 chage -M 30 zhangsan
没改前仍是默认99999
执行命令chage -M 30 zhangsan后第五字段变为30
安全
下次登陆强制改密码
三、命令历史的限制
vi /etc/profile 找到(HISTSIZE=1000)1000就是显示保留的命令行数,减小命令行数就改此数值。 export HISTSIZE=数值,当前用户环境下生效,重启失效。
1)vi /etc/profile减小命令行数
举例改成20行
source /etc/profile调用配置,让修改配置生效
查看历史命令能够看到只有20行
bash
2)export HISTSIZE=数值减小命令行数
举例5行
服务器
3)登陆时自动清空历史命令
vim ~/.bashrc echo " " > ~/.bash_history
四、终端自动注销
vim /etc/profile #编辑profie文件 TMOUT=600 #600秒闲置,终端注销 soure /etc/profile #执行一次配置文件,让配置文件生效
2、su命令
1)切换用户
su 目标用户
root用户su其余用户不须要输密码
普通用户su其余用户须要输密码
网络
2)限制使用su命令的用户
第一步:将容许使用su命令的用户加入wheel组session
gpasswd -a 用户 wheel #添加用户到wheel组中 grep wheel /etc/group #肯定wheel组成员
第二步:启用pam_wheel认证模块
ui
vim /etc/pam.d/su #编辑/etc/pam.d/su文件 auth sufficient pam_rootok.so #pam_rootok.so模块的主要做用是使uid为0的用户root可以直接经过认证而不用输入密码 ... #省略部分 auth required pam_wheel.so use_uid #pam_wheel.so做用是让wheel组内的用户使用su命令,其余人(包括root)没法使用su命令 每种状态的解释: 两行都注释:全部用户都能使用su命令,切换时root和普通用户都须要密码验证 开启第一行,注释第二行:(默认状态)容许全部用户间使用su命令进行切换的,切换时,root不须要密码,其余用户须要密码。 注释第一行,开启第二行:只有wheel组内的用户才能使用su命令,root用户也没法切换。 两行都开启:只有root用户和wheel组内的用户才可使用su命令。
初始
加密
-
两行都注释:全部用户都能使用su命令,切换时root和普通用户都须要密码验证
-
开启第一行,注释第二行:(默认状态)容许全部用户间使用su命令进行切换的,切换时,root不须要密码,其余用户须要密码。(前面有不演示了)
-
注释第一行,开启第二行:只有wheel组内的用户才能使用su命令,root用户也没法切换。
- 两行都开启:只有root用户和wheel组内的用户才可使用su命令。
3)查看su操做记录
cat /var/log/secure #安全日志文件/var/log/secure
会看就行
3、PAM安全认证
su命令的安全隐患
- 默认状况下,任何用户都容许使用su命令,有机会反复尝试其余用户(如root)的登陆密码,带来安全风险
- 为了增强su命令的使用控制,可借助于PAM认证模块,只容许极个别用户使用su命令进行交换
PAM可插拔式认证模块
- 是一种高效并且灵活便利的用户级别的认证方式
- 也是当前linux服务器广泛使用的认证方式
PAM认证原理
1.PAM 认证通常遵循的顺序:Service(服务)→PAM(配置文件)→pam_*.so;(认证模块)
2.PAM认证首先要肯定哪一项应用服务,而后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证模块(位于 /lib64/security/下)进行安全认证。
3.用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证。
4.不一样的应用程序所对应的PAM 模块也是不一样的。
这里想看某个程序是否支持PAM认证,能够用ls命令查看/etc/pam.d/。
PAM认证的构成
查看某个程序是否支持PAM模块认证
示例:查看su是否支持PAM模块认证 ls /etc/pam.d | grep su
查看su的PAM配置文件
cat /etc/pam.d/su
- 每一行都是一个独立的认证和过程,它们按从上往下的顺序依次由PAM模块调用
- 每行都有三个分区:认证类型、控制类型、PAM模块、PAM模块参数
认证模块类型 第一列
auth:对用户身份进行识别,如提示输入密码,判断是否为root。
account:对帐号各项属性进行检查,如是否容许登陆系统,账号是否已通过期,是否达到最大用户数等。
password:使用用户信息来更新数据,如修改用户密码。
session:定义登陆前以及退出后所要进行的会话操做管理,如登陆链接信息,用户数据的打开和关闭,挂载文件系统。
控制类型第二列
required:须要返回一个成功值,若是返回失败,不会马上将失败结果返回,而是继续进行同类型的下一验证,全部此类型的模块都执行完成后,再返回失败。该行以及所涉及模块的成功是用户经过鉴别的必要条件
requisite:与required相似,但若是此模块返回失败,则马上返回失败并表示此类型失败。
sufficient:若是此模块返回成功,则无论后面的验证,直接向程序返回成功,表示验证经过,若是返回失败,则能够当作optional。(慎用)
optional:不进行成功与否的返回,通常不用于验证,只是显示信息(一般用于 session 类型)。无论成功、失败,继续下一模块的验证,且此模块的服务也能享用。
include :表示在验证过程当中调用其余的PAM配置文件。好比不少应用经过完整调用/etc/pam.d/system-auth(主要负责用户登陆系统的认证工做)来实现认证而不须要从新逐一去写配置项。
PAM模块第三列
第三列表明PAM模块,默认是在/lib64/security/目录下,若是不在此默认路径下,要填写绝对路径。
PAM模块的参数
第四列表明PAM模块的参数,这个须要根据所使用的模块来添加。
PAM安全认证流程
required:验证失败时仍然继续进行同类型的下一验证,全部此类型的模块都执行完成后,返回失败
requisite:验证失败则当即结束整个验证过程返回失败
sufficient:若是此模块返回成功,则无论后面的验证,直接向程序返回成功,表示验证经过,若是返回失败,则能够当作optional。(慎用)
optional:不进行成功与否的返回,通常不用于验证,只是显示信息(一般用于 session 类型)。无论成功、失败,继续下一模块的验证,且此模块的服务也能享用。
4、sudo
sudo是一种受权命令。以其余用户身份(如root)执行受权的命令
配置命令:
visudo 或者 vim /etc/sudoers(此文件的默认权限为 440,保存退出时必须执行“:wq!”命令来强制操做) 记录格式:用户 主机名=命令程序列表
语法格式:
用户 主机名=命令程序列表 用户 主机名=(用户) 命令程序列表
解释:
用户:直接受权指定的用户名,或采用“%组名”的形式(受权一个组的全部用户)。
主机名:使用此规则的主机名。没配置过主机名时可用localhost,有配过主机名则用实际的主机名,ALL则表明全部主机
(用户):用户可以以何种身份来执行命令。此项可省略,缺省时以root用户的身份来运行命令
命令程序列表:容许受权的用户经过sudo方式执行的特权命令,需填写命令程序的完整路径,若是不知道路径能够用“which”查,多个命令之间以逗号“,”进行分隔。ALL则表明系统中的全部命令;通配符“*”表示全部、取反符号“!”表示排除
举例 lisi 可用 ifconfig
visudo编辑最后面加上 (用户 主机名=命令程序列表)
启动sudo操做日志
visudo #进入编辑 Defaults logfile = /var/log/sudo #将该命令添加至最后一行:wq保存并退出便可
进入visudo编辑 G 可直接到最后一行
别名建立
使用关键字 User_Alias、Host_Alias、Cmnd_Alias 来进行设置别名(别名必须为大写) 多个信息须要用“,”隔开。 User_Alias JISHU=用户名1,用户名2,用户名3 #用户别名,JISHU表明后面三个用户 Host_Alias HELLO=localhost,lisi #主机别名 Cmnd_Alias CMN=/sbin/*,!/sbin/useradd,!/sbin/userdel #命令别名(除了这些命令其余都能用) USERS HOSTS=CMNDS #使用别名编写受权
命令文件前"!"都得是英文格式,中文格式会报错。
配置好验证下
sudo -l 能够查看当前用户sudo受权
5、开关机安全
1)调整BIOS引导设置
(1)将第一引导设备设为当前系统所在硬盘。
(2)禁止从其余设备(光盘、U盘、网络)引导系统,将对应的项设置为“disabled”。
(3)将安全级别设为setup,并设置管理员密码。
二、GRUB限制
grub2-mkpasswd-pbkdf2 #使用grub2-mkpasswd-pbkdf2生成密钥 cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak cp /etc/grub.d/00_header /etc/grub.d/00_header.bak vim /etc/grub.d/00_header #修改/etc/grub.d/00_header文件,添加密码记录 cat << EOF set superusers="root" #设置用户名为root password_pbkdf2 root grub.pbkdf2…… #设置密码,省略部份内容为通过加密生成的密码字符串 EOF grub2-mkconfig -o /boot/grub2/grub.cfg #生成新的 grub.cfg 文件
init 6重启
6、终端登陆
一、限制root用户
linux系统启动时,login程序会读取 /etc/securetty文件(安全终端配置文件),决定容许root用户从哪些终端登陆。因此想要限制须要编辑 /etc/securetty文件。root用户默承认以使用全部终端,不容许哪几个终端登陆直接编辑 /etc/securetty 找到终端前面加”#“注释掉。
二、限制普通用户
login 程序会检查/etc/nologin 文件是否存在,若是存在,则拒绝普通用户登陆系统(root 用户不受限制)
touch /etc/nologin #禁止普通用户登陆 rm -rf /etc/nologin #取消登陆限制
普通用户没法登陆了,root用户能够登陆。删除nologin文件后,恢复正常。重启也能够恢复正常,但在实际状况下,公司内部不会让你重启服务器,因此须要删除文件。