关于CentOS上以低权限用户自启动Tomcat,Redis这类应用服务器的坑

工作太忙了,许久没有上来写个文,今天给大家写一下关于CentOS上以低权限用户自启动Tomcat,Redis这类应用服务器的坑。

最近接手了一个NLP分布式平台架构,实施过程中运维工程师给我埋了一个致命的BUG,Redis服务由于使用了Root用户运行,且,云主机的虚拟外网IP与内网IP之间互相映射,加至没有注意到IPTABLE的设定,致使虽然Redis是只监听了内网IP,但,其实情况是,外网扫描端口时,仍然能顺利通过“未授权”方式或暴力破解方式,击倒Redis天生的软肋(弱爆的密码策略),最终,达到“提权”的目的。

今天不对攻击方式展开,感兴趣的朋友自行网上科普。我们言归正传,关于使用低权限用户启动相关应用服务器(Nginx,Mysql,Tomcat,Redis...)的做法,在网上良多,大多是Ctrl+C & Ctrl+V,对细节的说明一笔带过,虽然没什么大不了,但,却难倒了这位小工程师!!!

例子中的操作系统为:CentOS 7
如:
adduser tomcat
su - tomcat -p -c ‘/user/local/tomcat/bin/startup.sh‘;

su - tomcat /user/local/tomcat/bin/startup.sh

绝大多数的 度娘 搜索出来的都是这一流。

可我们并不能adduser tomcat之后就不管了,一般都会想到禁用tomcat的登陆能力,于是乎就到/etc/passwd中给 tomcat 加上 /sbin/nologin。

好吧!再次执行上述的脚本的时候,就会莫名其妙地报错了....

原因:

问题不是什么新鲜事,包括一些老派的运维专家估计都遇过这个坑!su - 用户名 这就相当转登到 另一个用户账号,可你前面已经修改了/sbin/nologin,禁止了以该身份执行登入操作,当然会提示你该用户未启用或被禁用,不报这个错才怪!(除非是操作系统有BUG)。

解决:
那么我们是不是非要将 /sbin/nologin修改回来(/bin/bash),No! 细仔地阅读一下su 参数说明 你会发现当中有一个可选参数 -s ,这个不起眼的参数就是解决问题的关键所在。
我们可以通过

su - tomcat -s /bin/sh -c ‘/usr/local/tomcat/bin/startup.sh‘

> 这样来被现 变更用户并指定执行系统中的sh,开辟一个通道,结合-c指定通道接下来的要执行的命令为 startup.sh,相当于在执行 nologin之前完成一次sh、startup.sh,然后自动退回到Root用户下。
最后,ps aux|grep tomcat(服务名称) 列出该服务的进程,启动用户顺利变更为tomcat(用户名)了。

好吧!问题至此已经解说完毕,其它情况基本类同。
注意:
别忘记了给于tomcat这个用户对startup.sh的执行权限,否则,会因权限不足而No permission 的错误。

晚安!

原文地址:http://blog.51cto.com/uppower/2091860

时间: 2024-09-30 22:20:03

关于CentOS上以低权限用户自启动Tomcat,Redis这类应用服务器的坑的相关文章

CentOS上搭建java WEB开发环境Tomcat+MySQL+JDK

对于初学者来说,想在linux系统上搭建一个java web服务器,不知道什么方案可行, 这篇文章主要是告诉这些基础和概念相对薄弱的同学,这样搭建是可行的,大体上没问 题的,出问题也是细节问题.所以此文只讲一个大体流程即可. 一.准备工作: Linux系统: CentOS release 6.4: Tomcat: apache-tomcat-8.0.9.tar.gz:下载:http://dev.mysql.com/downloads/ MySQL:mysql-5.1.73-3el6-5.src.

Oracle数据库提权(低权限提升至dba)

0x01 Oracle存储过程”缺陷” 在 Oracle 的存储过程中,有一个有趣的特点:运行权限.运行权限分为两种,definer 和 invoker. definer 为函数创建者的权限,而 invoker 则是当前调用函数的用户.运行权限在函数创建时就已经被钦定了,默认为 definer. 说白了,如果我们用低权限用户去运行DBA权限用户创建的存储过程,我们在调用时就可以额访问DBA资源,使用DBA的权限 Oracle 这样做的初衷,实际上是为了用户互相访问资源时,避免用户凭据的问题.当然

在FTP服务器上给不同的用户设置不同的权限实现不同的功能

实验环境:一台原始干净的虚拟机,ip地址为172.20.53.1.并且事先为这台虚拟机安装上web服务器和ftp服务器 实验目的:使zhangsan能实现上传下载,lisi只能上传,匿名用户只能下载 实验步骤: 首先创建FTP站点,默认情况下,IIS管理器中只有一个Web站点,下面新建一个FTP站点,单击右侧"操作"面板中的"添加FTP站点"选项.启动"添加FTP站点"向导. 为站点起个名字,并指定FTP站点的主目录,FTP默认的主目录是:C:\

简单介绍一下在CentOS上安装Docker。

简单介绍一下在CentOS上安装Docker. 前置条件: 64-bit 系统 kernel 3.10+ 1.检查内核版本,返回的值大于3.10即可. $ uname -r 2.使用 sudo 或 root 权限的用户登入终端. 3.确保yum是最新的 $ yum update 4.添加 yum 仓库 运行 $ tee /etc/yum.repos.d/docker.repo <<-'EOF'[dockerrepo]name=Docker Repositorybaseurl=https://y

在CentOS上把MySQL从5.5升级到5.6(转)

http://www.th7.cn/db/mysql/201408/66064.shtml 在CentOS上把MySQL从5.5升级到5.6 摘要:本文记录了在CentOS 6.3上,把MySQL从5.5.28升级到5.6.19的过程. 1. 概述 在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括git.nginx.MySQL和PHP.这篇文章讲的是升级MySQL的过程,其他软件的升级将在其他文章中介绍. 在我加入这个项目之前,网络服务器MySQL已经安装设置好了,我只是

利用forever在Linux上实现Node.js项目自启动

在一台计算机上手动跑Node项目简单,node xx.js就搞定了,想让Node项目后台执行,尽管不能直接用node命令搞定,可是在安装了forever这个包以后.还是非常轻松的.只是要是在远程server上构建Node项目.假设没法自启动.一旦server重新启动,那么项目必须通过管理员远程手动开启才干够执行. 那么是否能利用forever加启动脚本方式解决上述问题呢?答案当然是肯定的.仅仅只是有点麻烦.并且forever官方缺少具体的配置文档.我在配置的时候也走了一些弯路,以下具体来说. 注

Linux系统入门学习:在CentOS上安装phpMyAdmin

问题:我正在CentOS上运行一个MySQL/MariaDB服务,并且我想要通过网络接口来用phpMyAdmin来管理数据库.在CentOS上安装phpMyAdmin的最佳方法是什么? phpMyAdmin是一款以PHP为基础,基于Web的MySQL/MariaDB数据库管理工具.虽然已经存在着一些诸如Adminer的轻量级数据库管理工具, 但是phpMyAdmin还是更加广泛应用于网站管理员之中来进行各种MySQL/MariaDB的管理任务.它支持几乎所有MySQL数据库/表的相关操作,比如浏

烂泥:Centos上使用PPTP搭建VPN

本文首发于烂泥行天下. 目前公司在IDC机房有一台服务器A(linux系统).该服务器是对外的有两块网卡,一个是公网,一个是私网的. 而另外一台服务器B必须通过A服务器上的VPN拨连接进来,才能管理服务器B. 但是A服务器上通过iptables策略限制,只能是公司的IP地址才能通过VPN拨号连接进来. 这样就相应的提高了服务器的安全性,下面记录下有关A服务器VPN的安装与配置. 介绍下PPTP的相关知识: PPTP(点到点隧道协议)是一种用于让远程用户拨号连接到本地的ISP,通过因特网安全远程访

CentOS上配置Cacti监控MySQL

防伪码:即使没有辉煌的未来.如果能有无悔的往昔.   第九章 CentOS上配置Cacti监控MySQL 前言:在企业网络运维过程中,管理员必须随时关注服务器和网络的运行状况.以便及时发现问题,尽可能减少故障的发生.当网络中的设备.服务器等数量较多时,为了更加方便.快捷的获得各种监控信息,通常会借助于一些集中检测软件.本章将以著名的Cacti套件为例,介绍服务器集中监控体系的构建和使用. 一.Cacti官方简介: 1.Cacti是通过 snmpget来获取数据,使用 RRDtool绘画图形,而且