OpenSSHはシンボリックリンクを含む.sshディレクトリを拒否します。

OpenSSHはシンボリックリンクを含む.sshディレクトリを拒否します。

私の環境では、実際の.sshディレクトリが外部デバイスに存在し、~/.sshそのディレクトリからシンボリックリンクを介して接続されます。クライアントで使用するには問題はありませんがopensshsshd認証のために公開鍵を使用することは許可しません。

.ssh外部デバイスのディレクトリを使用する方法はありますか?

journalctl -u sshd
Authentication refused: bad ownership or modes for directory /pool/secure/ssh

特権

$ ls -ld ~/.ssh
lrwxrwxrwx. 1 foobar foobar 28 Mar  7 19:59 .ssh -> /pool/secure/ssh

$ ls -l /pool/secure/ssh
-rw-------  1 foobar foobar  381 Jun 29 15:01 authorized_keys
-rw-------  1 foobar foobar  292 Jun 29 15:01 config
-rw-------. 1 foobar foobar 5306 Jun 23 02:16 known_hosts

$ ls -ld /pool/secure/ssh
drwx------. 2 foobar foobar 8 Jun 29 15:01

バージョン

$ ssh -V       
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017

2017-06-29 (プロンプト)に追加

  • OpenBSDとFreeBSDはchmodを介してシンボリックリンクのアクセス権を変更することができます。ただし、Linuxにはこれを行うシステムコールはありません。
  • stat(2)リンクをクリックしてください。
  • 基本仕様 Issue 7st_modeフィールドに返されるファイルモードビットの値が指定されていません。

2017-06-30に修正

認証_セキュリティ_パス答えがあります。この機能は、親ディレクトリを含むファイルとディレクトリに対する権限を確認します。 homeまたはrootが渡されるまで正しい権限が設定されていることを確認してください(所有者のみが書き込み可能です)。

ex) general environment
/home/foobar/.ssh (raise error if group and other can write)
/home/foobar (same)
break!

ex) special environment (like me)
/home/foobar/.ssh -> /pool/secure/ssh
/pool/secure/ssh (raise error if group and other can write)
/pool/secure (same)
/pool (same)
/ (same)
break!

ベストアンサー1

これは権限の問題です。

foobar上記のすべてのディレクトリ(あなたのホームを含む)の権限だけでなく、.ssh外部デバイスの宛先ディレクトリの上のすべてのディレクトリの権限も確認する必要があります。foobarターゲットディレクトリを除いて、.ssh他のすべてのディレクトリはルートが所有している必要があり、他の人が書き込むことはできません。


SELinuxの問題も発生する可能性があります。次のフラグを使用して、ファイルとディレクトリのSELinuxセキュリティコンテキストを確認できます-Z

[sheepd0g@dogpound ~]$ ls -ZA
drwxr-xr-x. root   root   system_u:object_r:home_root_t:s0 ..
drwxrwxr-x. sheepd0g sheepd0g unconfined_u:object_r:user_home_t:s0 20170620-auditlogs
-rw-rw-r--. sheepd0g sheepd0g unconfined_u:object_r:user_home_t:s0 random.dat
drwx------. sheepd0g sheepd0g unconfined_u:object_r:ssh_home_t:s0 .ssh

参考にするいくつかの点があります。

  1. 特権モードフィールドの末尾のピリオドは、SELinuxコンテキストがファイルに対してアクティブであることを示します。
  2. .sshフォルダには別の種類フィールド(ssh_home_t)があります。
  3. SELinux オブジェクト、タイプ、ポリシー、設定はディストリビューションとメジャーバージョンごとに異なる場合があります。 RHEL6で動作することがSUSE 10またはDebian 6では動作しない可能性があります(Debian 6にデフォルトでSELinux適用機能があるかどうかはわかりません...)

それにもかかわらず、他のすべての方法が失敗したとしても、ここは素晴らしい場所です。次のコマンドを使用すると、SELinux が適用モードになっているかどうかを簡単に確認できます。

[sheed0g@dogpound ~]$ sudo getenforce
Enforcing

SELinuxに問題があると思われる場合は、SELinuxを許可モードに切り替えることができます(ポリシーを有効にしますが、アクションを実行せずにログ/監査アクションのみを取る)。

[sheepd0b@dogpound ~]$ sudo setenforce 0
[sheepd0b@dogpound ~]$ sudo getenforce
Permissive

問題が解決したら、これが問題かもしれません。

SELinuxは、ここで説明したものよりはるかに複雑です。 .ssh/がNFS共有にある場合は、SELinuxのブール設定をさらに変更する必要があります。

以下はSELinuxの2つの良い参考資料です。

SELinuxのCentOS Wikiエントリ

Red Hat Enterprise Linux 7 SELinux ガイド

おすすめ記事