一、账号安全基本措施
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文件中的内容,且不允许直接编辑该文件中的内容。
**字段1:**用户账号的名称
**字段2:**使用MD5加密的密码字串信息,若为"*"或“!!”表示此用户不能登录到系统,若为空字段表示此用户无需密码即可登录系统。
**字段3:**上次修改密码的时间,表示从1970年01月01日算起到最近一次修改密码时间隔的天数(18445)
**字段4:**密码的最短有效天数,自本次修改密码后,必须至少经过该天数才能再次修改密码。默认值为0,表示不进行限制
**字段5:**密码的最长有效天数,自本次修改密码后,经过该天数以后必须再次修改密码。默认值为99999,表示不进行限制(99999)
**字段6:**提前多少天警告用户密码将过期,默认值为7(7)
**字段7:**在密码过期之后多少天禁用此用户
**字段8:**帐号失效时间,此字段指定了用户作废的天数(从1970年01月01日起计算),默认值为空,表示账号永久可用。
**字段9:**保留字段(未使用)
注:字段7、8、9使用较少,一般使用默认,了解即可
2、密码安全控制
- 设置密码有效期
- 要求用户下次登录时修改密码
vim /etc/login.defs #修改密码配置文件(适用于新建用户)
chage -M 30 lisi #适用于已有用户
chage -d 0 zhangsan #强制在下次登录时更改密码(shadow文件中的第三个字段被修改为0)
新用户vim /etc/login.defs 设置密码有效期
最多多少天后必须改密码
密码的最长有效天数改为30
新建用户wangwu可以看到第五字段变为30
已有用户 chage -M 30 zhangsan
没改前还是默认99999
执行命令chage -M 30 zhangsan后第五字段变为30
下次登录强制改密码
3、命令历史的限制
vi /etc/profile
找到(HISTSIZE=1000)1000就是显示保留的命令行数,减少命令行数就改此数值。
export HISTSIZE=数值,当前用户环境下生效,重启失效。
1)vi /etc/profile减少命令行数
举例改为20行
source /etc/profile调用配置,让修改配置生效
查看历史命令可以看到只有20行
2)export HISTSIZE=数值减少命令行数
举例5行
3)登录时自动清空历史命令
vim ~/.bashrc
echo " " > ~/.bash_history
4、终端自动注销
vim /etc/profile #编辑profie文件
TMOUT=600 #600秒闲置,终端注销
soure /etc/profile #执行一次配置文件,让配置文件生效
二、su命令
1)切换用户
su 目标用户
root用户su其他用户不需要输密码
普通用户su其他用户需要输密码
2)限制使用su命令的用户
第一步:将允许使用su命令的用户加入wheel组
gpasswd -a 用户 wheel #添加用户到wheel组中
grep wheel /etc/group #确定wheel组成员
第二步:启用pam_wheel认证模块
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
会看就行
三、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 类型)。不管成功、失败,继续下一模块的验证,且此模块的服务也能享用。
四、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授权
五、开关机安全
1)调整BIOS引导设置
(1)将第一引导设备设为当前系统所在硬盘。
(2)禁止从其他设备(光盘、U盘、网络)引导系统,将对应的项设置为“disabled”。
(3)将安全级别设为setup,并设置管理员密码。
2、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重启
六、终端登录
1、限制root用户
linux系统启动时,login程序会读取 /etc/securetty文件(安全终端配置文件),决定允许root用户从哪些终端登录。所以想要限制需要编辑 /etc/securetty文件。root用户默认可以使用所有终端,不允许哪几个终端登录直接编辑 /etc/securetty 找到终端前面加”#“注释掉。
2、限制普通用户
login 程序会检查/etc/nologin 文件是否存在,如果存在,则拒绝普通用户登录系统(root 用户不受限制)
touch /etc/nologin #禁止普通用户登录
rm -rf /etc/nologin #取消登录限制
普通用户无法登录了,root用户可以登录。删除nologin文件后,恢复正常。重启也可以恢复正常,但在实际情况下,公司内部不会让你重启服务器,所以需要删除文件。
来源:oschina
链接:https://my.oschina.net/u/4342210/blog/4791954