codecamp

你所忽略的Linux系统安全及应用(最全面)

防伪码:千磨万击还坚劲,任尔东西南北风

            第八章 系统安全及应用

前言:虽然说linux系统安全,高效,稳定,但如果平时不注意安全优化,也不会安全。本章将介绍账户安全,系统引导和登录的安全,以及弱口令检测,网络扫描工具的使用+综合实战!

一、账号安全控制

1、系统账号清理

1)以下常见的非登录用户要确保不被人为改动:

2) 各种非登录账户中,还有一部分是很少用到的,如news,uucp,games,gopher,这些用户可视为冗余账号,直接删除即可

3) 若不确定能否被删除,可以暂时锁定

4) 如果服务器中的账户已经固定,不再进行更改,还可以采用锁定账号配置文件的方法。

使用chattr命令,分别结合+i,-i来锁定、解锁。使用lsattr查看文件锁定情况。

2、 密码安全控制

1) 设置密码有效期为30天

修改配置文件,适合新建立的用户,vi  /etc/login.defs

使用命令:Chage -M 30 zhangsan,适用于已有的张三用户

 2) 设置用户下次登录时重设密码

然后使用张三登录终端

先输入原密码,然后再输入两次新密码,注意复杂性。

3、 命令历史,自动注销

1) 修改配置文件,设置最多纪录200条历史命令,如果纪录太多,容易泄露信息。

Vi  /etc/profile,适用于新登录的用户

重启系统或者执行source  /etc/profile使之生效。

 执行export  HISTSIZE=10适用于当前的账户

2) 当用户退出已登录的bash环境后,清空历史纪录

vi ~/.bash_history

删除一些不想让别人看到的命令,保存并退出

执行history -c:清空本次留在缓存中的历史命令 

history -w :强制刷新缓存中的命令记录到.bash_history 文件中 

然后重启之后重新登录系统,执行history发现没有历史纪录

3) 设置超时时间,指定时间没有任何输入就自动注销。

Vi  /etc/profile,适用于新登录的用户。

执行export TMOUT=10用于当前用户(为了测试方便,时间调10秒),10秒之内没有任何输入就退出系统。也可以使用unset TMOUT取消设置

二、 用户切换与提权

1、 su命令:用来切换用户,具有该用户的所有权限。

1)su切换用户

上图的命令只切换用户身份,不切换用户环境,如果想切换身份的同时切换环境,需要在su后面加“-”,如下图:

2) 允许个别用户使用su命令进行切换,需要将授权使用su命令的用户zhangsan添加到wheel组,

修改/etc/pam.d/su认证配置

Vi  /etc/pam.d/su,去掉下图中圈中的auth前面的#号。

重启系统之后使用zhangsan登录,执行su  -  root 可以正常切换,但是使用其他用户提示密码不正确,登录失败。

2、 sudo命令,提升执行权限,可以让普通用户拥有一部分管理权限,又不需要将root用户的密码告诉对方。

1) 在配置文件/etc/sudoers中添加授权

例如:授权用户lisi能够执行ifconfig命令修改ip地址,而wheel组的用户不需要验证密码即可执行任何命令,可以执行以下操作。

执行命令:Visudo

2) 通过sudo命令测试特权命令

使用lisi登录系统,执行/sbin/ifconfig  eth0:0 192.168.1.1,提示失败,权限不够。

如果在命令前面加上sudo,执行成功

三、 系统引导和登录控制

1、 开关机安全控制

1) 调整biso引导控制

将第一引导设备设置为当前系统所在磁盘

禁止从光盘,u盘,网络等引导系统(Disabled)

将bios设置好管理密码。

2) 禁止ctrl+alt+del重启系统系统

Vi  /etc/init/control-alt-delete.conf

重启系统之后,按ctrl+alt+del无法重启系统(在终端中测试)

 3) 限制更改grub引导参数

首先使用grub-md5-mcypt生成加密的密码

然后修改配置文件,把密文添加到第一个title之前,如下图:

重启系统进入grub菜单,如果想修改引导参数,必须先按p输入密码,然后按e才能编辑引导参数

2、 终端及登录控制

1) 减少开放的tty终端个数,禁用tty1,tty2,tty3

Vi  /etc/init/start-ttys.conf

Vi  /etc/sysconfig/init

注意两个文件都需要更改

2)禁止root用户从tty5和tty6终端登录

Vi  /etc/securetty

3)禁止普通用户登录,只需要建立/etc/nologin文件即可,如果恢复普通用户登录,删除这个文件即可

Touch  /etc/nologin

然后使用普通用户登录测试

四、 弱口令检测和端口扫描

1、 弱口令探测(john  the ripper)

1)下载并安装

查看是否安装成功

2) 检测弱口令

查看密码破解出的账户列表:

3) 使用密码字典文件破解,默认的字典文件为password.lst

首先清空破解出的账户列表

然后为xiaoming用户设置强密码Pwd@123

把密码写在字典文件中:vi password.lst,也可以使用密码字典生成工具生成密码,然后再导入到password.lst文件中。

执行破解(破解之前需要重新拷贝shadow文件

2、网络扫描(NMAP)

1)安装NAMP软件包

2) 针对本机进行扫描,检查开放了哪些常用的tcp端口,udp端口

Filtered表示可能被防火墙过滤

3) 检查哪些主机提供了ftp服务

4) 检测192.168.0.0网段中有哪些存活主机(能ping通)

5) 检测192.168.0.1-254主机是否开启文件共享服务

综合实战演练:

实验环境:

某公司新增了一台企业级服务器,已安装运行RHEL 6操作系统,由系统运维部、软件开发部、技术服务部共同使用。由于用户数量众多,且使用时间不固定,要求针对账号和登录过程采取基本的安全措施。

需求描述:

1、允许radmin使用su命令进行切换,其他用户一律禁止切换身份

2、授权zhangsan管理员工的账号,但禁止其修改root用户的信息

3、授权lisi能够执行/sbin/,/usr/sbin目录下的所有特权命令,不需要密码验证

4、所有的su、sudo操作,必须在系统日志文件中进行记录

5、禁止使用ctrl+alt+del快捷键,只开放tty3,tty5终端,为grub引导菜单设置密码

A、设置使用su命令

(1)修改认证文件/etc/pam.d/su,启用pam_wheel.so认证模块。

(2)将radmin用户加入到wheel组。

(3)验证除了root、radmin以外,其他用户均不能使用su进行切换。

B、设置sudo授权

(1)授权用户zhangsan使用useradd、userdel、passwd、usermod命令,但禁止其执行“passwd root”、“usermod * root”操作。(2)授权lisi用户使用/sbin/*、/usr/sbin/*命令,添加NOPASSWD:以取消验证。(3)添加“Defaults logfile”配置行,以启用sudo日志。

(4)分别以zhangsan、lisi用户登录,验证授权的sudo操作,并查看日志。

C、限制引导及登录过程

(1)禁用Ctrl+Alt+Del热键,禁用tty1、tty2、tty4、tty6这四个终端。

(2)在grub.conf文件中的第一个title行之前添加密码配置。

(3)重启后进入到GRUB菜单界面,验证直接按e键已无法编辑引导参数。

谢谢观看 由衷的希望能帮到大家!


本文出自 “一盏烛光” 博客,谢绝转载!

Linux 用shell脚本自动化备份数据库
Linux 深入研究iptables防火墙基础
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }