安全加固方向

  • 用户安全
  • 文件安全
  • 登录安全

系统环境

CentOS7.9

重要文件

/etc/login.defs

文件功能

定义了 /etc/passsword以及/etc/shadow配置的用户限制,这个文件在系统中一定要存在,某些时候不会影响系统的使用,但有些时候会导致意想不到的错误。

如果**/etc/passsword以及/etc/shadow与/etc/login.defs文件产生了冲突,系统会以/etc/passsword以及/etc/shadow**为准,它们的优先级较高。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MAIL_DIR	/var/spool/mail
PASS_MAX_DAYS 99999 #密码最大有效期,以天为单位,一般为90天
PASS_MIN_DAYS 0 #两次修改密码的最小间隔,以天为单位
PASS_MIN_LEN 5 #密码最小长度,对root无效
PASS_WARN_AGE 7 #密码过期前n天提示
UID_MIN 1000 #用户ID,当你创建普通用户时如果不指定UID,则会从1000递增
UID_MAX 60000 #当你创建普通用户的最大ID
SYS_UID_MIN 201 #不指定UID,创建的系统用户的最小UID
SYS_UID_MAX 999 #不指定UID,创建的系统用户的最大UID
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes #创建用户的时候为这个用户创建家目录
UMASK 077 #用户家目录的权限值 700
USERGROUPS_ENAB yes #删除用户时,当用户组内没有其他的用户时,是否删除用户组,CentOS7在创建用户的时候,用户的GID是100
ENCRYPT_METHOD SHA512 #用户的密码使用SHA512加密

通用文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
MAIL_DIR	/var/spool/mail
PASS_MAX_DAYS 90
PASS_MIN_DAYS 0
PASS_MIN_LEN 12
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512

/etc/passwd

用户名:用户密码:用户uid:用户的gid:用户的注释:用户的主目录:用户的shell

1
2
root:  x:  0:  0:  root:  /root:  /bin/bash
bin: x: 1: 1: bin: /bin: /sbin/nologin

/etc/shadow

由于/etc/passwd允许所有用户读取,容易导致用户的密码泄露,所以linux系统将用户的相关密码信息从/etc/shadow分离出来,并且这个文件只有root才可以访问。

1
2
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

/etc/ssh/sshd_config

ssh服务器的配置文件

1
2
3
4
5
port 22           #登录端口
ListenAddress 0.0.0.0 #监听地址,只能使用这个地址进行ssh登录,0.0.0.0允许所有的连接,一般改为跳板机地址
LoginGraceTime 2m #连接主机时,输入密码的时间超过2m就断开
permitRootLogin no #是否允许root远程登录
maxAuthTries 6 #最多尝试次数

/etc/bashrc

环境变量,初始化整个系统bash的设置

-rw-r--r-- 1 root root 37 May 30 11:37 README.md

-代表普通文件 d代表目录 l代表软链接

r读权限4 w写权限2 x执行权限1

文件所有者的权限 -文件所有者同用户组的权限 -其他用户对该文件的权限

image-20230602231815156

目录 文件
777 666
022(建议027) 022(建议027)
755 644

image-20230603165434254

history -a

打开命令行记录

1
2
3
4
5
6
export HISTFILE="/opt/cmd_history/${LOGIN_USER}/history"        #每个用户历史命令存储位置
shopt -s histhappend
PROMPT_COMMAND=“history -a” #查看历史命令的命令
HISTFILESIZE=50000
HISTTIMEFORMAT="%F %T" #列出执行命令的命令和时间
export HSTTIMEFORMAT

/etc/profile

环境变量,用来设置整个系统的环境变量

/etc/hosts.deny

主机的黑名单

1
2
sshd:ALL  			 #禁止所有人使用ssh登录本机
sshd:[ip地址] #禁止某个ip登录本机

/etc/hosts.allow

主机的白名单

1
sshd:[ip地址]        #允许指定的机器(管理机地址或者VPN地址)登录本机

Nginx加固

网站根目录文件

不能属于 root 而是 nginx

权限改为生产建议027,权限最小化

端口扫描

扫描开放端口,防止只能在内网开放的端口开放到外网

1
nmap [ip地址]

半开式扫描更加隐蔽

1
namp -sS [IP地址]

安全加固

  • 禁止目录浏览
  • 隐藏版本信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim /etc/nginx/nginx.conf       #配置信息

http{
...
server{
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
server_tokens off; #添加这一项,隐藏版本号
autoindex off; #禁止目录浏览
location / {
}
error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}

}

  • 限制http请求方法
1
2
3
if ($request_method !~ ^(GET|HEAD|POST)$ ) {
return444;
}
  • 限制ip访问
1
2
3
4
5
6
location / { 
deny 192.168.1.1; #拒绝IP
allow 192.168.1.0/24; #允许IP
allow 10.1.1.0/16; #允许IP
deny all; #拒绝其他所有IP
}
  • 限定SSL版本
1
2
3
server { 
ssl_protocols TLSv1.2;
}
  • 限制超时
1
2
3
4
client_body_timeout 10;  #设置客户端请求主体读取超时时间 
client_header_timeout 10; #设置客户端请求头读取超时时间
keepalive_timeout 55; #第一个参数指定客户端连接保持活动的超时时间,第二个参数是可选的,它指定了消息头保持活动的有效时间
send_timeout10; #指定响应客户端的超时时间
  • 限制权限
1
user nobody;

限制并发和速度

1
2
3
4
5
6
7
8
9
10
11
12
limit_zone one $binary_remote_addr 10m; 
server {
listen 80;
server_name www.test.com;
index index.html index.htm index.php;
root /usr/local/www; #Zone limit;
location / {
limit_conn one 1;
limit_rate 20k;
}
………
}
  • 配置防盗链
1
2
3
4
5
6
7
location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip)$ {     
valid_referers none blocked server_names *.test.com http://localhost baidu.com;
if ($invalid_referer) {
rewrite ^/ [img]http://www.XXX.com/images/default/logo.gif[/img];
# return403;
}
}

本文采用CC-BY-SA-3.0协议,转载请注明出处
Author: Sally