メインコンテンツへスキップ
  1. ノート/
  2. Linux/

Linuxでパスワードなしの自動ログインを設定する

·1236 文字·3 分· loading · loading · · ·
ICE345
著者
ICE345
CS Student | System | Linux | OCaml
パスワードなしの自動ログインは、物理コンソールへアクセスできる人がそのユーザーとして操作できる設定です。サーバーや組み込み機器で使う場合は、低権限ユーザーに限定し、SSHではパスワード認証を無効化して公開鍵認証を使うなど、用途に応じた対策を行ってください。

1. 想定する構成
#

Raspberry Piのような小型機器にARM版Ubuntu Server 20.04をインストールし、専用ソフトウェアとクラウドサービスを連携させる構成を考えます。ストレージを暗号化しておけば、電源が切れている状態でTFカードを取り出されても、データをそのまま読み取られにくくなります。

一方、利用者が基本操作を行えるように、低権限のuserアカウントを作成します。通常のUbuntu Serverは起動後にユーザー名とパスワードを求めますが、組み込み用途では、起動後にuserをTTYへ自動ログインさせ、続けてスクリプトを実行したいことがあります。

2. ユーザーを作成する
#

sudo adduser user

対話形式の質問に答えてユーザーを作成します。パスワードを空欄にできない場合は、いったん一時的なパスワードを設定し、作成後に削除します。

sudo passwd -d user

このコマンドはパスワードハッシュを削除します。ログイン方法によっては空パスワードが拒否されるため、必ず対象サービスの認証設定も確認してください。

3. tty1へ自動ログインさせる
#

gettyは、仮想端末でログインプロンプトを提供するサービスです。systemd環境では、getty@tty1.serviceの設定を変更して自動ログインを指定できます。

まず、直接生成されたユニットファイルを編集する代わりに、overrideを作成します。

sudo systemctl edit getty@tty1.service

エディターが開いたら、次の内容を記述します。

[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin user --noclear %I $TERM

ExecStart=を空にする行は、元の起動コマンドをクリアしてから新しいコマンドを設定するために必要です。ディストリビューションによってagettyのパスや引数が異なる場合があるので、systemctl cat getty@tty1.serviceで元の設定を確認してください。

4. 設定を反映する
#

sudo systemctl daemon-reload
sudo systemctl restart getty@tty1.service

再起動して確認する場合は、次のコマンドを実行します。

sudo reboot

5. 起動後にスクリプトを実行する
#

ログイン後のシェルからスクリプトを起動する方法もありますが、実運用ではsystemdサービスを作る方が管理しやすくなります。たとえば、/etc/systemd/system/my-device.serviceを作成します。

[Unit]
Description=Start device application
After=network-online.target
Wants=network-online.target

[Service]
User=user
ExecStart=/opt/my-device/start.sh
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now my-device.service
systemctl status my-device.service

まとめ
#

agetty --autologin userを使うと、Ubuntu Serverのtty1へ専用ユーザーを自動ログインさせられます。ただし、これは「認証を強化する設定」ではありません。物理アクセスが可能な環境では、誰でもそのユーザーの権限で操作できるため、低権限アカウント、暗号化ストレージ、systemdサービスの権限分離、SSH公開鍵認証などと組み合わせて利用してください。


评论