Skip to content

Commit c03e89a

Browse files
committed
create non-root users for containers
1 parent a659bd1 commit c03e89a

File tree

6 files changed

+53
-4
lines changed

6 files changed

+53
-4
lines changed

src/bci_build/package/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ class ParseVersion(enum.StrEnum):
8282
PATCH_UPDATE = enum.auto()
8383
OFFSET = enum.auto()
8484

85-
8685
@dataclass
8786
class StableUser:
8887
"""Data class that stores information about stable user and group
@@ -97,7 +96,8 @@ class StableUser:
9796
group_name: str
9897
# id of the group
9998
group_id: int
100-
99+
# boolean flag that checks if user needs to be created
100+
user_create: bool = False
101101

102102
@dataclass
103103
class Replacement:

src/bci_build/package/git.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from bci_build.package import ApplicationStackContainer
77
from bci_build.package import ParseVersion
88
from bci_build.package import Replacement
9+
from bci_build.package import StableUser
910
from bci_build.package.helpers import generate_from_image_tag
1011
from bci_build.package.helpers import generate_package_version_check
1112
from bci_build.package.versions import format_version
@@ -42,10 +43,18 @@
4243
package_list=[
4344
"git-core",
4445
"openssh-clients",
46+
"shadow"
4547
],
4648
build_stage_custom_end=generate_package_version_check(
4749
"git-core", git_version, ParseVersion.MINOR, use_target=True
4850
),
51+
user_chown=StableUser(
52+
user_id=1000,
53+
user_name="git",
54+
group_id=1000,
55+
group_name="git",
56+
user_create=True
57+
),
4958
)
5059
for os_version in ALL_NONBASE_OS_VERSIONS
5160
]

src/bci_build/package/helm.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from bci_build.package import ApplicationStackContainer
88
from bci_build.package import ParseVersion
99
from bci_build.package import Replacement
10+
from bci_build.package import StableUser
1011
from bci_build.package.helpers import generate_from_image_tag
1112
from bci_build.package.helpers import generate_package_version_check
1213
from bci_build.package.versions import format_version
@@ -36,7 +37,15 @@
3637
package_list=[
3738
"ca-certificates-mozilla",
3839
"helm",
40+
"shadow",
3941
],
42+
user_chown=StableUser(
43+
user_id=1000,
44+
user_name="helm",
45+
group_id=1000,
46+
group_name="helm",
47+
user_create=True
48+
),
4049
replacements_via_service=[
4150
Replacement(
4251
regex_in_build_description="%%helm_version%%",

src/bci_build/package/kubectl.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
from bci_build.package import ApplicationStackContainer
88
from bci_build.package import ParseVersion
99
from bci_build.package import Replacement
10+
from bci_build.package import StableUser
1011
from bci_build.package.helpers import generate_from_image_tag
1112

1213
_KUBECTL_VERSIONS = {
@@ -61,7 +62,14 @@ def _get_kubectl_stability_tag(version: str, os_version: OsVersion) -> str | Non
6162
parse_version=ParseVersion.PATCH,
6263
)
6364
],
64-
package_list=[f"kubernetes{ver}-client"],
65+
package_list=[f"kubernetes{ver}-client", "shadow"],
66+
user_chown=StableUser(
67+
user_id=1000,
68+
user_name="kubectl",
69+
group_id=1000,
70+
group_name="kubectl",
71+
user_create=True
72+
),
6573
entrypoint=["kubectl"],
6674
license="Apache-2.0",
6775
support_level=SupportLevel.L3,

src/bci_build/package/samba.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from bci_build.package import OsVersion
1212
from bci_build.package import ParseVersion
1313
from bci_build.package import Replacement
14+
from bci_build.package import StableUser
1415
from bci_build.package.helpers import generate_from_image_tag
1516
from bci_build.package.helpers import generate_package_version_check
1617
from bci_build.package.versions import get_pkg_version
@@ -121,7 +122,15 @@
121122
license="GPL-3.0-or-later",
122123
package_list=[
123124
"samba-client",
125+
"shadow"
124126
],
127+
user_chown=StableUser(
128+
user_id=1000,
129+
user_name="smbc",
130+
group_id=1000,
131+
group_name="smbc",
132+
user_create=True
133+
),
125134
)
126135

127136
toolbox = ApplicationStackContainer(
@@ -149,9 +158,17 @@
149158
package_list=[
150159
"samba-client",
151160
"tdb-tools",
161+
"shadow",
152162
]
153163
# FIXME: unavailable on SLES
154164
+ (["samba-test"] if os_version.is_tumbleweed else []),
165+
user_chown=StableUser(
166+
user_id=1000,
167+
user_name="smbc",
168+
group_id=1000,
169+
group_name="smbc",
170+
user_create=True
171+
),
155172
)
156173

157174
SAMBA_SERVER_CONTAINERS.append(srv)

src/bci_build/templates.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,19 @@
5555
{% endif -%} zypper -n {%- if image.from_target_image %} --installroot /target --gpg-auto-import-keys {%- endif %} install {% if image.no_recommends %}--no-recommends {% endif %}{{ image.packages }}{%- if image.packages_to_delete %}; \\
5656
zypper -n {%- if image.from_target_image %} --installroot /target {%- endif %} remove {{ image.packages_to_delete }}{%- endif %}
5757
{%- endif %}
58-
{%- if image.user_chown %}
58+
{%- if image.user_chown and not image.user_chown.user_create%}
5959
# changing user id and group id created by package installation to stable values
6060
{{ DOCKERFILE_RUN }} \\
6161
{% if image.from_target_image %}chroot /target {% endif %}chown -R --from={{ image.user_chown.user_name }}:{{ image.user_chown.group_name }} {{ image.user_chown.user_id }}:{{ image.user_chown.group_id }} /; \\
6262
groupmod {% if image.from_target_image %}-R /target {% endif %}-g {{ image.user_chown.group_id }} {{ image.user_chown.group_name }}; \\
6363
usermod {% if image.from_target_image %}-R /target {% endif %}-u {{ image.user_chown.user_id }} {{ image.user_chown.user_name }}
6464
{%- endif %}
65+
{%- if image.user_chown and image.user_chown.user_create%}
66+
# create the user and group with the given ids
67+
{{ DOCKERFILE_RUN }} \\
68+
groupadd {% if image.from_target_image %}-R /target {% endif %}-g {{ image.user_chown.group_id }} -r {{ image.user_chown.group_name }}; \\
69+
useradd {% if image.from_target_image %}-R /target {% endif %}-u {{ image.user_chown.user_id }} -g {{ image.user_chown.group_id }} -m -r -s /bin/bash {{ image.user_chown.user_name }}
70+
{%- endif %}
6571
{%- if image.build_stage_custom_end %}
6672
{{ image.build_stage_custom_end }}
6773
{%- endif %}

0 commit comments

Comments
 (0)