背景
docker run
の実行時に管理者権限が必要だったのでUSER=root
を使う代わりにsudoを使うことにしたのでその方法を記載します。
なぜ管理者権限が必要だったか
scapyでSYNパケットを生成してポートスキャンするツールを作っていたのですが,SYNパケットの作成にsudoが必要なようです。
管理者アカウントでnmapを使うとsyn scanになるという記載が公式ドキュメントにありますが,nmapでも管理者アカウントでSYNパケットは作成できません。
So when running Nmap as root or Administrator, -sS is usually omitted.
nmap -sS localhost
You requested a scan type which requires root privileges.
QUITTING!
実際のやりかた
該当部分だけ抜粋してますが全体を見たい方はこちら
ARG USER_NAME="sigma"
RUN <<EOF
apt-get update -y
apt-get install -y --no-install-recommends sudo
echo 'Creating ${USER_NAME} group.'
addgroup ${USER_NAME}
echo 'Creating ${USER_NAME} user.'
adduser --ingroup ${USER_NAME} --gecos "my_portscanner user" --shell /bin/bash --no-create-home --disabled-password ${USER_NAME}
echo 'using sudo'
usermod -aG sudo ${USER_NAME}
echo "${USER_NAME} ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
rm -rf /var/lib/lists
EOF
COPY --from=devcontainer --chown=${USER_NAME}:${USER_NAME} ["/app/dist/my_portscanner-${VERSION}-py3-none-any.whl", "/app/dist/my_portscanner-${VERSION}-py3-none-any.whl"]
# install app
RUN <<EOF
python3 -m pip install /app/dist/my_portscanner-${VERSION}-py3-none-any.whl
EOF
USER ${USER_NAME}
ENTRYPOINT ["sudo", "my_portscanner"]
ポイント解説
- sudoをインストール
- 新しいユーザsigmaを作成する。この際,HOMEディレクトリは作成せず,ログインパスワードなしにしている。
- sigmaユーザがsudoを使えるようにsudoグループに追加する。
- sudo時のパスワードを求められるとめんどくさいのでpasswordなしでsudoできるように設定
-
USER
で sigmaをコンテナ実行ユーザにする。 - ENTRYPOINTをsudo付きにする。
最後に
もっといい方法がありましたらコメント欄等でご指摘いただけると幸いです。