私の環境では、実際の.sshディレクトリが外部デバイスに存在し、~/.ssh
そのディレクトリからシンボリックリンクを介して接続されます。クライアントで使用するには問題はありませんがopenssh
、sshd
認証のために公開鍵を使用することは許可しません。
.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
参考にするいくつかの点があります。
- 特権モードフィールドの末尾のピリオドは、SELinuxコンテキストがファイルに対してアクティブであることを示します。
- .sshフォルダには別の種類フィールド(ssh_home_t)があります。
- 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つの良い参考資料です。
答え2
私の場合(Lenovo NASの場合)権限を変更しても役に立ちませんでしたが、バンドルマウントで問題を解決しました。
変える
ln -s /pool/secure/ssh .ssh
私がやった
mkdir -m 700 .ssh
mount --bind /pool/secure/ssh .ssh
答え3
SSHは理由があると文句を言う。ディレクトリ~/.ssh/
は誰でも書くことができるので、誰でも編集できます。
これが問題にならない場合、設定するとStrictModes no
そのままsshd_config
使用されます。sshd
変更後は、サービスを再起動することを忘れないでください。