PermitRootLoginはUIDまたはユーザー名に基づいていますか?


17

マニュアルページには、 PermitRootLogin

rootがを使用してログインできるかどうかを指定しssh(1)ます。

ただし、このチェックがユーザー名("root")またはUID(0)に基づいているかどうかは明らかではありません。

ルートアカウントの名前が変更された場合はどうなり"admin"ますか?ウィル"admin"ときにログインすることができPermitRootLogin=no

UID = 0、すなわち2つのアカウントがある場合はどうなる"root"とは"admin"?どちらかがログインできますか?

回答:


16

チェックはUIDで行われたようです(テスト済みOpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

PermitRootLoginをオフに設定します。

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

という名前のユーザーadminがUID 0で作成されていることを確認します。

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

ユーザーがシステムへのログオンに使用できることを確認します。

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

SSHを使用してシステムにログオンできるかどうかを確認します。

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

PermitRootLoginをオンにした場合:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

ログオンしてみてください:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

おもしろいことに、UID 0のユーザー名はadminですroot@pdv1が、シェルのように表示されます
Dezza

1
@Dezzaは、おそらく/ etc / passwdにリストされている注文行に依存します(例:UID = 0の最初のエントリを見つけます)。
トライプハウンド

19

他の回答で@mtakのアプローチに感謝しますが、この試行がなくても答えは明らかです。

opensshのソースコードUIDわかるように、これはに基づいています。

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

また、すべての認証方法次のようなものを示します

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grep-コードをさらに進めると、strcmp('root', pw->pw_name)十分な代替手段がないか、または代替手段がない場合があります。


UID 0のチェックをどのように知って いますsshd?ステートメントをサポートするために引数を使用していません。
mtak

2
Unixは、UID = 0でスーパーユーザーを定義します。別の例として、のソースコードがありopensshます。
-Jakuje

カーネルはサポートしていますが、OpenSSHも同様であると想定していました。たとえば、Apacheの基本認証ではルートログインも許可されていませんか?リンクをありがとう、それを含むようにあなたの答えを修正しました。
-mtak

1
他の方法で実行すると、潜在的なセキュリティリスクになります。
-Jakuje

3
@Bakuriuと、それがpw他の何かからコンテキストを作成する理由。opensshコードはオープンソースで、興味のある読者は、コード全体を通過することができます。同様の構造が、すべての認証方法のコード全体にわたってあります。あなたの場合はgrep、コードを通して、あなたは見つけることはありませんstrcmp('root', pw->pw_name)、それはあなたのためにそれをより信頼できるようになります場合は、。
-Jakuje
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.