Linux服务器安全配置实例(二)用户账户权限配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

没有绝对的安全

在上一篇文章《linux服务器安全配置实例(一)》中介绍了我对ssh服务的一些常用的安全配置和性能优化。

其实ssh服务是我们进入服务器的一扇大门,这扇大门是提供正常人使用钥匙打开后进屋的。而对于一些恶意的小伙伴,他们会使用一些非法的方式,比如走窗户、暴力开锁等去不经过我们的同意就进屋大肆破坏。

走窗户:通过一些系统的0day漏洞或者第三方服务以及软件的漏洞溢出或者注入,在服务器中运行恶意的代码来得到登陆权限。

暴力开锁:通过一些暴力破解软件,暴力破解我们的ssh服务、网站管理员密码等。

对于暴力开锁我们在对sshd服务器安全配置和优化中已经说明如何防范。对于走窗户、跳烟囱这样采用漏洞攻击的方式,我们最简单的方式就是及时修复漏洞,配置防火墙和杀毒软件等。

当然在一些大型的企业、政府的办公环境下,网络安全是十分主要的,自然会加入更多的安全机制,如:入侵检测系统、安全网关、网闸、堡垒机等。其实无论我们如何配置或者加入无数安全机制,都是没有绝对的安全的。没有绝对安全这句话是在网络安全圈子内最流行的一句话。

漏洞的产生是防不胜防的,我们曾经依托于openssl去保护我们的信息传输过程中不被第三方嗅探到内容,但是万万没想到的心脏大出血漏洞出现了。我们曾经呐喊着Linux服务器是最安全的(没错,因为linux操作系统用的人少,它的安全机制也确实十分完善),但是没有一点点防备的bash破壳漏洞出现了。

攻击者的目标:root权限

当这些漏洞被挖掘出来,无论漏洞公布者是出于学术交流还是炫耀自己多么牛逼,那么当公布出来的那一刻就意味着成千上万的服务器造成严重的威胁。其实不公布才是最可怕的!所以我们无法预测漏洞合适会出现,也无法预计自己的服务器是否会被人利用。那么我们可以假设:我的服务器被攻陷后怎么办?

其实在漏洞凌完成后,第二部就是拿到登陆服务器的权限。所以我们可以很确定的说,用户权限就是恶意攻击者的下一个目标。linux、unix操作系统的最高权限都是root,其uid为0。  

这个用户权限拥有至高无上的能力。所以恶意攻击者会用各种手段去获取root权限。获取root权限也常在安卓手机中使用,安卓操作系统也是linux的分支,所以当安卓root后手机将不会安全,任何进程都可以使用setuid()系统调用,设置自己进程拥有root权限,那么木马病毒也不例外了。所以完全杜绝使用root用户在服务器中启动任何服务,使用私有用户去启动进程,同时禁止root用户登录。也就是在恶意攻击者通过对服务进程漏洞攻击后,拿到的用户权限不是root,同时利用一些系统内核级的漏洞对root进行提权也是无法登录的。对私有用户的活动目录进行限制,提权操作也更是难上加难。

防御技巧

下面详细说明一下账户权限和目录权限的配置。

1.禁止root

禁止root登陆有2个地方可以配置,第一个在ssh服务中:  

这一点在对sshd服务安全配置和优化已经说明了,具体配置可以点开链接查看。第二个就是在系统内使用su命令切换root用户了。其实这是一件挺麻烦的事情,我们知道对系统一些更改、安装软件、升级系统都需要root权限。那么为了安全我们需要禁用它,为了配置系统我们又要使用它,自相矛盾了。这里给出2种解决矛盾的方法:

彻底禁用root登陆,使用sudo。

root可以使用su切换,但是禁止远程登陆。

这两种方法各有利弊,第一种完全可以杜绝root用户的使用,同时也很难对root提权。这里需要说明下sudo,sudo可以让普通用户拥有root用户的权限,例如在普通用户下使用  

就可以直接在非root用户的情况下安装namp端口扫描工具。可以使用sudo命令的用户需要在/etc/sudoers文件中进行一些配置。  

该配置文件的格式为:

用户或者组(组需要在组名前加%)主机=(用户) 执行的命令,如:  

全句的意思是:授权根用户在所有计算机上以所有用户的身份运行所有文件。其实简单来说,我们可以在sudoers文件中配置哪些用户可以使用root权限执行哪些命令。

对于第一种方案,我们就是在禁用root以后通过sudo对系统进行一些修改,所以说sudo相当于拥有一定的root权限,因此sudo的权限也需要严格控制。这一点就有一些麻烦,通常建议为每个服务创建一个私有用户,倘若启动一些服务需要root权限,那么可以将需要root的命令配置到sudoers文件中。例如:为nginx创建了nginx私有用户,需要使用80端口,linux系统是不允许非root用户请求低端口的,一般有两种方案解决:1、创建使能2、在sudoers文件中配置如下: 

而对于日常巡检系统升级需要用到root权限的命令也可以为巡检用户进行配置,如:  

第一种方案麻烦就麻烦在需要每个用户都进行配置,但是权限细分安全有保证。

彻底禁用root登陆,当前用户为root下编辑/etc/shadow执行:  

如果当前用户为非root下编辑/etc/shadow执行:  

需要注意如果sudo没有权限,请通过root用户配置sudoers。  

shadow文件保存了用户和密码等信息,每一列中间以:分割。

  • 列1 定义与这个 shadow 条目相关联的特殊用户帐户。
  • 列2 包含一个加密的密码。
  • 列3 自 1/1/1970 起,密码被修改的天数
  • 列4 密码将被允许修改之前的天数(0 表示“可在任何时间修改”)
  • 列5 系统将强制用户修改为新密码之前的天数(1 表示“永远都不能修改”)
  • 列6 密码过期之前,用户将被警告过期的天数(-1 表示“没有警告”)
  • 列7 密码过期之后,系统自动禁用帐户的天数(-1 表示“永远不会禁用”)
  • 列8 该帐户被禁用的天数(-1 表示“该帐户被启用”)
  • 列9 保留供将来使用

在root用户的第二列之前加入!!,表示禁止该用户。  

对shadow文件编辑完成后保存退出。

编辑/etc/passwd,执行  

 

passwd文件保存了用户账户的基本信息,每一列中间以:分割。

  • 列1 用户名,用户名在系统中是唯一的。
  • 列2 用户密码列,新版本的unix/linux系统密码已经转移到/etc/shadow中。
  • 列3 用户id(UID),UID是在系统中是唯一的,对于操作系统来说只认识UID,用户名是给用户看的。
  • 列4 组id(GID),GID是在系统中是唯一的,对于操作系统来说只认识GID,组名称是给用户看的。
  • 列5 用户全名,包含有关用户的一些信息,如用户的真实姓名、办公室地址、联系电话等。在Linux系统中,mail和finger等程序利用这些信息来标识系统的用户。
  • 列6 用户home目录,该字段定义了个人用户的主目录,当用户登录后,他的Shell将把该目录作为用户的工作目录。
  • 列7 命令解释程序(Shell),Shell是当用户登录系统时运行的程序名称,通常是一个Shell程序的全路径名, 如/bin/bash。 注意如果需要禁止用户登录可以把该列改为/sbin/nologin。

根据上面的描述,可以将root用户的第七列改为/sbin/nologin,禁止root用户的登录。  

2.创建私有用户

私有用户的意思是对每一个服务创建专用的用户来运行服务,比如nginx使用nginx用户运行,apache使用apache用户运行,mariadb使用MySQL用户运行等。私有用户包含了私有用户和私有用户组,私有用户组是指组中只有一个用户,如nginx组为nginx的私有用户。为每一个服务创建一个私有用户好处在于,当对外提供的服务由于不可预知的漏洞,恶意攻击者对服务进行溢出攻击,溢出的恶意代码执行成功后恶意攻击者拿到的用户权限也只是服务的私有用户,由于私有用户的权限非常低,所以减小了系统以及应用暴露的范围。使得危险可控。

对于服务,我们使用UID为100-999之间任意一个未被使用的UID,UID 1~99是保留给其它预定义用户的,UID 100~999是保留给系统用户的。而GID由于是私有组,建议与用户UID相同。

创建私有用户和普通用户一样,与普通用户区别在于:

  • 针对服务UID在999以内,普通用户UID在999以后。
  • 活动空间一般只在应用服务的安装路径,普通用户活动空间在/home下。
  • 针对服务的私有用户只用于启动服务,禁止登陆,普通用户一般用于登陆。

使用groupadd创建组,-g参数指定组ID,即GID 

使用useradd创建用户,-g参数指定GID,-u参数指定UID,-d参数指定用户的home目录,-s参数指定用户的shell程序,由于服务私有用户不需要远程登录,所以配置为/sbin/nologin  

3.设置私有用户活动权限

对于服务的私有用户,需要对其目录访问权限进行一些设定,防止应用服务被渗透后,恶意攻击者在服务器中使用已有的权限乱搞。同时需要说明一下如何使用私有用户启动服务。需要注意的是,每个针对服务的私有用户权限配置都不同,但是基本配置方式都差不多,都是有规律可循的。首先我们需要确定应用服务的基本,即需要什么?变动什么?不变动什么?

需要什么?应用服务最基本提供的是用户的交互请求、数据存储和计算。所以可以看出应用服务需要提供端口来保证用户的请求,而对于数据存储需要提供存储空间。对于web容器我们需要一个合理的端口,大多为80。对于数据库和缓存我们需要一个合理的存储空间,这个空间大多与服务器操系统盘分开,以外挂数据盘的方式存在,当然数据库和缓存服务也需要端口。

变动什么?服务应用程序在运行时间必然会产生临时文件和日志,临时文件我们大多保存在/tmp下,对于日志有很多种:

  • syslog,大多在/var/log/message中
  • 程序自己的日志空间
  • 写入数据库,mongodb、mysql等
  • 标准输出

不变动什么?应用服务的配置文件、库文件和可执行文件大多是不变的。在大多情况下,一个应用服务配置完成后启动对外服务,基本是不变的,但相对于库文件和可执行文件这种彻底不会变动的文件还算是可变。对于配置文件,与数据存储一样通常单独划分出来。

所以可以看出,我们只要需要把每个服务的日志文件、存储数据的文件、端口权限、执行文件和库文件进行授权。而对于其他目录和端口是不允许访问的。

这里使用nginx举例,我的nginx在服务器上的配置如下:

安装路径/srv/nginx  

nginx的配置文件路径/data/config/nginx_config  

nginx的日志和pid文件路径/data/var/nginx  

nginx的服务端口为80

针对上面的配置需要对nginx用户进行授权,下面说一下具体如何授权。

在对每个目录进行授权之前,先确保这些目录父目录的所属用户和组都为root,同时保证父目录中的nginx目录是700的权限(当然最好父目录下的所有文件目录都是700),这样保证了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进行使能操作。使能顾名思义,使其拥有一定能力,这里使能是请求低端口使能。

内核2.1以后使用  

进行使能操作。

接下来再在nginx的配置文件nginx.conf中加入user nginx来配置nginx使用nginx这个用户运行。

四、删除没用的用户

linux系统中有很多没用的用户,这些用户可以直接删除掉不影响系统。系统内存在没用的用户可能会被恶意入侵者提权利用,存在很大的安全隐患。同样有一些没用的组也可以删除掉。

删除用户使用userdel命令:  

删除用户组使用groupdel命令:  

注意组中可能存在多个用户,同时组内存在用户的话系统是不让删除的,一般没用的用户组内的用户也大多是没用的,所以可以把组内用户全部删除掉再删除组。

下面列出可删除的用户:

adm、lp、sync、shutdown、halt、news、uucp、operator、games、gopher

下面列出可删除的用户组:

adm、lp、news、uucp、games、dip、ppusers、popusers、slipusers

用户账户权限配置做到这些就已经可以了,配置用户权限是个细致的活,尤其在不同用户活动空间和执行命令上配置需要谨慎,稍有遗漏都有可能会被恶意攻击者利用。通常我们会采用编写脚本方式对这些进行配置,如果对服务器脚本有兴趣的同学不妨钻研一下。





作者:kid_2412
来源:51CTO
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
弹性计算 关系型数据库 MySQL
阿里云服务器搭建网站教程:经济型e实例2核2G快速搭建网站图文教程参考
目前在阿里云的活动中,轻量应用服务器2核2G3M带宽只要68元1年,2核4G4M带宽只要298元1年。云服务器ECS经济型e实例2核2G 3M固定带宽,价格只要99元/1年,新老用户都可购买,企业用户购买2核4G5M带宽199元一年,为用户提供长期权益。这些都是个人和普通企业用户搭建网站使用较多的云服务器,本文为大家展示使用经济型e实例2核2G3M带宽快速搭建网站的相关教程,以供参考。
157 18
|
18天前
|
存储 运维 资源调度
阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
阿里云经济型e云服务器以其高性价比、稳定可靠的性能以及灵活多样的配置选项,成为了众多企业在搭建官网时的首选。那么,阿里云经济型e云服务器究竟怎么样?它是否能够满足企业官网的搭建需求?本文将从性能表现、稳定性与可靠性、成本考虑等多个方面对阿里云经济型e云服务器进行深入剖析,以供大家参考选择。
|
19天前
|
存储 人工智能 安全
阿里云服务器五代、六代、七代、八代实例简介及性能提升介绍参考
随着技术的不断进步,阿里云服务器实例也经历了多代升级,从五代实例到最新的八代实例,每一代都在性能、稳定性、能效比等方面取得了显著提升。有的用户由于是初次接触阿里云服务器,所以不是很清楚阿里云服务器五代、六代、七代、八代实例有哪些,它们各自在云服务器性能上有哪些提升。本文将详细介绍阿里云服务器五代、六代、七代、八代实例的特点及性能提升,以供了解及选择。
阿里云服务器五代、六代、七代、八代实例简介及性能提升介绍参考
|
23天前
|
存储 安全 数据安全/隐私保护
阿里云服务器五代、六代、七代、八代实例简介及性能提升介绍
随着技术的不断进步,到2025年,阿里云服务器实例也经历了多代升级,从五代实例到最新的八代实例,每一代都在性能、稳定性、能效比等方面取得了显著提升。有的用户由于是初次接触阿里云服务器,所以不是很清楚阿里云服务器五代、六代、七代、八代实例有哪些,它们各自在云服务器性能上有哪些提升。本文将详细介绍阿里云服务器五代、六代、七代、八代实例的特点及性能提升,帮助用户更好地了解并选择适合自己的云服务器实例。
113 29
|
22天前
|
存储 弹性计算 应用服务中间件
阿里云轻量应用服务器出新品通用型实例了,全球26个地域可选
近日,阿里云再度发力,推出了首款全新升级的轻量应用服务器——通用型实例。这款服务器实例不仅标配了200Mbps峰值公网带宽,更在计算、存储、网络等基础资源上进行了全面优化,旨在为中小企业和开发者提供更加轻量、易用、普惠的云计算服务,满足其对于通用计算小算力的迫切需求。目前,这款新品已在全球26个地域正式上线,为全球用户提供了更加便捷、高效的上云选择。
137 27
|
13天前
|
存储 弹性计算 数据挖掘
阿里云服务器ECS通用算力型u1和ECS经济型e实例性能特点、使用及常见问题解答FAQ
阿里云ECS云服务器的经济型e实例和通用算力型u1实例深受开发者和中小企业青睐。e实例适合中小型网站、开发测试等轻量级应用,采用共享CPU调度模式,性价比高;u1实例则适用于中小型企业级应用,提供更高的性能保障和稳定性,支持固定CPU调度模式,计算性能更稳定。同等配置下,u1实例在网络带宽、IOPS等方面表现更优,价格也相对较高。个人用户可选择e实例,中小企业建议选择u1实例以确保业务稳定性。
|
25天前
|
存储 弹性计算 安全
阿里云服务器经济型e实例4核16G和8核32G特惠云服务器测评参考
阿里云有两款特惠云服务器——4核16G10M带宽和4核32G10M带宽,系统盘都是100G ESSD Entry,价格分别仅需70元1个月和160元1个月。那么,这两款云服务器到底性能如何?适用于哪些场景?是否值得购买?本文将全方位深入测评这两款特惠云服务器,并为您提供详细的购买建议。
|
30天前
|
存储 人工智能 网络协议
浅聊阿里云倚天云服务器:c8y、g8y、r8y实例性能详解与活动价格参考
选择一款高性能、高性价比的云服务器对于企业而言至关重要,阿里云推出的倚天云服务器——c8y、g8y、r8y三款实例,它们基于ARM架构,采用阿里自研的倚天710处理器,并基于新一代CIPU架构,通过芯片快速路径加速手段,实现了计算、存储、网络性能的大幅提升。2025年,计算型c8y云服务器活动价格860.65元一年起,通用型g8y云服务器活动价格1187.40元一年起,内存型r8y云服务器活动价格1454.32元一年起。本文将为大家详细解析这三款实例的性能特点、应用场景以及最新的活动价格情况,帮助大家更好地了解阿里云倚天云服务器。
|
23天前
|
安全 大数据 Linux
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
|
2月前
|
运维 监控 Linux
推荐几个不错的 Linux 服务器管理工具
推荐几个不错的 Linux 服务器管理工具
153 6