sshd:認証が拒否されました:ディレクトリ/データの所有権またはモードが無効です。

sshd:認証が拒否されました:ディレクトリ/データの所有権またはモードが無効です。

ルート化されたAndroid携帯電話にSSHで接続しようとしてエラーが発生し、Permission denied (publickey).ログにAuthentication refused: bad ownership or modes for directory以下のように権限と所有権を慎重かつ正しく設定したにもかかわらず表示されます。

これがファイルの内容ですsshd_config

  • /データ/ssh/sshd_config
AuthorizedKeysFile /data/.ssh/authorized_keys
ChallengeResponseAuthentication no
PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin yes
Subsystem sftp internal-sftp
pidfile /data/ssh/sshd.pid

これがファイルの内容です99sshd

  • /data/local/userinit.d/99sshd
#!/system/bin/sh

umask 077

# DEBUG=1

DSA_KEY=/data/ssh/ssh_host_dsa_key
DSA_PUB_KEY=/data/ssh/ssh_host_dsa_key.pub
RSA_KEY=/data/ssh/ssh_host_rsa_key
RSA_PUB_KEY=/data/ssh/ssh_host_rsa_key.pub
AUTHORIZED_KEYS=/data/.ssh/authorized_keys
DEFAULT_AUTHORIZED_KEYS=/data/.ssh/authorized_keys

if [ ! -f $DSA_KEY ]; then
    /system/bin/ssh-keygen -t dsa -f $DSA_KEY -N ""
    chmod 600 /$DSA_KEY
    chmod 644 $DSA_PUB_KEY
fi

if [ ! -f $RSA_KEY ]; then
    /system/bin/ssh-keygen -t rsa -f $RSA_KEY -N ""
    chmod 600 /$RSA_KEY
    chmod 644 $RSA_PUB_KEY
fi

if [[ ! -f $AUTHORIZED_KEYS && -f $DEFAULT_AUTHORIZED_KEYS ]]; then
    cat $DEFAULT_AUTHORIZED_KEYS > $AUTHORIZED_KEYS
fi


if [ "1" == "$DEBUG" ] ; then
    # run sshd in debug mode and capture output to logcat
    /system/bin/logwrapper /system/bin/sshd -f /data/ssh/sshd_config -D -d
else
    # don't daemonize - otherwise we can't stop the sshd service
    /system/bin/sshd -f /data/ssh/sshd_config -D
fi

また、クライアントの公開鍵が/data/.ssh/authorized_keys

これで、関連するファイルとディレクトリに対する権限と所有権です。

# ls -alt /data/ssh
total 56
-rw-r--r--  1 root   root      6 2023-11-16 11:56 sshd.pid
-rw-rw----  1 root   root    269 2023-11-16 10:53 sshd_config
drwxrwx--x 54 system system 4096 2023-11-16 10:47 ..
drwxr-x---  3 root   shell  4096 2023-11-16 10:13 .
-rw-------  1 root   root    505 2023-11-16 10:11 ssh_host_ecdsa_key
-rw-r--r--  1 root   root    176 2023-11-16 10:11 ssh_host_ecdsa_key.pub
-rw-------  1 root   root    411 2023-11-16 10:11 ssh_host_ed25519_key
-rw-r--r--  1 root   root     96 2023-11-16 10:11 ssh_host_ed25519_key.pub
-rw-r--r--  1 root   root    604 2023-11-16 10:11 ssh_host_dsa_key.pub
-rw-------  1 root   root   1381 2023-11-16 10:11 ssh_host_dsa_key
-rw-r--r--  1 root   root    568 2023-11-16 10:11 ssh_host_rsa_key.pub
-rw-------  1 root   root   2602 2023-11-16 10:11 ssh_host_rsa_key
drw-------  2 root   shell  4096 1974-02-26 03:43 empty
# ls -alt /data/.ssh
total 16
drwxrwx--x 54 system system 4096 2023-11-16 10:47 ..
-rw-------  1 root   root   1144 2023-11-16 10:17 authorized_keys
drwx------  2 root   root   4096 2023-11-16 10:00 .
# ls -alt /data/local/userinit.d/99sshd
-rwxr-xr-x 1 root root 969 2023-11-16 10:54 /data/local/userinit.d/99sshd

それでは、sshdサーバーを実行してみてください。

# /data/local/userinit.d/99sshd

クライアントコンピュータは通常どおり電話に接続しようとします。

PS C:\Users\user> ssh [email protected]
[email protected]: Permission denied (publickey).

上記のエラーが原因で失敗します。

だから携帯電話でログを確認してみると以下のようになります。

# logcat | grep -i ssh
11-16 11:56:28.394 10599 10599 I /system/bin/sshd: Authentication refused: bad ownership or modes for directory /data

ただし、上記のように、関連ファイルに対する権限や所有権の問題は表示されません。

ちなみに私は以下を参考にします。

電話番号は次のとおりです。

  • ASUS ZenFone3 Android 10

ご協力ありがとうございます。

答え1

あなたは設定する必要があります/データそのサブディレクトリは、権限0755(rwxr-xr-x)を持つルートによって所有されます。または、設定でこの権限の確認を無効にすることもできます。厳格モード「いいえ」sshd_config携帯電話のファイル。

エラーメッセージは特に以下に関連しています。/データ目次。ソースコードによると、認証キーファイルsshd内のファイルの絶対パスにあるすべてのディレクトリがユーザーまたはルートの所有であること、グループ書き込み可能または誰でも書き込み可能なディレクトリがないことを確認します。あなたの場合は、/データ目次:

drwxrwx--x 54 system system 4096 2023-11-16 10:47 ..

つまり、グループ書き込みアクセスが有効になり(説明から変更するまで)、所有者とグループは「システム」です。どちらのシナリオでも、「root」としてログインしようとすることはできません。

関連情報