数字で始まるユーザー名は不正か
タレコミ by osdn
osdn 曰く、
情報元へのリンク
systemd のユニットファイルで User=0sdn のような指定をすると、0sdn という名前のユーザーが存在してもしなくても、0sdn ではなく root として実行されるそうです。これは systemd のバグでしょうか。それとも設定ファイルが間違っているだけでしょうか。 報告を受けた systemd 開発者の Lennart Poettering 氏は、「十進数から始まるユーザー名が不正なのであって systemd のバグではない」と主張します。しかし、そのようなユーザー名が useradd では問題なく作成できたり、adduser でも設定により作成できると指摘され、氏はこう返答しました。「(1) systemd は色々なシステムで動くようにするため、制限が厳しいこともある。(2) ユニットファイルに User= で指定するユーザー名は一般ユーザーではなくシステムユーザーであるから、厳しく制限して当然。(3) systemd では、文法エラーはログしてスルーというポリシーである。」
つまり、ユーザー名が間違っているだけなら fatal error として停止するが、十進数で始まる名前は文法的エラーなので、ログだけ取って実行は続け、それゆえに root として実行されるということです。この点、開発者が「バグはない」と言い張る一方で、ユーザー名を認識できないバグと、そのまま root で動くバグの二つだろうという意見もあります。
あまり関係ありませんが、ついでに systemd は名前解決のコードにもバグがあり、バージョン 223 以降、つまりここ 2 年ほどの間の systemd は TCP ペイロードの細工により任意のコード実行まで可能かもしれない脆弱性がありました。systemd-resolved がデフォルトで起動されるシステムはあまり多くないようですが、ご注意ください。
情報元へのリンク
数字で始まるユーザー名は不正か More ログイン