読み取り専用ファイルシステムから条件付きでパスワードのロックを解除する

読み取り専用ファイルシステムから条件付きでパスワードのロックを解除する

私は通常、ログインしていない組み込みシステムを構築していますが、開発者がデバッグして開発できる方法が必要です。 rootfsは通常読み取り専用です(ただし、読み取り/書き込みで再マウントできます)。

私が考えている解決策は、ルートパスワードをロックされたままにすることです(passwd -l)。特別なファイルがリムーバブルメディアに存在する場合は、ログインできるようにパスワードのロックを解除してください。再起動後に特殊ファイルが存在しない場合、パスワードは再びロックされます。

この特殊ファイルは文書化されておらず、エンドユーザーは使用しません。開発者は、勝手にログインできるようにこのファイルを作成することがよくあります。ログインするもう1つの方法はSSHクライアントで、サーバーに転送されたポートを開いてSSHログインにキーベースの認証を使用できるようにします。開発にはインターネットに接続せずに入る方法が必要です。

これを達成する最も簡単な方法は次のとおりです。

if passwd_is_locked and enable_login_exists:
    remount_rw()
    unlock_passwd()
    remount_ro()
elif not passwd_is_locked and not enable_login_exists:
    remount_rw()
    lock_passwd()
    remount_ro()
else:
    pass

私はファイルを再マウントして修正するのが好きではありません。一時フォールバック構成(例/tmp:)を使用することをお勧めします。

私はこの命令を掘り下げたpasswd--repositoryネームサービススイッチングシステム()を介していくつかのデータ()の複数のソースをサポートしているようですnsswitch.conf。ルートアカウントは常に通常の/etc/shadowファイルに戻る必要があるように見えるため、特にルートアカウントの場合、これが実行可能なオプションであるかどうかはわかりません。私はシステム管理者ではないことを認めます。だからおそらく私は理解していないかもしれません。

passwd別のオプションがあります--rootcp -a /etc /lib /tmp && passwd --root /tmp編集する必要がありますが、/tmpこれで役に立つことができるかもしれません。

et alを書き込み可能領域を指すシンボリックリンクに変更し、/etc/passwdファイルを手動で編集すると機能しているようですが、コマンドは使用できませんpasswd

私はPAMを使用していませんが、良い解決策があればそれを有効にすることができます。

ベストアンサー1

私は(initrd内で)次のようなものを使用しました:

if is_dev_mode ; then
    chroot $ROOTFS_MOUNT /usr/bin/passwd --delete root
else
    chroot $ROOTFS_MOUNT /usr/bin/passwd --lock root
fi
sync

これは rootfs が読み取り専用で再マウントされる前に発生します。あまり気にしませんが、他のUnionfs(すでに複数あり)を使用するよりも優れていると思います。 initrdにはpasswd基本OSが提供する素晴らしいオプションはありませんが、うまくchrootいきます。

おすすめ記事