Linux加固

加固方法大多数要用到root权限,比赛时是不会给root用户的,需要我们自己提权,给出两篇提权的文章
https://blog.csdn.net/devil8123665/article/details/108146676
https://blog.csdn.net/devil8123665/article/details/107485260


操作系统加固

1.开启防火墙

service iptables start

2.锁定系统中多余用户

执行命令–>cat /etc/passwd
来查看一下有哪些用户
在这里插入图片描述

执行命令–>passwd -l <用户名>
来锁定不需要的用户
在这里插入图片描述

passwd -u <用户名> 可以解锁被锁定的用户
在这里插入图片描述

3.锁定系统中的空口令用户

执行命令–>cat /etc/shadow
来查看一下所有用户的密码

执行命令–>awk -F “:” ‘($2=="!!"){print $1}’ /etc/shadow
可以筛选出空口令用户
在这里插入图片描述

执行命令–>passwd -l <用户名>
锁定空口令用户
账户密码配置好后,执行命令

chattr +i /etc/passwd
chattr +i /etc/shadow

来让用户账户和密码目录赋予不可更改属性
在这里插入图片描述
恢复方法

chattr -i /etc/passwd
chattr -i /etc/shadow

在这里插入图片描述

4.设置口令策略

执行命令 vi /et/login.defs 来修改口令策略

PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
PASS_MIN_LEN 9 #最小密码长度9
在这里插入图片描述

5.禁用root之外的超级用户

cat /etc/passwd 查看口令文件,口令文件格式如下
login_name:password:user_ID:group_ID:comment:home_dir:command
login_name:用户名
password:加密后的用户密码
user_ID:用户ID,(1 ~ 6000) 若用户ID=0,则该用户拥有超级用户的权限。查看此处是否有多个uid=0。
group_ID:用户组ID
comment:用户全名或其它注释信息
home_dir:用户根目录
command:用户登录后的执行命令
在这里插入图片描述

加固方法:
使用命令–>awk -F “:” ‘($3=="0"){print $1}’ /etc/passwd 来筛选出uid为0的用户
在这里插入图片描述
使用命令–>passwd -l <用户名> 锁定除root之外的超级用户

6.禁止非root用户执行/etc/rc.d/init.d下的系统命令

执行命令–>chmod -R 700 /etc/rc.d/init.d/*
恢复方法–>chmod -R 777 /etc/rc.d/init.d/* #恢复默认设置

7.限制能够su成root的用户

执行命令–>vi /etc/pam.d/su
添加下图标记行,只有wheel组的用户可以通过su提权

在这里插入图片描述

做完这步操作后记得将自己使用的用户分到wheel组
在这里插入图片描述

8.限制超级管理员远程登录

执行命令–>vi /etc/ssh/sshd_config 来查看远程登录配置文件
PermitRootLogin yes表示允许root远程登录,注释掉这句语句或者改成no
在这里插入图片描述
执行命令–>service sshd restart 重启ssh服务
在这里插入图片描述
9.屏蔽ssh登录banner信息

使用命令–>vi /etc/ssh/sshd_config
找到配置信息banner,将前面的#删掉
在这里插入图片描述

执行命令–>vi /etc/motd
删除里面的内容或者将它改为自己的提示信息

10.系统用户的执行shell权限

执行命令–>

cat /etc/passwd |grep "/bin/bash"

在这里插入图片描述
发现ftp和nobody作为系统用户不应该具有执行shell的权限
加固方法:
vi /etc/passwd 将ftp和nobody后面的/bin/bash改为/sbin/nologin
在这里插入图片描述

11.未经授权的suid文件漏洞

编写以下脚本
在这里插入图片描述
使用命令–>bash 2.sh 执行脚本

在这里插入图片描述
看到useradd不符合规则
加固方法
chmod 755 /usr/bin/useradd

12.设置账户锁定登录失败锁定次数、锁定时间
编辑/etc/pam.d/system-auth文件

vi /etc/pam.d/system-auth

填加以下代码行

auth required pam_tally.so onerr=fail deny=6 unlock_time=600 even_root_unlock_time=100

表示用户登录失败6次,账户锁定600秒,root账户锁定100秒
在这里插入图片描述
13.修改TMOUNT的自动注销时间

vi /etc/profile

在文件中添加如图语句
在这里插入图片描述
TMOUNT=60表示用户不操作60秒后自动注销账户

14.修改bash保留命令条数

vi /etc/profile
修改HISTSIZE=5,表示保留5条命令
在这里插入图片描述

15.停止或禁用与承载无关的服务

chkconfig --list 查看所有服务的状态
在这里插入图片描述
加固方法:
记录需要关闭服务的名称
chkconfig - -del <服务名称> 删除服务
chkconfig - -level <级别名> <服务名> on|off 服务在特定级别下打开|关闭

16.为审计产生的数据分配合理的存储空间和存储时间

#/etc/init.d/rsyslog start 启动日志
系统日志(默认)/var/log/messages
cron日志(默认)/var/log/cron
安全日志(默认)/var/log/secure
 
#cat /etc/logrotate.conf 查看系统轮询配置,有无
#rotate log files weekly
weekly
#keep 4 weeks worth of backlogs
rotate 4 的配置
在这里插入图片描述
加固方法:

#vi /etc/logrotate.d/syslog编辑配置文件

增加rotate 4 日志文件保存个数为4,当第5个产生后,删除最早的日志size 100k 每个日志的大小
加固后应类似如下内容:

  /var/log/syslog/*_log {
  missingok
  notifempty
  size 100k # log files will be rotated when they grow bigger that 100k.
  rotate 5 # will keep the logs for 5 weeks.
  compress # log files will be compressed.
  sharedscripts
  postrotate
  /etc/init.d/syslog condrestart >/dev/null 2>1 || true
  endscript
}

在这里插入图片描述

Apache加固

1.以特定用户运行http服务

以特定用户运行服务,不要使系统默认账号启动APACHE,以免受到越权使用造成非法攻击
加固方法:

vi /etc/httpd/conf/httpd.conf

修改为

在这里插入图片描述
因为用户nobody 没有sh执行权限,所以这种配置比较安全.一般情况下配置单独用户,该用户没有sh 执行权限.取消掉了运行账户对sh等的执行权限后能够防止webshell通过默认的sh执行命令

2.隐藏banner信息

httpd –v 查看httpd版本信息
在这里插入图片描述

当我们访问服务出错的时候的报错,看到banner泄露了apache的版本信息
在这里插入图片描述

加固方法:

vi /etc/httpd/conf/httpd.conf

将ServerTokens Os 改为:ServerTokens Pord
//在出现错误页的时候不显示服务器操作系统的名称
在这里插入图片描述

将ServerSignature On 改为:ServerSignature off
//不回显apache版本信息

在这里插入图片描述
在这里插入图片描述
3.禁止目录浏览
vi /etc/httpd/conf/httpd.conf 编辑配置文件,
在这里插入图片描述
将Options Indexs FollowSymLinks改为Options FollowSymLinks
在这里插入图片描述
在这里插入图片描述
4.为特定目录使用密码保护

假设/icons目录需要密码保护
执行命令 /usr/bin/htpasswd -c /usr/local/etc/passwd.httpd testuser 创建包含用户名和密码的文本文件
在这里插入图片描述
在需要使用密码认证的目录下进行设置
在这里插入图片描述
说明:.htaccess文件中常用的配置选项有以下几个:
AuthName:定义提示信息,用户访问时提示信息会出现在认证的对话框中
AuthType:定义认证类型,在HTTP1.0中,只有一种认证类型:basic。在HTTP1.1中有几
种认证类型,如:MD5
AuthUserFile:定义包含用户名和密码的文本文件,每行一对
require命令:定义哪些用户或组才能被授权访问
在这里插入图片描述
5.限制目录脚本文件执行

这个主要是针对文件上传漏洞

Apache文件名解析特性
Apache对于文件名的解析是从后往前解析的,直到遇见一个它认识的文件类型为止。因此,如果web目录下存在以类似webshell.php.test这样格式命名的文件,Apache在解析时因为不认识.test这个文件类型,所以会一直往前解析,当解析到.php时,它认识了,因此会将它解析为PHP文件。
Apache的这种解析特性经常被用来绕过Web应用的文件上传检测。当Web应用的文件上传功能在检测上传文件的合法性时,如果仅通过检测上传文件的扩展名来判断文件是否合法,就可以利用Apache的这种文件名解析特征绕过Web应用的检测。
下面来看一个实例:目标网站后台存在一个上传图片的功能,只允许上传JPG和GIF图片格式的文件。但程序在验证上传文件合法性处存在漏洞,只是简单地通过上传文件扩展名来确定文件是否合法,这时我们就可以利用Apache的文件名解析特征来绕过这种检测。
将文件名修改为类似phpshell.php.jpg这样的格式上传,发现绕过了检测,文件被成功上传到目标网站,如图
在这里插入图片描述
加固方法:
可以在httpd.conf配置文件中添加以下内容来阻止Apache解析这种文件。

<Files ~ "\.(php.)">
Order Allow,Deny
Deny from all
</Files>

在这里插入图片描述
修改后需要重启Apache服务生效。Service httpd restart

这样即使攻击者上传了类似phpshell.php.jpg这样格式的文件,Apache也不会将它解析为PHP文件了,如图
在这里插入图片描述

同样的我们可以通过这个方法来限制.txt文件的读取
在已有的目录data下先创建1.txt,然后修改文件属性. 然后通过浏览器访问
在这里插入图片描述

由于.txt 等类型文件经常存放一些重要的信息,所以一般情况下需要禁止掉.配置如下图
在这里插入图片描述

sercice httpd restart 重启apache 服务,然后访问 1.txt,发现被禁止
在这里插入图片描述

6.限制IP访问(比赛时这样做好像是犯规的,限制几个应该没事的吧)

假设/icon目录只允许192.168.1.0网段的用户访问
在这里插入图片描述

假设/icon目录不允许192.168.1.0网段的用户访问
在这里插入图片描述
7.禁用 CGI

不完善的CGI应用程序可能成为别人非法进人服务器系统的通道,有可能导致重要的资料被删除或外泄,如果服务器上不需要运行 CGI 程序,建议禁用 CGI
vi /etc/httpd/conf/httpd.conf –>/cgi 将包含cgi的服务全部注释掉
在这里插入图片描述

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值