Linux安全加固


用户及权限安全排查

Linux系统是多用户操作系统;

并不能识别用户输入的用户名称,而是识别用户名称对应的ID号;

每个用户的ID号分为两种,分别是用户ID(UID),组ID(GID);

所有用户的名称与ID的对应关系都存储在/etc/passwd文件中;

UID由一个32位的无符号型整数表示,用于唯一标识系统中的用户;

root的UID为0;

GID也是一个32位的无符号整数表示,用于定义该用户所在的组;

用户名称用户密码UIDGID信息描述用户主目录默认shell
root:x:0:0:root:/root:/bin/bash

真正的加密后的用户口令字存放到/etc/shadow文件中,而在/etc/passwd文件的口令字段中只存放一个特殊的字符,例如“x”或者“*”。

查询当前Linux系统新增的用户名

可以通过查询passwd文件中新增的用户名,

也可以通过awk指令查询UID=0和UID>=500的用户名,执行下面的命令

awk -F : '($3>=500||$3==0){print $1}' /etc/passwd

查询系统中是否存在特权用户

UID为0的用户拥有系统的最高权限,使用下面的命令:

awk -F : '($3==0){print $1}' /etc/passwd

查询密码为空的用户

passwd中,用户密码是被保护的的状态,都是使用x来隐藏的,真正的密码内容保存在/etc/shadow文件中,而shadow只有root才能查看。

如果该文件中密码对应字段长度为0,则表明该用户密码为空。

可通过执行下面的命令来查看空口令用户。

awk -F : '($2==""){print $1}' /etc/shadow

检测系统中是否存在弱口令的用户

禁用不安全的用户账号

passwd -l username //禁用lock

passwd -u username //解禁unlock

删除不安全的用户账号

userdel username //删除账号

useradd username //添加账号

更改用户登录口令

当发现空口令或弱口令等安全问题时,也可以通过更改用户的登录口令

passwd username

远程连接安全配置

传统的远程传输协议(如FTP、Telnet)本质上都是不安全的,传输内容是明文,容易遭受“中间人”攻击,因此,在管理远程服务器时,最常使用的是SSH远程连接协议。

SSH传输的数据是加密的,但SSH的不安全配置也会造成一系列的安全问题,如弱口令枚举、特权用户登录等。

cat /etc/ssh/sshd_config | grep -i port

编辑文件修改端口号,例如改成20022

访问

ssh username@ip_address -p 20022

防止端口探测工具进行服务版本识别

例如对于nmap扫描,nmap -sS -Pn -A -p20022 ipaddress,通常可以得到对应的服务器指纹信息

可以通过修改sshd_config配置文件,隐藏SSH携带系统的版本信息

利用sed -i可以清除SSH指纹携带的版本信息

例如sed -i 's/OpenSSH_9.6p1/welcome_0.0p0/g' /usr/sbin/sshd

默认配置下扫描的结果

可以通过修改sshd_config配置文件,隐藏SSH携带系统的版本信息

增加DebianBanner no后的扫描结果

清除版本信息

 sed -i 's/OpenSSH_9.6p1/welcome_0.0p0/g' /usr/sbin/sshd

禁止特权用户登录

通过修改SSH服务的sshd_config配置文件中的PermitRootLogin为no,重启SSH服务,可以禁止特权用户远程登录。

对远程登录来源进行限制

未限制有可能造成SSH弱口令枚举攻击等

可以通过修改/etc/hosts.allowhosts.deny文件来控制

/etc/hosts.deny文件中添加sshd:ALL,可阻止所有远程主机访问

/etc/hosts.allow文件中添加sshd:192.168.1.1,只允许该IP地址远程连接

防止SSH服务弱口令攻击

可以通过修改/etc/pam.d/目录下的loginsshd文件,增加SSH服务非法登录次数限制

例如:当用户错误输入口令3次以上时,会暂时锁住当前用户30秒。

login文件(文件前面)中添加内容:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=30 even_deny_root root_unlock_time=30

sshd文件中添加:

auth required pam_tally2.so onerr=fail deny=3 unlock_time=30 even_deny_root root_unlock_time=30
account required pam_tally2.so

参数说明:

even_deny_root:限制root用户

deny:设置普通用户和root连续错误登录的最大次数。

unlock_time:设定普通用户锁定后,多长时间后解锁,单位为s。

root_unlock_time:设定root用户锁定的解锁时间。

SUID/SGID文件权限排查

什么是SGID

SGID (Set Group ID) 是一种权限位,用于指定在执行一个可执行文件时,该文件将以文件所属组的权限来运行。与SUID类似,当一个可执行文件具有SGID权限时,执行该文件的用户将暂时获得文件所属组的权限。

SGID的工作原理如下:当一个可执行文件具有SGID权限时,当它被执行时,有效的组ID(EGID)将被设置为该文件的所属组的组ID,而不是执行该文件的用户的当前组ID。这样,执行者就能够以文件所属组的权限来执行操作。

SGID通常用于需要在特定组权限下执行操作的情况,例如共享目录或文件,其中多个用户需要共享访问权限。通过将SGID权限设置在目录上,可以确保在该目录中创建的文件都属于同一组,从而实现组内成员共享访问权限。

同样,与SUID一样,SGID权限也应谨慎使用,并确保只授予必要的文件和目录,以防止可能的安全风险。

查询具备SUID/SGID权限的文件

find / -perm -u=s -type f

find / -perm -g=s -type f

修改SUID/SGID可执行文件权限

chmod u-s /usr/bin/passwd

chmod g-s /usr/bin/wall

Linux系统不安全服务排查

系统服务是在后台运行的应用程序,可用来提供本地系统或网络功能,把这些应用程序称作服务,例如Apache是用来实现Web的服务。

Linux的后台中,通常会运行很多类型的服务,不当的安全配置很容易引起安全威胁。

需要针对常见的服务端口号进行安全服务排查,提供修复和加固的方法。

常见服务端口及潜在的安全问题

端口号说明安全问题
21/22/69FTP/TFTP
2049NFS
139Samba
389LDAP
22SSH
23Telnet
3389RDP
5900VNC
5632PyAnywhere
80/443/8080Default Web server
7001/7002WebLogic console
8000/8089Jboss/Resin/Jetty/JenKins
9090WebSphere console
4848GlassFish console
1352Lotus domino mail service
10000Webmin-Web Dashboard
3306MySQL
1433MSSQL
1521Oracle
5432PostgreSQL
27017/27018MongoDB
6379Redis
5000SysBase/DB2
25SMTP mail service
110POP3
143IMAP
53DNS
67/68DHCP
161SNMP
2181Zookeeper
8069Zabbix
9200/9300Elasticsearch
11211Memcache
512/513/514Linux Rexec
873Rsync
3690Svn
50000SAP Management Console
systemctl list-units --type=service

针对不安全的服务,在不适用的情况下,关闭

例如

systemctl stop mysql
service mysql stop

敏感数据排查与防护

搜索系统中任何用户都有写权限的文件夹

find / xdev -mount -type d \( -perm -0002 -a ! -perm -1000 \)

搜索任何用户都有写权限的文件

for PART in `grep -v ^# /etc/fstab | awk '($6 !="0"){print $2}'`; do 
find $PART -xdev -type f \( -perm -0002 -a ! -perm -1000 \) -print
done

搜索系统隐藏文件

find / -name ".*" -print -xdev

查询bash命令历史记录

history

history -c      #清除历史命令

可通过修改系统的$HISTSIZE临时修改系统允许记录的历史命令行数,但系统重启后恢复默认

通过修改/etc/profile文件中的HISTSIZE则可以永久生效。

Comments

Leave a comment