@@ -86,11 +86,15 @@ function deploy_spacefx_service_group(){
8686 info_log " Scanning '${service_group} ' spacefx services for deploying..."
8787
8888 run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.services.${service_group} | to_entries[] | select(.value.${enabled_filter} == true) | .key' -r" spacefx_services
89+ run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.global.security.forceNonRoot' -r" spacefx_forceNonRoot
90+
8991 run_a_script " kubectl --kubeconfig ${KUBECONFIG} get deployments -A -o json" services_deployed_cache --disable_log
9092
9193 for service in $spacefx_services ; do
9294 run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.services.${service_group} .${service} .appName' -r" spacefx_service_appName
9395 run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.services.${service_group} .${service} .serviceNamespace' -r" spacefx_service_serviceNamespace
96+ run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.services.${service_group} .${service} .runAsUserId' -r" spacefx_service_userid
97+
9498
9599 run_a_script " jq -r '.items[] | select(.metadata.name == \" ${spacefx_service_appName} \" and (.metadata.namespace == \" ${spacefx_service_serviceNamespace} \" )) | true' <<< \$ {services_deployed_cache}" service_deployed
96100
@@ -99,6 +103,78 @@ function deploy_spacefx_service_group(){
99103 continue
100104 fi
101105
106+ # Create users and groups if the service needs one
107+ if [[ " ${spacefx_forceNonRoot} " == " true" ]] && [[ " ${spacefx_service_userid} " != " null" ]]; then
108+ info_log " ...checking if group '${spacefx_service_appName} ' (GID: '${spacefx_service_userid} ') exists..."
109+
110+ # This will return the group_name for the groupID. i.e. "702"
111+ run_a_script " getent group ${spacefx_service_userid} " preexisting_groupid_by_id --ignore_error
112+ preexisting_groupid_by_id=" ${preexisting_groupid_by_id%%:* } "
113+
114+ # This will check if a group exists and gets its ID
115+ run_a_script " getent group ${spacefx_service_appName} " preexisting_groupid_by_name --ignore_error
116+ preexisting_groupid_by_name=" ${preexisting_groupid_by_name%%:* } "
117+
118+
119+ if [[ -n " ${preexisting_groupid_by_name} " ]] && [[ " ${preexisting_groupid_by_id} " == " ${preexisting_groupid_by_name} " ]]; then
120+ info_log " ...group '${spacefx_service_appName} ' (GID: '${preexisting_groupid_by_id} ') already exists. Nothing to do"
121+ else
122+ if [[ -n " ${preexisting_groupid_by_id} " ]]; then
123+ info " ...GID '${spacefx_service_userid} ' already in use, but isn't assigned to '${spacefx_service_appName} '. Attempting to delete..."
124+ run_a_script " getent group ${spacefx_service_userid} " group_to_del
125+ group_to_del=" ${group_to_del%%:* } "
126+
127+ run_a_script " groupdel -f ${group_to_del} "
128+ info " ...successfully deleted previous group '${group_to_del} ' (GID: '${username_to_del} ')"
129+ fi
130+
131+ if [[ -n " ${preexisting_groupid_by_name} " ]]; then
132+ info " ...Group '${spacefx_service_appName} ' already in use, but isn't assigned to '${spacefx_service_userid} '. Attempting to delete..."
133+ run_a_script " groupdel -f ${spacefx_service_appName} "
134+ info " ...successfully deleted previous group '${spacefx_service_appName} '"
135+ fi
136+
137+ info_log " ...creating group '${spacefx_service_appName} ' with GID '${spacefx_service_userid} '..."
138+ run_a_script " groupadd -r -g ${spacefx_service_userid} ${spacefx_service_appName} " --no_log
139+ info_log " ...successfully created group '${spacefx_service_appName} ' (GID: '${spacefx_service_userid} ')."
140+ fi
141+
142+
143+ info_log " ...checking if user '${spacefx_service_appName} ' (UID: '${spacefx_service_userid} ') exists..."
144+
145+ # This will return a user id if the userid exists. i.e. "701"
146+ run_a_script " id -u ${spacefx_service_userid} " preexisting_userid --ignore_error
147+
148+ # This will return the user id for the username. i.e. "702"
149+ run_a_script " id -u ${spacefx_service_appName} " preexisting_userid_for_username --ignore_error
150+
151+ if [[ -n " ${preexisting_userid_for_username} " ]] && [[ " ${preexisting_userid} " == " ${preexisting_userid_for_username} " ]]; then
152+ info_log " ...user '${spacefx_service_appName} ' (UID: '${spacefx_service_userid} ') already exists. Nothing to do"
153+ else
154+ if [[ -n " ${preexisting_userid} " ]]; then
155+ info " ...UID '${spacefx_service_userid} ' already in use, but isn't assigned to '${spacefx_service_appName} '. Attempting to delete..."
156+ run_a_script " getent passwd ${spacefx_service_userid} " username_to_del
157+ username_to_del=" ${username_to_del%%:* } "
158+ run_a_script " userdel -f ${username_to_del} "
159+ info " ...successfully deleted previous user '${username_to_del} ' (UID: '${username_to_del} ')"
160+ fi
161+
162+ if [[ -n " ${preexisting_userid_for_username} " ]]; then
163+ info " ...Username '${spacefx_service_appName} ' already in use, but isn't assigned to '${spacefx_service_userid} '. Attempting to delete..."
164+ run_a_script " userdel -f ${spacefx_service_appName} "
165+ info " ...successfully deleted previous user '${spacefx_service_appName} ' (UID: '${preexisting_userid_for_username} ')"
166+ fi
167+
168+ info_log " ...creating user '${spacefx_service_appName} ' with UID '${spacefx_service_userid} '..."
169+ run_a_script " useradd -r -u ${spacefx_service_userid} -g ${spacefx_service_appName} -d /nonexistent -s /usr/sbin/nologin ${spacefx_service_appName} " --no_log
170+ info_log " ...successfully created user '${spacefx_service_appName} ' (UID: '${spacefx_service_userid} ')."
171+ fi
172+
173+
174+ fi
175+
176+
177+
102178 info_log " ...adding '${service} '..."
103179 deploy_group_cmd=" ${deploy_group_cmd} --set services.${service_group} .${service} .enabled=true \
104180 --set services.${service_group} .${service} .provisionVolumeClaims=true \
@@ -203,6 +279,15 @@ function deploy_apps_to_deployment_service(){
203279 info_log " ...successfully copied chart to '${SPACEFX_DIR} /xfer/platform-deployment/tmp/chart/${SPACEFX_VERSION} '"
204280
205281
282+ run_a_script " yq '.' ${SPACEFX_DIR} /chart/values.yaml --output-format=json | jq '.global.security.forceNonRoot' -r" spacefx_forceNonRoot
283+
284+ if [[ " ${spacefx_forceNonRoot} " == " true" ]]; then
285+ info_log " Updating permissions for '${SPACEFX_DIR} /xfer/platform-deployment' to user 'platform-deployment'..."
286+ run_a_script " chown -R platform-deployment:platform-deployment ${SPACEFX_DIR} /xfer/platform-deployment"
287+ run_a_script " chmod -R u+rwx ${SPACEFX_DIR} /xfer/platform-deployment"
288+ info_log " Permissions successfully updated"
289+ fi
290+
206291 info_log " FINISHED: ${FUNCNAME[0]} "
207292}
208293
0 commit comments