Linux安全加固
Linux安全加固
1. 账户口令密码
1.1 设置密码策略
修改文件 /etc/login.defs
vim /etc/login.defs
#口令生存周期,即密码最长有效期
PASS_MAX_DAYS 90
#口令更改最小间隔天数
PASS_MIN_DAYS 7
#口令最小长度,已经被 PAM 模块取代,所以这个选项并不生效
PASS_MIN_LEN 8
#口令失效前多少天开始通知用户修改密码
PASS_WARN_AGE 7
注意:此处的更改优先级低于 chage 命令的设置
注意:更改完后,对所有新创建的用户生效。对已经存在的用户无效
1.2 设置密码强度
修改文件 /etc/pam.d/password-auth
vim /etc/pam.d/password-auth
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=1 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1
- retry:尝试次数
- difok:定义新密码中必须要有几个字符和旧密码不同
- minlen:最小密码长度
- ucredit:大写字母个数。注意:-1表示最少1位
- lcredit:小写字母个数
- dcredit:数字个数
- ocredit:特殊字符个数
但这个密码强度的设定只对"普通用户"有限制作用,root用户无论修改自己的密码还是修改普通用户的时候,不符合强度设置依然可以设置成功。
1.3 限制密码重用
vim /etc/pam.d/system-auth
检查password sufficient pam_unix.so 这项是否有remember参数(已经使用过的密码会保存在/etc/security/opasswd 下面)
修改:
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=5
末尾加上 remember=5
,表示禁止使用最近用过的5个密码
1.4 登录失败锁定
修改文件 /etc/pam.d/sshd
vim /etc/pam.d/sshd
#普通账户3次密码错误,300s后重试。root账户5次密码错误后,300s后重试
auth required pam_tally2.so deny=3 unlock_time=300 even_deny_root=5 root_unlock_time=300
关于锁定
# 查看被锁定的用户
pam_tally2 -u
# 将被锁定的用户解锁
pam_tally2 --reset -u username
或
pam_tally2 -u username -r
# help
pam_tally2: [-f rooted-filename] [--file rooted-filename]
[-u username] [--user username]
[-r] [--reset[=n]] [--quiet]
1.5 登录超时自动注销
vim /etc/profile
后面添加:
export TMOUT=180 #180s后无操作自动注销
2. SSH配置
2.1 打开配置文件
vim /etc/ssh/sshd_config
2.2 限制root远程登录
配置PermitRootLogin
- 不设置:默认是yes,root可以登录
- 设置no:root禁止远程登陆
- 设置without-password:root可以登录,但是不允许通过密码ssh登陆
- 设置forced-commands-only:可以登录,但是登陆后不能进入交互,而是执行指定的命令后自动退出
2.3 禁止SSH空密码用户登录
配置PermitEmptyPasswords,设置为no:禁止SSH空密码用户登录
PermitEmptyPasswords no
2.4 限制尝试次数
配置MaxAuthTries
vim /etc/ssh/sshd_config
# 取消注释,设置最大密码尝试失败次数3-6,建议为4
MaxAuthTries 4
2.5 空闲超时退出
配置ClientAliveInterval、ClientAliveCountMax
vim /etc/ssh/sshd_config
# 取消注释,将ClientAliveInterval设置为300到900,即5-15分钟,将ClientAliveCountMax设置为0-3
ClientAliveInterval 600
ClientAliveCountMax 2
2.6 切换登录端口
vim /etc/ssh/sshd_config
#修改Port
Port <新端口>
SELinux放行:
semanage port -a -t ssh_port_t -p tcp <新端口>
防火墙放行:
firewalld -cmd --zone=pulic --add-port=ssh <新端口>/tcp --permanent
2.7 密钥对
具体过程:
-
生成密钥
[root@host ~]$ ssh-keygen <== 建立密钥对 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): <== 按 Enter Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空 Enter same passphrase again: <== 再输入一遍密钥锁码 Your identification has been saved in /root/.ssh/id_rsa. <== 私钥 Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥 The key fingerprint is: xxxxxxx
-
服务器安装公钥
# 安装公钥 cd .ssh cat id_rsa.pub >> authorized_keys # 文件权限 chmod 600 authorized_keys chmod 700 ~/.ssh # 配置文件/etc/ssh/sshd_config # 允许密钥登录 RSAAuthentication yes PubkeyAuthentication yes # 允许root通过SSH登录 PermitRootLogin yes # 禁用密码登录 PasswordAuthentication no # 重启服务 service sshd restart
-
客户端SSH使用私钥登录
2.8 日志记录
配置LogLevel,设置为INFO:记录登录和注销活动
vim /etc/ssh/sshd_config
#取消注释
LogLevel INFO
2.9 使用V2安全协议
设置参数: Protocol 2
,SSHD强制使用V2安全协议
vim /etc/ssh/sshd_config
Protocol 2
3. 权限管理
3.1 常用命令
chmod
变更文件或目录的权限
chmod u+x,g+w filename //设置自己可以执行,组员可以写入的权限
chmod u=rwx,g=rw,o=r filename
chmod 764 filename
chmod a+x filename
- u: User,即文件或目录的拥有者
- g: Group,即文件或目录的所属群组
- o: Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围
- a: All,即全部的用户,包含拥有者,所属群组以及其他用户
- r: 读取权限,数字代号为 4
- w: 写入权限,数字代号为 2
- x: 执行或切换权限,数字代号为 1
- -:不具任何权限,数字代号为 0
- s: 特殊功能说明:变更文件或目录的权限
umask
设置限制新建文件权限的掩码,在原有权限的基础上删除指定的权限
umask 022 #若初始权限是777,之后变为755
文件默认权限 644,目录默认权限 755
umask值可在/etc/profile文件中修改
chown
改变某个文件或目录的所有者和所属的组
chown -R <username>:<groupname> <filename>
3.2 重要目录文件
/etc/passwd
/etc/shadow
/etc/gshadow
/etc/group
/etc/hosts.deny
/etc/hosts.allow
/etc/services
/etc/ssh/sshd_config
3.3 配置文件权限
chown root:root /etc/passwd /etc/shadow /etc/group /etc/gshadow
chmod 0644 /etc/group
chmod 0644 /etc/passwd
chmod 0400 /etc/shadow
chmod 0400 /etc/gshadow
4. 日志管理
4.1 查看系统日志
tail /var/log/messages
4.2 rsyslog服务
rsyslog具体参考:https://www.cnblogs.com/shu-sheng/p/13275474.html
配置文件
vim /etc/rsyslog.conf
/etc/rsyslog.d
目录是单独配置的rsyslog配置文件
文件部分详解
rules格式: 认证相关服务.所有日志等级(服务名称[连接符号]日志等级) 日志记录的位置
#$ModLoad imudp
#$UDPServerRun 514 #允许514端口接收使用UDP协议转发过来的日志
#$ModLoad imtcp
#$InputTCPServerRun 514 #允许514端口接收使用TCP协议转发过来的日志
#### RULES ####
#kern.* /dev/console
# 关于内核的所有日志都放到/dev/console(控制台)
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# 记录所有日志类型的info级别以及大于info级别的信息到/var/log/messages,但是mail邮件信息,authpriv验证方面的信息和cron时间任务相关的信息除外
authpriv.* /var/log/secure
# authpriv验证相关的所有信息存放在/var/log/secure
mail.* -/var/log/maillog
# 邮件的所有信息存放在/var/log/maillog; 这里有一个-符号, 表示是使用异步的方式记录, 因为日志一般会比较大
cron.* /var/log/cron
# 计划任务有关的信息存放在/var/log/cron
*.emerg :omusrmsg:*
# 记录所有的大于等于emerg级别信息, 以wall方式发送给每个登录到系统的人
uucp,news.crit /var/log/spooler
# 记录uucp,news.crit等存放在/var/log/spooler
# uucp –unix to unix copy, unix主机之间相关的通讯,news –新闻组
local7.* /var/log/boot.log
# 启动的相关信息
#*.* @@remote-host:514
# @@表示通过tcp协议发送,使用TCP协议转发到remote-host的514(默认)端口,@表示通过udp进行转发
查看rsyslog服务状态
systemctl stauts rsyslog.service
设置rsyslog开机自启动
systemctl enable rsyslog
启动rsyslog服务
systemctl start rsyslog
5. 其他
ASLR-地址空间随机化
开启地址空间布局随机化
sysctl -w kernel.randomize_va_space=2
配置文件
cat /proc/sys/kernel/randomize_va_space
配置kernel.randomize_va_space参数
- 0 :关闭进程地址空间随机化。
- 1:半随机。共享库、栈、mmap() 以及 VDSO 将被随机化。
- 2:全随机。在1的基础上增加堆(heap)的随机化。
本文来自博客园,作者:0dot7,转载请注明原文链接:https://www.cnblogs.com/0dot7/p/16841655.html
文章如有错误,欢迎各位师傅指正!!!
免责声明请勿利用文章内的相关技术从事非法测试,由于传播、利用文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!