部署指引 门户服务维护指引
普通用户运行中转服务

以普通操作系统用户运行行云管家中转服务指引

一、概述

在Linux操作系统中,root账户具有整个操作系统的读、写和执行命令权限,通过root账户可以执行任何可能的操作,包括具有破坏性的操作。

出于安全等因素考量,Linux操作系统中往往会禁止使用root用户做一些操作,例如,不允许使用root用户进行SSH登录、不允许直接在root账户中启动应用等,而是以最小权限原则、使用普通用户来登录操作系统以及运行服务。

对于行云管家的相关服务,也应该以普通用户来进行启动、停止等运行操作。

二、实现方法

要以普通用户来启动、停止服务行云管家相关服务,则需要分析清楚行云管家服务本身运行时涉及到的资源(文件、目录、相关服务),通过将这些资源授权予执行行云管家启动、停止操作的账户,从而使得普通用户在启动、停止行云管家服务时有权限对相关资源进行读写操作,实现普通用户对行云管家服务的启动、停止等操作。

行云管家中转服务运行时涉及的相关资源如下:

/opt/cloudbility 目录
/opt/jetty/logs 目录
/opt/jetty/work 目录
/var/run/jetty 目录
/etc/init.d/jetty 服务

需要将上述资源授权予执行行云管家启动、停止操作的普通用户账户。

三、实操指引

3.1、创建普通用户账户

如果需要执行行云管家中转服务启停操作的普通用户账户尚不存在,则可以按以下步骤创建普通用户账户。

(1)以root账户登录操作系统,执行以下命令,创建cloudbility用户组(以下以创建cloudbility用户组、cloudbility用户账户为例进行说明)

groupadd cloudbility

(2)以root账户登录操作系统,执行以下命令,创建cloudbility用户,并将用户归属至cloudbility用户组

useradd -g cloudbility -d /home/cloudbility cloudbility

(3)以root账户登录操作系统,执行以下命令,为cloudbility用户设置密码(命令执行后,将提示要求输入要设置的密码和确认密码)

passwd cloudbility

3.2、普通用户sudo授权

通过授权,指定普通用户可以执行的操作,过程如下。

(1)以root账户登录操作系统,执行以下命令

visudo

(2)上述命令执行后,将进入文件编辑状态,在编辑状态的文件末尾加入以下一行,为普通用户cloudbility授予sudo权限

Cloudbility ALL=(ALL) NOPASSWD:/usr/bin/systemctl * nginx, /etc/init.d/jetty *, /opt/cloudbility/bin/* *, /opt/cloudbility/native/* *

(3)上述编辑完成后,保存文件内容,并退出

3.3、普通用户服务及资源授权

(1)以root账户登录操作系统,执行以下命令,设置以普通用户cloudbility来执行jetty服务

sed '/then\ used\ as\ a\ username/aJETTY_USER=cloudbility' -i /etc/init.d/jetty

(2)以root账户登录操作系统,执行以下5行命令,停止jetty运行并将相关资源授权予普通用户cloudbility

/etc/init.d/jetty stop
chown cloudbility:cloudbility /opt/cloudbility -R
chown cloudbility:cloudbility /var/run/jetty -R
chown cloudbility:cloudbility /opt/jetty/logs -R
chown cloudbility:cloudbility /opt/jetty/work -R

注意:执行过上述命令,将服务及资源授权予普通用户cloudbility后,不允许再以root用户执行jetty服务的启动操作。

3.4、普通用户执行启停操作

授予普通用户相关权限后,即可以以普通用户cloudbility来执行中转服务的启动和停止操作。

3.4.1、Nginx服务

启动nginx服务操作:

sudo systemctl start nginx

停止nginx服务操作:

sudo systemctl stop nginx

重启nginx服务操作:

sudo systemctl restart nginx

查看nginx服务状态操作:

sudo systemctl status nginx

3.4.2、Jetty服务

启动Jetty服务操作:

sudo /etc/init.d/jetty start

停止Jetty服务操作:

sudo /etc/init.d/jetty stop

重启Jetty服务操作:

sudo /etc/init.d/jetty restart