目录
账号安全控制
用户切换与提权
开关机安全控制
终端及登录控制
弱口令检测
网络扫描
作为一种开放源代码的操作系统,linux服务器以其安全、高效很稳定的显著优势而得以广泛应用。
在linux系统中,除了用户手动创建的各种账号之外,还包括随系统或程序安装过程而生成的其他大量账号,除了超级用户root之外,其他大量账号只是用来维护系统运作、启动或保持服务进程,一般是不允许登录的,因此也被称为非登录账号。这些账号的登录Shell通常是/sbin/nologin,表示禁止终端登录,因确保不被人为改动。
[root@localhost ~]# grep "/sbin/nologin$" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
......//省略部分内容
对于linux服务器中长期不用的用户账号,若无法确定是否应该删除,可以暂时将其锁定。(passwd、usermod命令都可以锁定解锁)
[root@localhost ~]# usermod -L zhangsan //锁定账号
[root@localhost ~]# passwd -S zhangsan //查看账号状态
zhangsan LK 2022-07-03 0 99999 7 -1 (密码已被锁定。)
[root@localhost ~]# usermod -U zhangsan //解锁账号
[root@localhost ~]# passwd -S zhangsan
zhangsan PS 2022-07-03 0 99999 7 -1 (密码已设置,使用 SHA512 算法。)
如果是服务器中的用户账号已经固定,不再进行更改,还可以采取锁定账号配置文件的方法。使用chattr命令,分别结合"+i" "-i"选项来锁定、解锁文件,使用lsattr命令查看文件锁定情况。
[root@localhost ~]# chattr +i /etc/passwd /etc/shadow //锁定文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看为锁定的状态
----i----------- /etc/passwd
----i----------- /etc/shadow
[root@localhost ~]# chattr -i /etc/passwd /etc/shadow //解锁文件
[root@localhost ~]# lsattr /etc/passwd /etc/shadow //查看解锁的状态
---------------- /etc/passwd
---------------- /etc/shadow
在不安全的网络环境中,为了降低密码被猜出来或被暴力破解的风险,管理员可以在服务器端限制用户密码的最大有效天数,对于密码已过期的用户,登录时被要求重新设置密码,否则被拒绝登录。以下操作将密码的有效期设置为30天。
[root@localhost ~]# vim /etc/login.defs //适用于新建的用户
PASS_MAX_DAYS 30 //默认为99999天
[root@localhost ~]# chage -M 30 lisi //适用于已有的lisi用户
强制用户zhangsan下次登录时重设密码
[root@localhost ~]# chage -d 0 zhangsan
命令历史、自动注销
Bash终端环境中,历史明丽的记录条数由变量HISTSIZE控制,默认为1000条。通过修改/etc/profile文件中的HISTSIZE变量值,可以影响系统中的所有用户。例如,可以设置只记录200条历史命令。
[root@localhost ~]# vim /etc/profile //适用于新登录用户
HISTSIZE=200
[root@localhost ~]# export HISTSIZE=200 //适用于当前用户
除此之外,还可以修改用户宿主目录中的~/.bash_logout文件,添加清空历史明丽的操作语句。这样,当用户退出已登录Bash环境以后,所记录的历史命令将自动清空。
[root@localhost ~]# vim ~/.bash_logout
history -c
clear
Bash终端环境中,还可以设置一个闲置超时时间,当超过指定的时间没有任何输入时即自动注销终端,这样可以有效避免当管理员不在时其他人员对服务器的无操作风险。闲置超时时间由变量TMOUT来控制,默认单位为秒(s)。
[root@localhost ~]# vim /etc/profile //适用于新登录用户
export TMOUT=600
[root@localhost ~]# export TMOUT=600 //适用于当前用户
执行"unset TMOUT"命令取消TMOUT变量设置。
[lisi@localhost ~]$ su - root
密码: //输入root口令
上一次登录:日 7月 3 20:26:50 CST 2022pts/0 上
[root@localhost ~]# //登录成功后过得root权限
上述命令中su添加“-”选项,表示切换用户后进入目标用户的登录Shell环境,若缺少此选项仅切换身份、不切换用户环境。对于切换为root用户的情况,“root”可以省略。
默认情况下,任何用户都允许使用su命令,从而有机会反复尝试其他用户(如root)的登录密码,,为了加强su命令的使用控制,可以借助于pam_whel认证模块,只允许极个别用户使用su命令进行切换。实现过程如下:将授权使用su命令的用户添加到wheel组,修改/etc/pam.d/su认证配置以启动pam_wheel认证。
[root@localhost ~]# gpasswd -a zhangsan wheel
正在将用户“zhangsan”加入到“wheel”组中
[root@localhost ~]# grep wheel /etc/group
wheel:x:10:zhangsan
[root@localhost ~]# vim /etc/pam.d/su
#%PAM-1.0
auth sufficient pam_rootok.so //默认有
auth required pam_wheel.so use_uid //去#注释
......省略部分内容
启用pam_wheel认证以后,未加入到wheel组内的其他用户将无法使用su命令,尝试进行切换时将提示“拒绝权限”,从而将切换用户的权限控制在最小范围内。
[lisi@localhost ~]$ su - root //lisi用户切换root用户
密码:
su: 拒绝权限
[lisi@localhost ~]$ //切换失败
既可以让普通用户拥有一部分管理权限,又不需要将root用户的密码告诉他时,就可以使用sudo命令来提升权限,不过需要管理员预先进行授权,指定允许哪些用户以超级用户(或其他普通用户)的身份来执行哪些命令。
在配置文件/etc/sudoers中添加授权
sudo机制的配置文件为/etc/sudoers,文件的默认权限为440,需使用专门的visudo工具进行编辑。虽然也可以用vim进行编辑,但保存时必须执行“w!”命令来强制操作,否则系统将提示为只读文件而拒绝保存。
授权记录的基本配置格式如下:
[root@localhost ~]# vim /etc/sudoers
user MACHINE=COMMANDS
授权配置主要包括用户、主机、命令三部分,即授权那些人在哪些主机上执行哪些命令。
用户(user):直接授权指定的用户名,或采用“%组名”的形式(授权一个组的所有用户)。
主机(MACHINE):使用此配置文件的主机名称。此部分主要是方便在多个主机间公用同一份sudoers文件,一般设为localhost或者实际的主机名即可。
命令(COMMANDS):允许授权的用户通过sudo方式执行的特权命令,需填写命令程序的完整路径,多个命令之间以逗号进行分隔。
若要授权用户zhangsan能够执行ifconfig命令来修改IP地址,而wheel组的用户无需验证密码即可执行任何命令,可以执行以下操作。
[root@localhost ~]# visudo
......//省略部分内容
zhangsan localhost=/sbin/ifconfig
%wheel ALL=NOPASSWD: ALL
当相同授权的用户较多,或授权的命令较多时,可以采用几种定义的别名.用户、主机、命令部分都可以定义为别名(必须大写),分别通过关键字User_Alias、Host_Alias、Cmnd_Alias来进行设置。例如,以下操作通过别名方式来添加授权记录,允许用户jerry、tom、tsengyia在主机smtp、pop中执行rpm、yum命令。
[root@localhost ~]# visudo
User_Alias OPERATORS=jerry,tom,tsengyia
Host_Alias MAILSVRS=smtp,pop
Cmnd_Alias PKGTOOLS=/bin/rpm,/usr/bin/yum
OPERATORS MAILSVRS=PKGTOOLS
sudo配置记录的命令部分允许使用通配符"*"、取反符号"!",当需要授权某个目录下的所有命令或取消其中个别命令时特别有用。例如,若需要授权用户zhangsan可以执行/sbin/目录下除ipconfig、route以外的其他所有命令程序,可以执行以下操作。
[root@localhost ~]# visudo
zhangsan localhost=/sbin/*,!/sbin/ifconfig,/sbin/route
默认情况下,通过dudo方式执行的操作记录并不记录。若要启用sudo日志记录以备管理员查看,应在/etc/sudoers文件中添加"Defaults logfile"设置。
[root@localhost ~]# visudo //找到Defaults,在前面添加一行内容
......//省略部分内容
Defaults logfile = "/var/log/sudo"
对于已获得授权的用户,通过sudo方式执行特权命令时,只需要将正常的命令行作为sudo命令的参数即可。由于特权命令程序通常位于/sbin、/usr/sbin等目录下,普通用户执行时应使用绝对路径。
[zhangsan@localhost ~]$ /sbin/ifconfig ens33:0 192.168.1.10/24 //未使用sudo前
SIOCSIFADDR: 不允许的操作
SIOCSIFFLAGS: 不允许的操作
SIOCSIFNETMASK: 不允许的操作
[zhangsan@localhost ~]$ sudo /sbin/ifconfig ens33:0 192.168.1.10/24 //使用sudo后
[sudo] password for zhangsan: //输入zhangsan口令
[zhangsan@localhost ~]$ /sbin/ifconfig ens33:0 //查看执行结果
ens33:0: flags=4163 mtu 1500
inet 192.168.1.10 netmask 255.255.255.0 broadcast 192.168.1.255
ether 00:0c:29:bc:c7:b8 txqueuelen 1000 (Ethernet)
若要查看用户自己获得哪些sudo授权,可以执行"sudo -l"命令。
[zhangsan@localhost ~]$ sudo -l
匹配此主机上 zhangsan 的默认条目:
logfile=/var/log/sudo, !visiblepw, always_set_home, env_reset, env_keep="COLORS
DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR
USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION
LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER
LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET
XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
用户 zhangsan 可以在该主机上运行以下命令:
(root) /sbin/*, (root) !/sbin/ifconfig, (root) /sbin/route
(root) /sbin/ifconfig
(root) NOPASSWD: ALL
(ALL) ALL
快捷键重启功能为服务器的本地维护提供了方便,但对于多终端的linux服务器,禁用此功能是比较安全的选择。虚拟机中将Del键换成insert键。
查看/usr/lib/systemd/system/ctrl-alt-del.target文件发现,ctrl-alt-del.target是reboot.target文件的软链接文件。
[root@localhost ~]# ll /usr/lib/systemd/system/ctrl-alt-del.target
lrwxrwxrwx. 1 root root 13 5月 7 2018 /usr/lib/systemd/system/ctrl-alt-del.target -> reboot.target
再不行影响reboot.target文件的前提下执行以下命令即可禁用Ctrl+Alt+Del快捷键功能。
[root@localhost ~]# systemctl mask ctrl-alt-del.target
Created symlink from /etc/systemd/system/ctrl-alt-del.target to /dev/null.
[root@localhost ~]# systemctl daemon-reload
若想重新开启Ctrl+Alt+Del快捷键功能,只需要执行systemctl mask ctrl-alt-del.target 命令,然后刷新配置即可。在命令提示符终端测试Ctrl+Alt+F2...F7,F1切换回图形界面。
从系统安全的角度来看,如果任何人都能够修改GRUB引导参数,对服务器本身显然是一个极大的威胁。为了加强对引导过程的安全控制可以为GRUB菜单设置一个密码,只有提供正确的密码才被允许修改引导参数。
[root@localhost ~]# grub2-mkpasswd-pbkdf2 //根据提示指定密码
输入口令:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.8022173B1FB81686F9450202D77EEFA20A44D8FE7F662756CCE0092B1CC95D0D465F19C9F93295153291D0852153C0D8363FCA7431B955B6E4C246463154BA97.125C6C9494909CE87C38EB36D0A330AAA002AC14F652FAC7C01C0C45B05D60D5D0AF8BCDCD4F71FD7807839657FF13C887094C47831AEC84E290B2280486701A //复制is密文密码
[root@localhost ~]# cp /boot/grub2/grub.cfg /boot/grub2/grub.cfg.bak
[root@localhost ~]# cp /etc/grub.d/00_header /etc/grub.d/00_header.bak
[root@localhost ~]# vim /etc/grub.d/00_header //将下面内容添加到文件最后
......//省略部分内容
cat << EOF
set superusers="root"
password_pbkdf2 root grub.pbkdf2.sha512.10000.8022173B1FB81686F9450202D77EEFA20A44D8FE7F662756CCE0092B1CC95D0D465F19C9F93295153291D0852153C0D8363FCA7431B955B6E4C246463154BA97.125C6C9494909CE87C38EB36D0A330AAA002AC14F652FAC7C01C0C45B05D60D5D0AF8BCDCD4F71FD7807839657FF13C887094C47831AEC84E290B2280486701A
EOF
使用grub2-mkconfig命令生成新的grub.cfg配置文件。
[root@localhost ~]# grub2-mkconfig -o /boot/grub2/grub.cfg //生成新的grub.cfg文件
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-514.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-514.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-d2fbf6a8306647d2abb5b8e02db3fcaa
Found initrd image: /boot/initramfs-0-rescue-d2fbf6a8306647d2abb5b8e02db3fcaa.img
done
通过配置后,重新开机进入GRUB菜单时,按e键将无法修改引导参数,需输入正确的GRUB密码。
若要禁止root用户从tty5、tty6登录,可以修改/etc/securetty文件,将tty5、tty6注释掉。
[root@localhost ~]# vim /etc/securetty
......//省略部分内容
#tty4
#tty5
tty6
当服务器正在备份或维护时,若不希望有新的用户登录系统,这时只需要简单的建立/etc/nologin文件即可。当手动删除/etc/nologin文件或者重新启动主机以后,即可恢复正常。
[root@localhost ~]# touch /etc/nologin
John the Ripper是一款开源的密码破解工具,能够在已知密文的情况下快速分析出明文密码字符串,支持DES、MD5等多种加密算法,而且允许使用密码字典来进行暴力破解。官方网站是John the Ripper password cracker 。
解压后可以看到三个子目录——doc、run、src,分别表示手册文档、运行程序、源码文件,和一个链接文件README。
[root@localhost ~]# eject
[root@localhost ~]# mount /dev/cdrom /media
mount: /dev/sr0 写保护,将以只读方式挂载
[root@localhost ~]# tar zxf /media/john-1.8.0.tar.gz -C /usr/src
[root@localhost ~]# cd /usr/src/john-1.8.0/
[root@localhost john-1.8.0]# ls -ld *
drwxr-xr-x 2 root root 208 7月 3 22:49 doc
lrwxrwxrwx 1 root root 10 5月 30 2013 README -> doc/README
drwxr-xr-x 2 root root 143 7月 3 22:49 run
drwxr-xr-x 2 root root 4096 7月 3 22:49 src
[root@localhost john-1.8.0]# ls doc/
CHANGES CONTACT CREDITS EXTERNAL INSTALL MODES README
CONFIG COPYING EXAMPLES FAQ LICENSE OPTIONS RULES
切换到src目录下进行编译,编译完成后,run子目录下会生成一个名为john的可执行程序。
[root@localhost john-1.8.0]# cd src
[root@localhost src]# make clean linux-x86-64
......//省略部分内容
[root@localhost src]# ls ../run/john
../run/john
[root@localhost src]# cp /etc/shadow /root/shadow.txt //准备待破解的密码文件
[root@localhost src]# cd ../run
[root@localhost run]# ./john /root/shadow.txt //执行暴力破解
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (root)
1 (lisi)
1 (zhangsan)
3g 0:00:00:52 100% 2/3 0.05738g/s 215.8p/s 265.4c/s 265.4C/s rosita..help
Use the "--show" option to display all of the cracked passwords reliably
Session completed
破解出的密码信息自动保存到john.pot文件中,可以结合"--show"选项进行查看。
[root@localhost run]# ./john --show /root/shadow.txt //查看已破解出的账户列表
root:123456::0:99999:7:::
lisi:1:19176:0:30:7:::
zhangsan:1:19176:0:99999:7:::
3 password hashes cracked, 0 left
对于密码的暴力破解,字典文件的选择相当关键。只要字典文件足够完整,密码破解只是时间上的问题。John the Ripper默认提供的字典文件为password.lst,其中列出来3000多个常见的弱口令。"--wordlist="选项指定字典文件的位置。
[root@localhost run]# :> john.pot //清空已破解出的账户列表,以便重新分析
[root@localhost run]# ./john --wordlist=./password.lst /root/shadow.txt
Loaded 3 password hashes with 3 different salts (crypt, generic crypt(3) [?/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
123456 (root)
1 (lisi)
1 (zhangsan)
3g 0:00:00:18 100% 0.1643g/s 136.7p/s 278.7c/s 278.7C/s rosita..help
Use the "--show" option to display all of the cracked passwords reliably
Session completed
NMAP是一个强大的端口扫描类安全测评工具,官方网站是Nmap: the Network Mapper - Free Security Scanner。NMAP被设计为检测众多主机数量的巨大网络,支持ping扫描、多端口检测、OS识别等多技术。使用NMAP定期扫描内部网络,可以找出网络中不可控制的应用服务,及时关闭不安全的服务,减少安全风险。
在CentOS7系统中,可以使用光盘自带的nmap-6.40-7.el7.x86_64.rpm安装包,也可以使用从NMAP官网下载最新的源码包,这里以YUM方式安装。
[root@localhost ~]# yum -y install nmap
NMAP的扫描程序位于/usr/bin/nmap目录下,命令格式如下:
nmap [扫描类型] [选项] <扫描目标...>
其中,扫描目标可以是主机名、IP地址或网络地址等,多个目标以空格分隔;常用的选项有“-p”“-n”,分别用来指定扫描的端口、禁用反向DNS解析(以加快扫描速度);扫描类型决定着检测的方式,也直接影响扫描的结果。
比较常用的集中扫描类型如下。
-sS,TCP SYN扫描(半开扫描);只向目标发出SYN数据包,如果收到SYN/ACK响应包就认为目标端口正在监听,并立即断开连接;否则认为目标端口并未开放。
-sT,TCP连接扫描:这是完整的TCP扫描方式,用来建立一个TCP连接,如果成功则认为目标端口正在监听服务,否则认为目标端口并未开放。
-sF,TCP FIN扫描:开放的端口会忽略这种数据包,关闭的端口会回应RST数据包。许多防火墙只对SYN数据包进行简单过滤,而忽略了其他形式的TCP攻击包。这类型的扫描可间接检测防火墙的健壮性。
-sU,UDP扫描:探测目标主机提供哪些UDP服务,UDP扫描的速度会比较慢。
-sP,ICMP扫描:类似于ping检测,快速判断目标主机是否存活,不做其他扫描。
-PO,跳过ping检测:这种方式认为所有的目标主机是存活的,当对方不响应ICMP请求时,使用这种方式可以避免因无法ping通而放弃扫描。
在扫描结果中,STATE列若为open则表示端口为开放状态,为filtered表示可能被防火请过滤,为closed表示端口为关闭状态。
[root@localhost ~]# nmap 127.0.0.1 //扫描常用的TCP端口
Starting Nmap 6.40 ( http://nmap.org ) at 2022-07-03 23:38 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000050s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
111/tcp open rpcbind
631/tcp open ipp
Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds
[root@localhost ~]# nmap -sU 127.0.0.1 //扫描常用的UDP端口
Starting Nmap 6.40 ( http://nmap.org ) at 2022-07-03 23:38 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for localhost (127.0.0.1)
Host is up (0.0000090s latency).
Not shown: 999 closed ports
PORT STATE SERVICE
5353/udp open|filtered zeroconf
Nmap done: 1 IP address (1 host up) scanned in 1.29 seconds
检查192.168.1.0/24网段中有哪些主机提供FTP服务。
[root@localhost ~]# nmap -p 21 192.168.1.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2022-07-03 23:46 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap scan report for 192.168.1.10
Host is up (0.00045s latency).
PORT STATE SERVICE
21/tcp closed ftp
Nmap done: 256 IP addresses (1 host up) scanned in 10.67 seconds
快速检测192.168.1.0/24网段中有哪些存活主机(能ping通)。
[root@localhost ~]# nmap -n -sP 192.168.1.0/24
Starting Nmap 6.40 ( http://nmap.org ) at 2022-07-03 23:48 CST
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (1 host up) scanned in 10.59 seconds
检测IP地址位于192.168.1.100~200的主机是否开启文件共享服务。
[root@localhost ~]# nmap -p 139,445 192.168.1.100-200
Starting Nmap 6.40 ( http://nmap.org ) at 2022-07-03 23:49 CST
mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled. Try using --system-dns or specify valid servers with --dns-servers
Nmap done: 101 IP addresses (0 hosts up) scanned in 4.55 seconds