rsyslogとsshが動いているコンテナを作ってみる

 

某SNMP Managerなサーバを作るための準備として、rsyslogとsshが動いているCentOS7なコンテナを作ってみました。

仕様

  • タイムゾーンはJST
  • rootでsshアクセス可能
  • rootのパスワードはhogehoge

※listen.confの変更と、ssh-keygenに触れている資料が見付けられるまでの間、嵌まりました。


手順

# カレントフォルダにDockerfileとsupervisord.confを置きます

# コンテナ作成
docker build -t template .

# コンテナ起動(ssh用ポートを10022としています)
docker run -d --name test -p 10022:22 template

# コンソールに接続
docker exec -it test /bin/bash

Dockerfile

FROM centos:7

RUN yum -y update \
    && rm -f /etc/localtime \
    && ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && yum -y install rsyslog passwd openssh-server openssh-clients initscripts \
    && yum -y install https://centos7.iuscommunity.org/ius-release.rpm \
    && yum -y install python36u python36u-devel python36u-libs python36u-pip python36u-setuptools \
    && yum -y install supervisor \
    && sed 's/$ModLoad imjournal/# $ModLoad imjournal/' -i /etc/rsyslog.conf \
    && sed 's/$OmitLocalLogging on/$OmitLocalLogging off/' -i /etc/rsyslog.conf \
    && sed 's/$IMJournalStateFile imjournal.state/# $IMJournalStateFile imjournal.state/' -i /etc/rsyslog.conf \
    && sed 's/$SystemLogSocketName/# $SystemLogSocketName/' -i /etc/rsyslog.d/listen.conf \
    && mkdir /var/run/sshd \
    && echo 'root:hogehoge' | chpasswd \
    && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \
    && sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd \
    && echo "export VISIBLE=now" >> /etc/profile \
    && /usr/bin/ssh-keygen -A

COPY supervisord.conf /etc/supervisord.conf

EXPOSE 22

CMD ["/usr/bin/supervisord", "-c", "/etc/supervisord.conf"]

supervisord.conf

[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file

[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=true                ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[program:sshd]
command=/usr/sbin/sshd -D -e
autostart=true
autorestart=true
startretries=3

[program:rsyslog]
command=/usr/sbin/rsyslogd -n -c5
autostart=true
autorestart=true
stdout_logfile=/var/log/messages
stderr_logfile=/var/log/messages
redirect_stderr=true

 

CentOS6から7にユーザを移行してみる

CentOS6からCentOS7にユーザを移行する作業があり、方法を調べてみました。

CentOS6 6.10
CentOS7 7.7.1908
にて確認しています。

作業は全てrootユーザにて行っています。

CentOS6側

# テスト用グループ作成
groupadd -g 19999 test-group
# テスト用ユーザ作成
useradd  -g 19999 -u 19999 foo
passwd foo
bar
bar

# ユーザ追加確認
cat /etc/passwd | grep foo
# パスワード確認(ハッシュ方式確認)
#   先頭が$1ならmd5
#         $5ならsha256
#         $6ならsha512
#   ※受け側のglibcが2.7以降であれば、どの形式でもそのままコピペ可のようです
cat /etc/shadow | grep foo
# グループ追加確認
cat /etc/group | grep test

# ユーザ変更
su - foo
# テストファイル作成
touch test
# rootに戻る
exit

# ホームディレクトリのバックアップ
tar cvf foohome.tar /home/foo
# 固めたアーカイブは手元に置いておきます(あとでCentOS7側に転送します)

Centos7側

# ホームディレクトリの内容を予めCentOS7側に転送しておきます

# ホームディレクトリの内容を展開
cd /
tar xvf ~/foohome.tar
ls -al /home

# ユーザ定義のインポート
# ※データが画面上で2行に見えている場合がありますが、そのまま1行として貼り付け下さい
#

# /etc/passwd  に CentOS6側の /etc/passwd  内の foo        の行をそのまま貼り込んで保存
vipw -p

# /etc/shadow  に CentOS6側の /etc/shadow  内の foo        の行をそのまま貼り込んで保存
vipw -s

# /etc/group   に CentOS6側の /etc/group   内の test-group の行をそのまま貼り込んで保存
vigr -g

# /etc/gshadow に CentOS6側の /etc/gshadow 内の test-group の行をそのまま貼り込んで保存
vigr -s

# 移行結果確認
ls -al /home

ユーザfooでCentOS7にログインして確認ください。

以上です