添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

工作太忙了,许久没有上来写个文,今天给大家写一下关于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 的错误。

Tomcat Redis CentOS 修复消耗CPU 100% 的logrotate进程 搜索引擎Url自动提交脚本的优化思路 Mysql启报错报The server quit without updating PID file 无线路由器的WMM功能和开启ap隔离,以及开启Short GI有什么用 李彦宏:未来20年人们对手机的依赖度会越来越低! spring boot + mybatis + layui + shiro后台权限管理系统 Linux下开启VNCserver服务(远程连接) Java线程:创建与启动 CentOS 7 网络配置详解 Centos7和Centos6.5密码破解 centos7的网卡重启方法 Jmeter压力测试(简单的http请求)-实例 Docker 部署war包项目 saltstack——自动运维编排工具 K8S集群安装 之 安装主控节点etcd服务 Openssh服务的部署及安全优化 基于Saltstack批量部署apache 大型网站架构演变 Zabbix监控Mysql、Apache、Nginx应用实战案例 自建YUM仓库