博文目录
1、帐号安全控制
2、基本安全措施
3、用户切换与提权
4、开关机安全控制
5、终端及登陆控制linux
用户帐号是计算机使用者的身份凭证或标识,每一个要访问系统资源的人,必须凭借其用户帐号才能进入计算机。在Linux操做系统中提供了多种机制来确保用户帐号的正当、安全使用。算法
各类非登陆用户帐号中,还有至关一部分是不多用到的,如“games”等,这些用户帐号能够视为冗余帐号,直接删除便可,包括一些程序帐号,若卸载程序后,帐号没能被删除,则须要咱们手动进行删除。shell
对于Linux服务器中长期不用的用户帐号,若没法肯定是否应该删除,能够暂时将其锁定。示例以下:vim
[root@centos01 ~]# usermod -L zhangsan <!--锁定帐户--> [root@centos01 ~]# passwd -S zhangsan <!--查看帐户状态--> zhangsan LK 2019-11-22 0 99999 7 -1 (密码已被锁定。) [root@centos01 ~]# usermod -U zhangsan <!--解锁zhangsan帐户--> [root@centos01 ~]# passwd -S zhangsan <!--查看帐户状态--> zhangsan PS 2019-11-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
[root@centos01 ~]# passwd -l zhangsan<!--锁定zhangsan帐户--> 锁定用户 zhangsan 的密码 。 passwd: 操做成功 [root@centos01 ~]# passwd -S zhangsan <!--查看帐户状态--> zhangsan LK 2019-11-22 0 99999 7 -1 (密码已被锁定。) [root@centos01 ~]# usermod -U zhangsan <!--解锁zhangsan帐户--> [root@centos01 ~]# passwd -S zhangsan <!--查看帐户状态--> zhangsan PS 2019-11-22 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
若是服务器中的用户帐号已经固定,再也不进行更改,还能够采起锁定帐号配置文件的方法。使用chattr命令,分别结合“+i” “-i”选项来锁定、解锁文件,使用lsattr命令能够查看文件锁定状况。示例以下:centos
[root@centos01 ~]# chattr +i /etc/passwd /etc/shadow <!--禁用帐户密码配置文件--> [root@centos01 ~]# lsattr /etc/passwd /etc/shadow <!--查看锁定的帐户密码配置文件--> ----i----------- /etc/passwd ----i----------- /etc/shadow [root@centos01 ~]# chattr -i /etc/passwd /etc/shadow <!--解锁帐户密码配置文件--> [root@centos01 ~]# lsattr /etc/passwd /etc/shadow<!--查看锁定的帐户密码配置文件--> ---------------- /etc/passwd ---------------- /etc/shadow
在帐号文件被锁定的状况下,其内容将不容许变动,所以没法添加、删除帐号,也不能更改用户的密码、登陆Shell、宿主目录等属性信息。安全
为了下降密码被第三方破解或被猜出的危险性,能够设置密码有效期来限制密码最大有效天数,对于密码已过时的用户,登陆时则必须重置密码,不然将拒绝登陆。bash
[root@centos01 ~]# vim /etc/login.defs <!--适用于新建的用户--> ........................ <!--此处省略部分--> PASS_MAX_DAYS 10 <!--将该配置项默认的值“99999”改成所指望的值,如10天。--> [root@centos01 ~]# chage -d 5 zhangsan <!--设置密码过时时间为5天--> [root@centos01 ~]# cat /etc/shadow <!--查看密码过时时间是否设置成功--> zhangsan:$6$cigVri.K$wME7C78i0uvZpCSBzpYdoKcuxX.QkiLw7/3bsEZz5/IZWm9jZtT6ExSzmiwa0eFqjGQuuSza8CX7TeITQQNYJ/:5:0:99999:7::: [root@centos01 ~]# chage -d 0 zhangsan <!--设置zhangsan用户下次登陆修改密码--> <!--从新登陆设置新密码--> 更改用户 zhangsan 的密码 。 为 zhangsan 更改 STRESS 密码。 (当前)UNIX 密码: <!--输入当前密码--> 新的 密码:<!--设置新密码(切记不能和此前的密码类似)--> 从新输入新的 密码: <!--肯定新密码--> passwd:全部的身份验证令牌已经成功更新。 [zhangsan@centos01 ~]$
Shell环境的命令历史机制为用户提供了极大的便利,但另外一方面也给用户带来了潜在的风险。只要得到用户的命令历史文件,该用户的命令操做过程将会尽收眼底,若是曾经在命令行输入明文的密码,则无心之中服务器的安全壁垒又多了一个缺口。历史命令的记录条数由变量HISTSIZE控制,默认为1000条。经过修改/etc/profile文件中的HISTSIZE变量值,能够影响系统中的全部用户。示例以下:服务器
[root@centos01 ~]# export HISTSIZE=5 <!--设置记录5条历史命令--> [root@centos01 ~]# history <!--验证是否生效--> 6 chage -d 0 zhangsan 7 export HISTSIZE=10 8 history 9 export HISTSIZE=5 10 history [root@centos01 ~]# vim .bash_logout <!--设置重启或者注销清空历史命令--> # ~/.bash_logout history -c clear [root@centos01 ~]# export TMOUT=500 <!--终端500秒无人操做自动注销-->
须要注意的是,当正在执行程序代码编译、修改系统配置等时间较长的操做时,应避免设置TMOUT变量。必要时能够执行“unset TMOUT”命令取消TMOUT变量设置。网络
Linux系统为咱们提供了su、sudo两种命令。ide
- su命令:主要用来切换用户;
- sudo命令:用来提高执行权限;
su命令可使用的选项以下:
-:单纯使用-,如“su -”表明使用login-shell的变量文件读取方式来登陆系统;若没有指定用户名,则表明切换为root的身份。
-l:与“-”相似,但后面须要加想要切换的使用者帐号,也是login-shell的方式。
-m:表示使用目前的环境设置,而不读取新使用者的环境变量的配置文件。
- -c:仅进行一次指令,因此-c后面须要加上指令,命令格式为:su - -c "head -n 3 /etc/shadow",双引号内的就是要执行的命令。
使用su命令,能够切换为指定的另外一个用户,从而具备该用户的全部权限。固然,切换时须要对目标用户的密码进行验证(从root用户切换为其余用户时除外)。
默认状况下,任何用户都容许使用su命令,从而有机会反复尝试其余用户(如root)的登陆密码,这样带来了安全风险。为了增强su命令的使用控制,能够借助于pam_wheel认证模块,只容许极个别用户使用su命令进行切换。实现过程以下:将受权使用su命令的用户添加到wheel组,修改/etc/pam.d/su认证配置以启用pam_wheel认证。启用pam_wheel认证之后,未加入到wheel组内的其余用户将没法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。
示例以下:
[zhangsan@centos01 ~]$ su <!--普通用户切换到管理员--> 密码: [root@centos01 zhangsan]# cd [root@centos01 ~]# [zhangsan@centos01 ~]$ su --login<!--普通用户切换到root用户--> 密码: 上一次登陆:六 11月 23 07:53:15 CST 2019pts/2 上 [root@centos01 ~]# [root@centos01 ~]# su zhangsan <!--管理员切换到普通用户--> [zhangsan@centos01 root]$ cd [zhangsan@centos01 ~]$ [root@centos01 ~]# gpasswd -a zhangsan wheel <!--将zhangsan用户加入到wheel组--> 正在将用户“zhangsan”加入到“wheel”组中 [root@centos01 ~]# grep wheel /etc/group <!--验证是否加入到wheel组--> wheel:x:10:test,radmin,zhangsan [root@centos01 ~]# vim /etc/pam.d/su <!--配置su的pam验证--> #%PAM-1.0 auth sufficient pam_rootok.so auth required pam_wheel.so use_uidi [lisi@centos01 ~]#$su -root <!--尝试切换为root--> 密码: su:拒绝权限 <!--切换失败,仍为原用户-->
使用su命令切换用户的操做将会记录到安全日志/var/log/secure文件中,能够根据须要进行查看。
经过su命令能够很是方便地切换为另外一个用户,但前提条件是必须知道目标用户的登陆密码。若要从普通用户切换为root用户,必须知道root用户的密码。对于生产环境中的Linux服务器,每多一我的知道特权密码,其安全风险也就增长一分。
sudo命令的控制只需在/etc/sudoers配置文件中添加受权便可,文件的默认权限为440,须要使用专门的visudo工具进行编辑。虽然也能够用vim进行编辑,但保存时必须执行“:wq!”命令来强制操做,不然系统将提示为只读文件而拒绝保持。
配置文件/etc/sudoers中,受权记录的基本配置格式以下所示:
user MACHINE=COMMANDS
受权配置主要包括用户、主机、命令三个部分,即受权哪些人在哪些主机上执行哪些命令,各部分的具体含义以下:
- 用户(user):直接受权指定的用户名,或采用“%组名”的形式(受权一个组的全部用户)。
- 主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间共有同一份sudoers文件,通常设为localhost或者时间的主机名便可。
- 命令(COMMANDS):容许受权的用户经过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号“,”进行分隔。
典型的sudo配置记录中,每行对应一个用户或组的sudo受权配置。若要受权用户zhangsan可以执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码便可执行任何命令。示例以下:
[root@centos01 ~]# vim /etc/sudoers root ALL=(ALL) ALL zhangsan localhost=/sbin/ifconfig <!--针对用户zhangsan设置命令的使用权限--> %wheel ALL=NOPASSWD:ALL<!--针对组wheel设置命令的使用权限--> :wq! [zhangsan@centos01 ~]$ sudo ifconfig ens32 192.168.100.20 255.255.255.0 <!--zhangsan帐户修改IP地址--> [sudo] zhangsan 的密码:
当使用相同受权的用户较多,或者受权的命令较多时,能够采用集中定义的别名。用户、主机、命令部分均可以定义为别名(必须为大写),分别经过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。示例以下:
[root@centos01 ~]# vim /etc/sudoers ......................... <!--此处为省略部分--> User_Alias OPERATORS=lisi,wangwu,zhaoliu <!--定义用户名列表--> Host_Alias MAILSVRS=smtp,pop <!--定义主机列表--> Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum <!--定义命令列表--> OPERATORS MAILSVRS=PKGTOOLS <!--使定义的列表关联起来-->
sudo配置记录的命令部分可使用通配符 “ * ” 、取反符号“ !”,当须要受权某个目录下的全部命令或取消其中个别命令时特别有用。。例如:受权用户zhangsan能够执行/sbin/目录下除了ifconfig、route之外的其余命令,而且启用日志记录:
[root@centos01 ~]# vim /etc/sudoers ......................... zhangsan localhost=/sbin/*,!/sbin/ifconfig,!/sbin/route <!--通配符及取反符的应用--> Defaults logfile = "/var/log/sudo" <!--启用日志记录-->
sudo命令使用中注意事项:
一、第一次经过sudo命令执行命令时,必须以用户本身的密码进行验证,此后再次执行sudo命令,只要与前一次sudo操做的间隔时间不超过5分钟,则不需重复验证。
二、若想要查看用户本身得到哪些sudo受权,能够执行“ sudo -l”,如果某个用户的sudo权限列表中出现了(ALL) ALL字样,则表示受权有误,此时,该用户拥有全部命令的执行权限。若visudo命令编辑的受权列表没有错误的话,就须要看看是否将该用户添加到了wheel组中,而且启用了pam_wheel认证。
一般大部分服务器是经过远程登陆的方式来进行管理的,而本地引导和终端登陆过程每每容易被忽视,从而留下安全隐患。特别是当服务器所在的机房环境缺少严格、安全的管控制度时,如何防止其余用户的非受权介入就成为必须重视的问题。
1)将第一优先引导设备(First Boot Device)设为当前系统所在磁盘。
2)禁止从其余设备(如光盘、U盘、网络等)引导系统,对应的项为“Disabled”。
3)将BIOS的安全级别改成“setup”,并设置好管理密码,以防止未受权的修改。
[root@centos01 ~]# systemctl mask ctrl-alt-del.target<!--设置禁用ctrl+alt+del键--> [root@centos01 ~]# systemctl daemon-reload<!--从新加载服务-->
若要从新开启ctrl-alt-del快捷键功能,示例以下:
[root@centos01 ~]# systemctl unmask ctrl-alt-del.target Removed symlink /etc/systemd/system/ctrl-alt-del.target. [root@centos01 ~]# systemctl daemon-reload
当Linux系统在启动时,到了下面这个界面,按“e”就能够进入GRUB引导菜单,而且经过修改配置后,无须任何密码就能够进入系统环境中,这个漏洞显然对服务器是一个极大的漏洞,那么能够执行如下操做,为grub菜单设置一个密码,只有提供正确的密码才被容许修改引导参数:
[root@centos01 ~]# grub2-mkpasswd-pbkdf2 <!--设置生成grub引导菜单密码--> 输入口令: Reenter password: PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B [root@centos01 ~]# cp /etc/grub.d/00_header <!--备份引导菜单--> /etc/grub.d/00_header.bak [root@centos01 ~]# cp /boot/grub2/grub.cfg<!--备份引导菜单--> /boot/grub2/grub.cfg.bak [root@centos01 ~]# vim /etc/grub.d/00_header <!--修改grub引导菜单加载密码(末行)--> cat <<EOF set superusers="root" password_pbkdf2 root grub.pbkdf2.sha512.10000.7CC8455D40E48C538EFD1A8541FD31AA47AE61F4F39BD9F6E54994208810EA376BFBB96C3DDC0890B9F5109F83D2C7DEDBEACFD82C50790663396800FB3A3D3B.ECEF6AB02079526822C2722ADC8E4427783F30C0CDA26BC930FA067F10C5D9A583DA5861D4546F2976FCEB037A3F3BEB0164C8748F1D40791656389DC72EC31B EOF [root@centos01 ~]# grub2-mkconfig -o /boot/grub2/grub.cfg <!--生成grub引导菜单--> Generating grub configuration file ... /etc/grub.d/00_header.bak: line 360: warning: here-document at line 359 delimited by end-of-file (wanted `EOF') Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-2b580d1a2e8348b8aa9f78be11137b41 Found initrd image: /boot/initramfs-0-rescue-2b580d1a2e8348b8aa9f78be11137b41.img done
如今重启服务器,进入grub菜单时,按E键将没法修改引导参数,若要修改,还需输入正确的grub用户名及密码:
在Linux系统中,login程序会读取/etc/securetty文件,以决定容许root用户从哪些终端(安全终端)登陆系统。若要禁止root用户从指定的终端登陆,只需从该文件中删除或者注释掉对应的行便可。例如,若要禁止root用户从tty五、tty6登陆,能够修改/etc/securetty文件,将tty五、tty6行注释掉:
[root@centos01 ~]# vim /etc/securetty ......................... <!--此处省略部份内容--> #tty5 #tty6
当服务器正在进行备份或调试等维护工做时,可能不但愿再有新用户登陆系统的话,这时候,能够创建/etc/nologin文件便可,login程序会检查/etc/nologin文件是否存在,若是存在,则拒绝普通用户登陆系统(root用户不受限制)。这个方法只建议在服务器维护期间临时使用,当手动删除/etc/nologin文件或者从新启动主机后,便可恢复正常,以下:
[root@centos01 ~]# touch /etc/nologin
—————— 本文至此结束,感谢阅读 ——————