0%

linux操作系统加固

Linux系统基本操作

文件结构图及关键文件功能

Linux文件结构

image

Linux文件结构图

image

二级目录

目录 功能
/bin 放置的是在单人维护模式下能够被操作的指令,在/bin底下的指令可以被root与 一般账号所使用
/boot 这个目录只要在放置开机会使用到的文件,包括Linux核心文件以及开机选单与 开机所需配置的文件等等
/dev 在Linux系统上,任何装置与接口设备都是以文件的形态存在于这个目录当中的
/etc 系统主要的配置文件几乎都放置在这个目录内,例如人员的账号密码文件,各 种服务的启动档,系统变量配置等
/home 这是系统默认的用户家目录(homedirectory)
/lib /lib放置的则是在开机时会用到的函式库,以及在/lib或/sbin底下的指令会呼叫 的函式库
/media /media底下放置的是可移出的装置,包括软盘、光盘、DVD等等装置都杂事挂载与此
/opt 给第三方协议软件放置的目录
/root 系统管理员(root)的家目录
/sbin 放置/sbin底下的为开机过程中所需要的,里面包括了开机、修复、还原系统所 需要的指令。
/srv srv可视为[service]的缩写,是一些网络服务启动之后,这些服务所需要取用的 数据目录
/tmp 这是让一般使用者或者是正在执行的程序暂时放置文件的地方

文件

目录 功能
/etc/passwd 记录系统本地用户的属性信息,如UId,Gid,家目录等信息
/etc/shadow 存放用户的口令等信息,只有系统管理员用户能查看
/etc/pam.d/system-auth 账户安全配置文件
/etc/login.defs 设置用户账户限制的配置文件,对root用户无效
/etc/securetty 网络配置文件
/etc/pam.d/su su命令配置
/etc/hosts.allow、/etc/hosts.deny 允许/拒接某网段远程连接到主机
/etc/profile 保存Linux全局环境变量信息,如umask,bash历史命令设置

账号管理

账号分类:

超级管理员 uid=0

系统默认用户 系统程序使用,从不登录

新建普通用户 uid大于500

image

/etc/passwd

image

1
2
3
4
5
6
7
8
9
head -1 /etc/passwd

字段1:用户账号的名称
字段2:密码字符串或占位符x
字段3:用户账号的UID号
字段4:所属基本组的GID号
字段5:用户全名
字段6:宿主目录
字段7:登录shell程序的路径

/etc/shadow

image

1
2
3
4
5
6
7
8
9
10
11
head -1 /etc/shadow

字段1:用户账号的名称
字段2:加密后的密码字符串
子段3:上次修改密码的时间
字段4:密码的最短有效天数,默认0
字段5:密码的最长有效天数,默认99999
字段6:密码过期前的警告天数,默认7
字段7:密码过期后多少天禁用此用户账号
字段8:账号失效时间,默认值为空
字段9:保留字段(未使用)

用户管理

1
2
3
4
5
6
useradd test        //添加用户test
passwd test //为test用户设置密码
passwd -l test //锁定用户test
passwd -u test //解锁用户test
userdel -r test //删除用户test
id //查看当前用户

image

权限管理

查看权限:ls -l

下图中文件所有者(属主)为root,所有组(属组)为root,文件名为install.log,权限为的第一个减号“-”代表的是文件类型:

-:普通文件,d:目录文件,l:链接文件,b:设备文件,c:字符设备文件,p:管道文件
image

读(read),写(write),执行r(recute)简写即为(r,w,x),亦可用数字来(4,2,1)表示

image

修改权限:chown

chown命令是用于更改文件的用户和组的所有权。要将文件 foo 的用户和组的所有权更改为 root,可以使用以下命令:

1
2
1)chown root:root foo
2)chown root: foo

在用户名后跟冒号【: 】运行该命令将同时设置用户和组所有权。

要仅将文件 foo 的用户所有权设置为 root 用户,操作命令:

1
chown root foo

要仅更改文件 foo 的组所有权,则需要在组之前加冒号,操作命令:

1
chown :root foo

初始文件权限:UMASK

这篇文章写的很详细,可以参考一下

https://www.cnblogs.com/wang-shishuang/p/10458875.html

系统加固

锁定系统中多余的自建账号

执行命令:

1
2
cat /etc/passwd
cat /etc/shadow

查看账户、口令文件,与系统管理员确认不必要的账号。对于一些保留的系统伪帐户如:bin,sys,adm,uucp,lp,nuucp,hpdb,www,daemon等可根据需要锁定登陆。

加固方法:

使用命令passwd -l <用户名>锁定不必要的账号。

使用命令passwd -u <用户名>解锁需要恢复的账号。

检查shadow中空口令账号

检查方法:

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

image

加固方法:
使用命令passwd -l <用户名>锁定不必要的账户。
使用命令passwd -u <用户名>解锁需要恢复的账户。
使用命令passwd <用户名>为用户设置密码。

设置系统密码策略

执行命令(查看密码策略设置):

1
cat /etc/login.defs|grep PASS

image

加固方法(修改配置文件):

1
2
3
4
5
6
vi /etc/login.defs

PASS_MAX_DAYS 90 //用户的密码最长使用天数
PASS_MIN_DAYS 0 //两次修改密码的最小时间间隔
PASS_MIN_LEN 7 //密码的最小长度
PASS_WARN_AGE 9 //密码过期前多少天开始提示

禁用root之外的超级用户

检测方法(检查id为0的用户):

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

image

加固方法:
使用命令passwd -l <用户名>锁定用户

限制能够su为root的用户

使用命令cat /etc/pam.d/su查看是否有auth required /lib/security/pam_wheel.so这样的配置条目

加固方法:(在头部添加)

1
auth required /lib/security/pam_wheel.so group=wheel

这样,只有wheel组的用户可以su到root

image

重要文件加上不可改变属性

1
2
3
4
5
6
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/gshadow
chattr +i /etc/group
chattr +i /etc/inetd.conf
chattr +i /etc/httpd.conf

Umask安全

image

第一个0代表suid 丢弃的权限;
第二个0代表本文件/目录拥有者什么权限都没丢弃
第三个2代表本文件/目录的用户组丢弃了w权限
第四个2代表本文件/目录的其他用户能使用的权限只有有r和x

实际权限=7777-0022

1
umask 0022

ssh安全

禁止root用户进行远程登录
检查方法:

1
cat /etc/ssh/sshd_config | grep PermitRootLogin是否为no

加固方法:

1
2
vi /etc/ssh/sshd_config
PermitRootLogin no

更改服务端口:

1
2
vi /etc/ssh/sshd_config
Port 2222 //更改ssh端口

屏蔽SSH登录banner信息

检查方法:

1
2
3
4
cat /etc/ssh/sshd_config | grep banner
//查看文件中是否存在banner字段,或banner字段为NONE
cat /etc/motd
查看文件内容,该处内容作为banner信息显示给登录用户

加固方法:

1
vim /etc/ssh/sshd_config

添加banner NONE

1
vim /etc/motd

删除全部内容或更新成自己想要添加的内容

image

仅允许SSH协议版本2

有两个SSH协议版本,仅使用SSH协议版本2会更安全,SSH协议版本1有安全问题,包括中间人攻击
(man-in-the-middle)和注入(insertion)攻击。

编辑/etc/ssh/sshd_config文件并查找下面这样的行:

1
2
3
Protocol 2,1
修改为
Protocol 2

image

防止误使用Ctrl+Alt+Del重启系统

检查方法(查看输出行是否被注释):

1
2
cat /etc/inittab |grep ctrl-alt-del
Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

加固方法(在行开否添加注释符号“#”):

1
2
vim /etc/inittab
# Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target

image

设置账户锁定登录失败锁定次数、锁定时间

检查方法(查看有无auth required pam_tally2.so条目的设置):

1
cat /etc/pam.d/system-auth|grep auth 

加固方法:

1
2
3
vim /etc/pam.d/system-auth

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

设置为密码连续错误3次锁定,锁定时间30秒。root密码连续错误3次锁定,时间为 100秒
image

修改账户TMOUT值,设置自动注销时间

检查方法(查看有无TMOUT的设置):

1
cat /etc/profile|grep TMOUT 

加固方法:

1
2
vim /etc/profile
TMOUT=600 //增加条目。无操作600秒后自动退出

image

设置BASH保留历史命令的条目

检查方法:

1
cat /etc/profile | grep HISTSIZE

加固方法(修改HISTSIZE=5即保留最新执行的5条命令
):

1
vim /etc/profile

image

用户注销时删除命令记录

检查方法:

1
cat /etc/skel/.bash_logout

增加如下行:

1
2
vim /etc/skel/.bash_logout
rm -f $HOME/.bash_history

这样,系统中的所有用户注销时都会删除其命令记录,如果只需要针对某个特定用户,如root用户进行设置,则可只在该用户的主目录下修改/$HOME/.bash_history文件增加相同的一行即可。

image

设置系统日志策略配置文件

日志的主要用途是系统审计、监测追踪和分析统计
为了保证 Linux 系统正常运行、准确解决遇到的各种各样的系统问题,认真地读取日志文件是管理员的一项非常重要的任务。UNIX/Linux采用了syslog工具来实现此功能,如果配置正确的话,所有在主机上发生的事情都会被记录下来,不管是好的还是坏的。

检查方法:

1
2
3
4
5
ps -aef | grep syslog   //确定syslog服务是否启用
cat /etc/rsyslog.conf //查看syslogd的配置文件
cat /var/log/messages //查看系统日志
cat /var/log/cron //查看cron日志
cat /var/log/secure //查看安全日志

详细配置文件的说明可以参考这篇博客:
https://www.cnblogs.com/lizhouwei/p/10134049.html

阻止系统响应任何从外部/内部来的ping请求

加固方法:

1
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

执行以上命令,其他客户端就不能ping通服务器了

image