低权限用户启动服务时候遇到的BUG

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

例子中的操作系统为: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 的错误。

猜你喜欢

转载自blog.csdn.net/weixin_43231324/article/details/86082149