豌豆贴心提醒,本文阅读时间7分钟
在上一篇文章《linux服务器安全配置实例(一)》中介绍了我对ssh服务的一些常用的安全配置和性能优化。 其实ssh服务是我们进入服务器的一扇大门,这扇大门是提供正常人使用钥匙打开后进屋的。而对于一些恶意的小伙伴,他们会使用一些非法的方式,比如走窗户、暴力开锁等去不经过我们的同意就进屋大肆破坏。 走窗户:通过一些系统的0day漏洞或者第三方服务以及软件的漏洞溢出或者注入,在服务器中运行恶意的代码来得到登陆权限。 暴力开锁:通过一些暴力破解软件,暴力破解我们的ssh服务、网站管理员密码等。 对于暴力开锁我们在对sshd服务器安全配置和优化中已经说明如何防范。对于走窗户、跳烟囱这样采用漏洞攻击的方式,我们最简单的方式就是及时修复漏洞,配置防火墙和杀毒软件等。 当然在一些大型的企业、政府的办公环境下,网络安全是十分主要的,自然会加入更多的安全机制,如:入侵检测系统、安全网关、网闸、堡垒机等。其实无论我们如何配置或者加入无数安全机制,都是没有绝对的安全的。没有绝对安全这句话是在网络安全圈子内最流行的一句话。
当这些漏洞被挖掘出来,无论漏洞公布者是出于学术交流还是炫耀自己多么牛逼,那么当公布出来的那一刻就意味着成千上万的服务器造成严重的威胁。其实不公布才是最可怕的!所以我们无法预测漏洞合适会出现,也无法预计自己的服务器是否会被人利用。那么我们可以假设:我的服务器被攻陷后怎么办? 这个用户权限拥有至高无上的能力。所以恶意攻击者会用各种手段去获取root权限。获取root权限也常在安卓手机中使用,安卓操作系统也是linux的分支,所以当安卓root后手机将不会安全,任何进程都可以使用setuid()系统调用,设置自己进程拥有root权限,那么木马病毒也不例外了。所以完全杜绝使用root用户在服务器中启动任何服务,使用私有用户去启动进程,同时禁止root用户登录。也就是在恶意攻击者通过对服务进程漏洞攻击后,拿到的用户权限不是root,同时利用一些系统内核级的漏洞对root进行提权也是无法登录的。对私有用户的活动目录进行限制,提权操作也更是难上加难。
下面详细说明一下账户权限和目录权限的配置。 1.禁止root 这一点在对sshd服务安全配置和优化已经说明了,具体配置可以点开链接查看。第二个就是在系统内使用su命令切换root用户了。其实这是一件挺麻烦的事情,我们知道对系统一些更改、安装软件、升级系统都需要root权限。那么为了安全我们需要禁用它,为了配置系统我们又要使用它,自相矛盾了。这里给出2种解决矛盾的方法: 彻底禁用root登陆,使用sudo。 root可以使用su切换,但是禁止远程登陆。 这两种方法各有利弊,第一种完全可以杜绝root用户的使用,同时也很难对root提权。这里需要说明下sudo,sudo可以让普通用户拥有root用户的权限,例如在普通用户下使用 就可以直接在非root用户的情况下安装namp端口扫描工具。可以使用sudo命令的用户需要在/etc/sudoers文件中进行一些配置。 该配置文件的格式为: 全句的意思是:授权根用户在所有计算机上以所有用户的身份运行所有文件。其实简单来说,我们可以在sudoers文件中配置哪些用户可以使用root权限执行哪些命令。 而对于日常巡检系统升级需要用到root权限的命令也可以为巡检用户进行配置,如: 第一种方案麻烦就麻烦在需要每个用户都进行配置,但是权限细分安全有保证。 彻底禁用root登陆,当前用户为root下编辑/etc/shadow执行: 如果当前用户为非root下编辑/etc/shadow执行: 需要注意如果sudo没有权限,请通过root用户配置sudoers。 shadow文件保存了用户和密码等信息,每一列中间以:分割。
在root用户的第二列之前加入!!,表示禁止该用户。 对shadow文件编辑完成后保存退出。 passwd文件保存了用户账户的基本信息,每一列中间以:分割。
根据上面的描述,可以将root用户的第七列改为/sbin/nologin,禁止root用户的登录。 2.创建私有用户
使用groupadd创建组,-g参数指定组ID,即GID 使用useradd创建用户,-g参数指定GID,-u参数指定UID,-d参数指定用户的home目录,-s参数指定用户的shell程序,由于服务私有用户不需要远程登录,所以配置为/sbin/nologin 3.设置私有用户活动权限 对于服务的私有用户,需要对其目录访问权限进行一些设定,防止应用服务被渗透后,恶意攻击者在服务器中使用已有的权限乱搞。同时需要说明一下如何使用私有用户启动服务。需要注意的是,每个针对服务的私有用户权限配置都不同,但是基本配置方式都差不多,都是有规律可循的。首先我们需要确定应用服务的基本,即需要什么?变动什么?不变动什么?
不变动什么?应用服务的配置文件、库文件和可执行文件大多是不变的。在大多情况下,一个应用服务配置完成后启动对外服务,基本是不变的,但相对于库文件和可执行文件这种彻底不会变动的文件还算是可变。对于配置文件,与数据存储一样通常单独划分出来。 所以可以看出,我们只要需要把每个服务的日志文件、存储数据的文件、端口权限、执行文件和库文件进行授权。而对于其他目录和端口是不允许访问的。 这里使用nginx举例,我的nginx在服务器上的配置如下: nginx的配置文件路径/data/config/nginx_config nginx的日志和pid文件路径/data/var/nginx nginx的服务端口为80 针对上面的配置需要对nginx用户进行授权,下面说一下具体如何授权。 修改/srv的权限: 修改/srv/nginx的权限: 修改/data/和/data/config的权限 修改/data/config/nginx_config的权限 修改/data/var/的权限 修改/data/var/nginx的权限 文件权限已经修改好了,接下来需要配置nginx能够使用80端口。之前说过可以使用sudoers文件给nginx用户root权限,还有一个方式就是让nginx的启动文件/srv/nginx/sbin/nginx进行使能操作。使能顾名思义,使其拥有一定能力,这里使能是请求低端口使能。 进行使能操作。 接下来再在nginx的配置文件nginx.conf中加入user nginx来配置nginx使用nginx这个用户运行。 四、删除没用的用户 删除用户组使用groupdel命令: 注意组中可能存在多个用户,同时组内存在用户的话系统是不让删除的,一般没用的用户组内的用户也大多是没用的,所以可以把组内用户全部删除掉再删除组。 用户账户权限配置做到这些就已经可以了,配置用户权限是个细致的活,尤其在不同用户活动空间和执行命令上配置需要谨慎,稍有遗漏都有可能会被恶意攻击者利用。通常我们会采用编写脚本方式对这些进行配置,如果对服务器脚本有兴趣的同学不妨钻研一下。 今日值班老师 豌豆 Linux面授班,报名优惠400元,只有10个名额 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|