Linux CentOS 7系统安全控制详解(内容较多,可分次食用)

主要内容:

一、账号安全控制。

二、系统引导和登录控制。

三、弱口令检测。

四、端口扫描。

一、账号安全控制

1.系统账号清理

(1)将非登录用户的Shell设为/sbin/nologin

首先我们用命令“grep "bash$" /etc/passwd”查看一下可以登录的用户。

如果我们不想让“lisi”这个用户登录,我们可以用”usermod -s /sbin/nologin”命令禁止他登录,再去切换“lisi”用户发现不能登录。

(2)锁定长期不使用的账号

锁定与解锁账号有两组命令,“passwd -l”与“passwd -u”命令、“usermod -L”与“usermod -U”命令。我们分别演示一下,显示密码信息用的是“passwd -S”命令。


(3)删除无用的账号

删除账户用的是“userdel”命令,我们可以用“-r”选项,在删除用户时连同用户目录一同删除。

(4)锁定账号文件passwd、shadow

当我们不想别人在系统创建新的用户时,可以锁定账号文件passwd、shadow。用“lsattr”命令查看文件的锁定状态。“chattr +i”命令锁定账号文件,“chattr -r”命令解锁已经锁定的账号文件。此命令也可以用于其它文件。

2.密码安全控制

(1)设置密码有效期

用vim编辑器对“/etc/login.defs”配置文件中的“PASS_MAX_DAYS”后面的数值进行修改来改变密码有效期,不过这种方法只对新建用户有效,已存在用户是不会改变的。首先查看“lisi”用户的密码有效期是99999,相当于永久。

我们将“/etc/login.defs”配置文件中的“PASS_MAX_DAYS”后面的数值修改为30(密码有效期30天),然后查看“lisi”用户的密码有效期任然是99999(天)。



我们添加一个新用户“wangwu”,再查看“wangwu”用户的密码有效期是30(天)。

当我们想修改已有用户的密码有效期时,可以用“chage -M”命令来修改。

(2)设置用户下次登录时修改密码

我们用命令“chage -d 0 用户名”即可强制用户在下次登录时更改密码。但用了这条命令后,用户在更改密码就不能设置简单的密码了。密码最少8位字符,而且不能有连续的数字或字母(如:123、abc等)。

我们在终端用wangwu账户去登录,在输入密码后系统要求我们更改新密码,我输入“abcd1234”系统显示密码不合格。

当我输入“qwer2019”没有连续的数字、字母是时,密码设置成功。

3.命令历史限制

(1)减少记录的命令条数

我们在系统输入命令进行操作时,系统会自动记录历史命令,默认是记录1000条。我们用“history”命令可以查看。

有时候我们的命令历史中会有一些密码之类的隐私信息,别人很容易通过“history”命令查看到。所以我们可以通过减少记录命令的条数,来减少这种风险。直接用vim编辑器对“/etc/profile”配置文件进行修改即可。


修改完后是不会立即生效的,我们需要用“source /etc/profile”命令让它生效。再用“history”命令查看命令历史,命令历史记录条数已经变成10条了。

(2)注销时自动清空命令历史

前面我们知道命令历史可能会泄露我们的一些隐私信息,而且命令历史在系统注销后是不会清空的。如果我们想要在注销时自动清空命令历史,可以通过vim编辑器在“.bash_logout”配置文件里添加“history -c”与“clear”命令。


4.终端自动注销

我们可以设置终端闲置超时时间,当一段时间没有进行操作时系统自动自动注销终端。这样可以介绍别人趁我们不在时对系统进行操作的风险,通过vim编辑器在“/etc/profile”配置文件最后一行添加“export TMOUT”的时间即可。


在配置完毕别忘了用“source /etc/profile”命令让它生效。

二、系统引导和登录控制

1.su命令切换用户

(1)使用su命令切换用户(格式:su [-] 目标用户)

当我们想切换用户时可以用“su”命令,加上“-”选项将使用目标用户的登录Shell环境。root用“su”命令切换到任意用户都不需要密码验证,而普通切换到其他用户,需要验证目标用户的密码。“exit”命令可以返回到用“su”命令切换前的用户。

2.Linux中的PAM安全认证

(1)PAM简介:

全称PAM可插拔式认证模块(Pluggable Authentication Modules ),是由Sun提出的一种认证机制,通过提供一些动态链接库和一套统一的API,将系统提供的服务 和该服务的认证方式分开,使得系统管理员可以灵活地根据需要给不同的服务配置不同的认证方式而无需更改服务程序,同时也便于向系统中添加新的认证手段。它是一种高效而且灵活便利的用户级别的认证方式,它也是当前Linux服务器普遍使用的认证方式。

(2)PAM认证原理:

  • PAM认证一般遵循的顺序: Service (服务) →PAM (配置文件) →pam_* .so
  • PAM认证首先要确定哪一项服务,然后加载相应的PAM的配置文件(位于/etc/pam.d下),最后调用认证文件(位于/lib/security下)进行安全认证
  • 用户访问服务器的时候,服务器的某一个服务程序把用户的请求发送到PAM模块进行认证
  • 不同的应用程序所对应的PAM模块也是不同的

(3)PAM认证的构成:

查看某个程序是否支持PAM认证,可以用Is命令进行查看,例如查看su命令是否支持PAM模块认证我们可以输入“ls /etc/pam.d | grep su”命令行。

查看su的PAM配置文件输入“cat /etc/pam.d/su”即可,其中每一行都是一个独立的认证过程,每一行可以区分为三个字段。认证类型、控制类型、PAM模块及其参数。

(4)PAM安全认证流程:

控制类型也可以称做ControlFlags,用于PAM验证类型的返回结果

  • required验证失败时仍然继续,但返回Fail
  • requisite验证失败则立即结束整个验证过程,返回Fail
  • sufficient验证成功则立即返回,不再继续,否则忽略结果并继续
  • optional不用于验证,只显示信息(通常用于session类型)

(5)PAM的具体用法:限制用户使用su命令切换用户

前面我们了解了su命令,用户切换,但su命令其实存在安全隐患。在默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root) 的登录密码,带来安全风险。为了加强su命令的使用控制,可以借助于PAM认证模块,只允许极个别用户使用su命令进行切换。

我们先用vim编辑器对su命令的PAM配置文件“cat /etc/pam.d/su”进行修改,开启pam_wheel认证模块(直接删除#即可),然后“wq”保存退出。此时只有root和wheel组用户能使用su命令切换用户。



我们用“gpasswd -a”命令,将zhangsan用户添加到wheel组,此时zhangsan用户可以使用su命令。

我们用zhangsan用户使用su命令切换用户成功,在用lisi用户使用su命令切换用户失败,显示拒绝权限。

3.sudo机制提升权限

sudo 是一种权限管理机制,管理员可以授权于一些普通用户去执行一些 root 执行的操作,而不需要知道 root 的密码。严谨些说,sudo 允许一个已授权用户以超级用户或者其它用户的角色运行一个命令。

记录格式:用户 主机名列表=命令程序列表

(1)配置sudo授权

我们可以直接用“visudo”命令对sudo配置文件进行编辑,或是输入“vim /etc/sudoers”用vim编辑器进行编辑。


我们先用lisi账户登录来更改系统的IP地址结果失败,再用sudo提权命令进行更还是不行,因为我们没有给lisi用户提权。


再用zhangsan用户进行操作结果可以修改,因为我们前面将zhangsan用户添加到了wheel组,lisi用户没有添加。wheel组是默认安全组,在sudo配置文件里,wheel组默认可以执行所有sudo权限。


现在我们进入sudo命令配置文件,给lisi用户添加上“ifconfig”命令提权,然后保存退出。再用lisi用户去修改IP地址成功。



4.开关机安全控制

(1)GRUB限制

一般情况下我们在开机时的界面按“e”就可以进入grub菜单,这样很显然不安全。


下面我们开始给grub菜单设置密码,首先我们将它的两个配置文件进行备份,防止操作失误损坏了文件。

我们用“grub2-mkpasswd-pbkdf2”生成由哈希算法加密的密钥。输入口令就是输入你想设置的grub密码,“is”后面的所有字符就是加密的密码。

我们用vim编辑器在“/etc/grub.d/00_header”文件中,在文件末行下面添加它的密码命令,然后“wq”保存退出。

cat << EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.3F01896EA31EA9CBA8EF0A6C6CBCF2643463495ED9A3669B3D607A1C85EFD2136A4F05FEA396BDB9CC256E51EB4A3BA50D4156A2309FF846A7AC6C41FA48CF14.0B5C5D8D248C3BE1FA588F8E54F5937C68AE47FB359D715F255F43D32A69CC9C0426F8670BC718DCC9BD22C7D9E1CBE598DF766E8897E6BDE40E3541E40EE2EA

我们再输入“grub2-mkconfig -o /boot/grub2/grub.cfg”,进行配置。

我们再次重启系统,进入启动界面,按“e”不能直接进入grub菜单,提示我们输入密码,输入密码后成功进入。



5.终端登录安全控制

(1)限制root只能在安全终端登录

当我们想限制root用户在某个终端上登录时,只需用vim编辑器将“/etc/securetty”文件里的那个终端加上“#”注释掉即可,例如我们不想root在tty10、tty11终端登录,直接把这两个终端注释掉。

(2)禁止普通用户登录

当我们对服务器进行备份或调试等工作时,不希望用户登录。可以直接建立一个/etc/nologin文件即可,删除文件或重启即可恢复登录。




三、弱口令检测

我们用到的工具是Joth the Ripper ,简称JR。是一款密码分析工具,支持字典式的强行破解,通过对shadow文件的口令分析,可以检测密码强度。
官方网站:http://www.openwall.com/john/

首先咱们将自己本地的JR工具安装包匿名共享出去,同时用Linux输入“smbclient -L //192.168.100.3/ ”查看共享。


直接用“mount.cifs //192.168.100.3/share /mnt/”命令,将“share”文件夹挂载到“/mnt/”目录下。

我们先用“cd”命令进入“/mnt/”目录中,输入“tar -zxvf john-1.8.0.tar.gz -C /opt/”命令将工具包解压到“/opt/”目录。

用“cd”命令进入到“/opt/john-1.8.0/src/”源码包目录,但是源码包是用C语言写的,我们需要进行编译,所以我们需要用“yum install gcc gcc-c++ -y”命令安装编译工具。


直接用“make linux-x86-64”命令将源码包编译为适合系统版本的格式。

我们cd到脚本所在的“run”目录,然后输入命令“./john /etc/passwd /etc/shadow”让它去分析passwd和shadow文件,稍作等待就直接分析出我系统用户的密码(因为我这个密码较简单,有些密码复杂性强的是分析不出来的,能否分析出来主要跟它的字典有关,如果字典足够强悍也是可以分析出复杂的密码的)

四、端口扫描

我们用来扫描网络端口的是NMAP工具,它是一款强大的网络扫描、安全检测工具。
NMAP的扫描语法:nmap [扫描类型] [选项] <扫描目标...>

我们直接输入“yum install nmap -y”命令,来从yum源安装NMAP工具即可。

我们用命令“netstat -ntap”查看一下系统开启的TCP端口。如果查看UDP端口直接用命令“netstat -nuap”即可


用nmap工具扫描一下本地的TCP端口,输入“nmap -sT 127.0.0.1”。

扫描本地UDP端口直接输入“nmap -sU 127.0.0.1”即可。

最后附上一些常用的扫描类型:

扫描类型 例子 描述
-sS nmap -sS 192.168.1.1 TCP SYN端口扫描(默认)
-sT nmap -sT 192.168.1.1 TCP连接端口扫描(默认无root权限)
-sU nmap -sU 192.168.1.1 UDP端口扫描
-P0 nmap -P0 192.168.1.1 允许你关闭 ICMP pings
-sP nmap -sP 192.168.1.1 判断主机状态

你可能感兴趣的:(Linux CentOS 7系统安全控制详解(内容较多,可分次食用))