Do not try to build the image with root as the primary user

Fixes #267 and #395
pull/676/head
Kacper Kowalik (Xarthisius) 2019-05-07 10:33:19 -05:00
rodzic 2086b7a437
commit 7d948bda8d
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 5D21B852895192F9
3 zmienionych plików z 30 dodań i 1 usunięć

Wyświetl plik

@ -16,6 +16,8 @@ API changes
Bug fixes
---------
- Prevent building the image as root if --user-id and --user-name are not specified
in :pr:`676` by :user:`Xarthisius`.
Version 0.9.0

Wyświetl plik

@ -8,6 +8,7 @@ Usage:
python -m repo2docker https://github.com/you/your-repo
"""
import argparse
import errno
import json
import sys
import logging
@ -650,6 +651,19 @@ class Repo2Docker(Application):
extra=dict(phase='building'))
if not self.dry_run:
if os.geteuid() == 0:
self.log.error(
'Root as the primary user in the image is not permitted.\n'
)
self.log.info(
"The uid and the username of the user invoking repo2docker "
"is used to create a mirror account in the image by default. "
"To override that behavior pass --user-id <numeric_id> and "
" --user-name <string> to repo2docker.\n"
"Please see repo2docker --help for more details.\n"
)
sys.exit(errno.EPERM)
build_args = {
'NB_USER': self.user_name,
'NB_UID': str(self.user_id),

Wyświetl plik

@ -1,3 +1,5 @@
import errno
import pytest
from tempfile import TemporaryDirectory
from unittest.mock import patch
@ -101,4 +103,15 @@ def test_run_kwargs(repo_with_content):
containers.run.assert_called_once()
args, kwargs = containers.run.call_args
assert 'somekey' in kwargs
assert kwargs['somekey'] == "somevalue"
assert kwargs['somekey'] == "somevalue"
def test_root_not_allowed():
with TemporaryDirectory() as src, patch('os.geteuid') as geteuid:
geteuid.return_value = 0
app = Repo2Docker()
argv = [src]
app = make_r2d(argv)
with pytest.raises(SystemExit) as exc:
app.build()
assert exc.code == errno.EPERM