QNAPのNASには、Container StationというアプリがありDockerコンテナを手軽に試すことができます。以前にGitlabを立ち上げて公開しているソフトを保持してもらっていたのですが、久々に使おうとしたら起動しなくなっていました。
ログに表示されているのは
sudo: error in /etc/sudo.conf, line 0 while loading plugin `sudoers_policy'
sudo: /usr/lib/sudo/sudoers.so must be only be writable by owner
sudo: fatal error, unable to load plugins
というエラーメッセージ。gitlabとpostgresqlが繰り返しこのエラーをはいて起動しなくなっていました。
https://forum.qnap.com/viewtopic.php?t=157867&start=45&sid=9b540cb0c24fc97d97b95c77f95c3ace
にそれっぽい報告はあるものの特に解決方法は記載されていませんでした。Container StationアプリまたはQTSのアップデートで起きたのかもしれません。Container Stationアプリでは簡単にコンテナを立ち上げることはできますが細かい制御はできません。ベースとなっているイメージを更新することも考えましたが、コンテナが起動できないので中身をバックアップすることもできず途方に暮れていました。
sudo関連のファイルにアクセス権に問題がありそれをなおす記事は散見されますが、起動できないコンテナ内のファイルを修正することで何とかならないかとさまよっていたところ、以下の記事が見つかりました。
https://github.com/pi-hole/docker-pi-hole/issues/670
#docker stop [コンテナID]; docker start [コンテナID]; docker exec -it [コンテナID] chown 0:0 /usr/lib/sudo/sudoers.so; docker exec -it [コンテナID] chmod 0644 /usr/lib/sudo/sudoers.so
私は
- QNAPの管理用コンソールにSSH経由でログイン
- GUIで該当コンテナを再起動
- 間髪入れずにdocker exec以降の以下のコマンドを入れていく・・・
#docker exec -it [コンテナID] chown 0:0 /usr/lib/sudo/sudoers.so
#docker exec -it [コンテナID] chmod 0644 /usr/lib/sudo/sudoers.so
という方法で修正しました。この修正でpostgresqlは動作するようになったのですが、gitlabにはさらに別にエラーが…
sudo: /etc/sudoers.d is world writable
こちらもアクセス権の問題らしく以下のコマンドで修正しました。
https://askubuntu.com/questions/304212/how-to-solve-sudo-etc-sudoers-d-is-world-writable
私が打ち込んだコマンド
#docker exec -it [コンテナID] chmod 0755 /etc/sudoers
#docker exec -it [コンテナID] chmod 0755 /etc/sudoers.d
以前はQTSやアプリのアップデートに消極的だったのですが、昨今セキュリティの問題もあり最新版の取り込みが必要になってきました。アップデートのたびに何かが動かなくなる気がするのですが・・・