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 程序,建议禁用 CGIvi /etc/httpd/conf/httpd.conf
–>/cgi 将包含cgi的服务全部注释掉