QA@IT
«質問へ戻る

CentOS 7 における解決策を追記

13
本文
         nice            = 10
 }
 ```
+
+【2015-07-09 追記】
+-------------------
+
+CentOS 7 の systemd を xinetd 代わりに利用したところ、接続に成功しました。
+
+```
+sudo systemctl enable sshd.socket
+sudo systemctl start sshd.socket
+sudo systemctl stop sshd
+sudo systemctl disable sshd
+```

【SELinux】xinetd経由のOpenSSHでChrootDirectoryを設定すると接続できなくなる

最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境

  • CentOS 6.5
  • xinetd 2.3.14
  • OpenSSH_5.3p1
  • iptables 1.4.7
  • SELinux – targetedポリシーで動作
  • FileZilla 3.8.0

発生している問題

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
エラー:  Network error: Software caused connection abort
エラー:  サーバに接続できませんでした

サーバー側でsudo grep avc: /var/log/messagesを実行しても、新たなポリシー違反は記録されていませんでした。

設定手順

/etc/ssh/sshd_configへ追記
Subsystem sftp internal-sftp
Match User username
    ChrootDirectory %h
    ForceCommand internal-sftp
SELinuxの変数値を変更
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
ポリシーファイル作成・コンパイル・インストール
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;

試してみたこと

sudo setenforce 0でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定でChrootDirectory %hをコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)

flied_onion様、コメント有り難うございます。

ChrootDirectoryで指定しているディレクトリは、以下のように所有者をrootにしています。

$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も/var/log/messageにポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、sudo ausearch --message AVCを実行すると<no matches>が返ります。

SELinuxがenforcingモード

/var/log/message

Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)

/var/log/secure

Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
SELinuxがpermissiveモード

/var/log/message

Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1

/var/log/secure

Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp

FileZillaのメッセージログ

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
状態: Connected to 192.0.2.1
状態: ディレクトリ一覧を取得中...
コマンド:   pwd
レスポンス:    Current directory is: "/"
コマンド:   ls
状態: Listing directory /
状態: サーバのタイムゾーン オフセットを計算しています...
コマンド:   mtime "test"
レスポンス:    1386241655
状態: タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態: ディレクトリ一覧の表示成功

補足 (2014-04-19)

/etc/xinetd.d/sshdの内容

service ssh
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/sshd
        server_args     = -i
        log_on_success += HOST PID
        log_on_failure += HOST USERID
        nice            = 10
}

【2015-07-09 追記】

CentOS 7 の systemd を xinetd 代わりに利用したところ、接続に成功しました。

sudo systemctl enable sshd.socket
sudo systemctl start sshd.socket
sudo systemctl stop sshd
sudo systemctl disable sshd
最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境
----
- CentOS 6.5
- xinetd 2.3.14
- OpenSSH_5.3p1
- iptables 1.4.7
- SELinux – targetedポリシーで動作
- FileZilla 3.8.0

発生している問題
----------------

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:	open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
エラー:	Network error: Software caused connection abort
エラー:	サーバに接続できませんでした
```

サーバー側で`sudo grep avc: /var/log/messages`を実行しても、新たなポリシー違反は記録されていませんでした。

設定手順
--------

##### `/etc/ssh/sshd_config`へ追記

```
Subsystem sftp internal-sftp
Match User username
	ChrootDirectory %h
	ForceCommand internal-sftp
```

##### SELinuxの変数値を変更

```
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
```

##### ポリシーファイル作成・コンパイル・インストール

```
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;
```

試してみたこと
--------------

`sudo setenforce 0`でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定で`ChrootDirectory %h`をコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)
-----------------
flied_onion様、コメント有り難うございます。

`ChrootDirectory`で指定しているディレクトリは、以下のように所有者を`root`にしています。

```
$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username
```

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も`/var/log/message`にポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、`sudo ausearch --message AVC`を実行すると`<no matches>`が返ります。

##### SELinuxがenforcingモード

`/var/log/message`

```
Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)
```

`/var/log/secure`

```
Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
```

##### SELinuxがpermissiveモード

`/var/log/message`

```
Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
```

`/var/log/secure`

```
Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp
```

FileZillaのメッセージログ

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
状態:	Connected to 192.0.2.1
状態:	ディレクトリ一覧を取得中...
コマンド:	pwd
レスポンス:	Current directory is: "/"
コマンド:	ls
状態:	Listing directory /
状態:	サーバのタイムゾーン オフセットを計算しています...
コマンド:	mtime "test"
レスポンス:	1386241655
状態:	タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態:	ディレクトリ一覧の表示成功
```

補足 (2014-04-19)
-----------------

`/etc/xinetd.d/sshd`の内容

```
service ssh
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/sshd
        server_args     = -i
        log_on_success += HOST PID
        log_on_failure += HOST USERID
        nice            = 10
}
```

【2015-07-09 追記】
-------------------

CentOS 7 の systemd を xinetd 代わりに利用したところ、接続に成功しました。

```
sudo systemctl enable sshd.socket
sudo systemctl start sshd.socket
sudo systemctl stop sshd
sudo systemctl disable sshd
```

タイトル、タグを変更。`/etc/xinetd.d/sshd`の内容を追記

13
タイトル
【SELinux】OpenSSHでChrootDirectoryを設定すると接続できなくなる
【SELinux】xinetd経由のOpenSSHでChrootDirectoryを設定すると接続できなくなる
本文
 状態:	タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
 状態:	ディレクトリ一覧の表示成功
 ```
+
+補足 (2014-04-19)
+-----------------
+
+`/etc/xinetd.d/sshd`の内容
+
+```
+service ssh
+{
+        disable = no
+        socket_type     = stream
+        wait            = no
+        user            = root
+        server          = /usr/sbin/sshd
+        server_args     = -i
+        log_on_success += HOST PID
+        log_on_failure += HOST USERID
+        nice            = 10
+}
+```
タグ

【SELinux】xinetd経由のOpenSSHでChrootDirectoryを設定すると接続できなくなる

最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境

  • CentOS 6.5
  • xinetd 2.3.14
  • OpenSSH_5.3p1
  • iptables 1.4.7
  • SELinux – targetedポリシーで動作
  • FileZilla 3.8.0

発生している問題

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
エラー:  Network error: Software caused connection abort
エラー:  サーバに接続できませんでした

サーバー側でsudo grep avc: /var/log/messagesを実行しても、新たなポリシー違反は記録されていませんでした。

設定手順

/etc/ssh/sshd_configへ追記
Subsystem sftp internal-sftp
Match User username
    ChrootDirectory %h
    ForceCommand internal-sftp
SELinuxの変数値を変更
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
ポリシーファイル作成・コンパイル・インストール
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;

試してみたこと

sudo setenforce 0でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定でChrootDirectory %hをコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)

flied_onion様、コメント有り難うございます。

ChrootDirectoryで指定しているディレクトリは、以下のように所有者をrootにしています。

$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も/var/log/messageにポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、sudo ausearch --message AVCを実行すると<no matches>が返ります。

SELinuxがenforcingモード

/var/log/message

Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)

/var/log/secure

Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
SELinuxがpermissiveモード

/var/log/message

Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1

/var/log/secure

Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp

FileZillaのメッセージログ

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
状態: Connected to 192.0.2.1
状態: ディレクトリ一覧を取得中...
コマンド:   pwd
レスポンス:    Current directory is: "/"
コマンド:   ls
状態: Listing directory /
状態: サーバのタイムゾーン オフセットを計算しています...
コマンド:   mtime "test"
レスポンス:    1386241655
状態: タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態: ディレクトリ一覧の表示成功

補足 (2014-04-19)

/etc/xinetd.d/sshdの内容

service ssh
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/sshd
        server_args     = -i
        log_on_success += HOST PID
        log_on_failure += HOST USERID
        nice            = 10
}
最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境
----
- CentOS 6.5
- xinetd 2.3.14
- OpenSSH_5.3p1
- iptables 1.4.7
- SELinux – targetedポリシーで動作
- FileZilla 3.8.0

発生している問題
----------------

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:	open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
エラー:	Network error: Software caused connection abort
エラー:	サーバに接続できませんでした
```

サーバー側で`sudo grep avc: /var/log/messages`を実行しても、新たなポリシー違反は記録されていませんでした。

設定手順
--------

##### `/etc/ssh/sshd_config`へ追記

```
Subsystem sftp internal-sftp
Match User username
	ChrootDirectory %h
	ForceCommand internal-sftp
```

##### SELinuxの変数値を変更

```
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
```

##### ポリシーファイル作成・コンパイル・インストール

```
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;
```

試してみたこと
--------------

`sudo setenforce 0`でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定で`ChrootDirectory %h`をコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)
-----------------
flied_onion様、コメント有り難うございます。

`ChrootDirectory`で指定しているディレクトリは、以下のように所有者を`root`にしています。

```
$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username
```

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も`/var/log/message`にポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、`sudo ausearch --message AVC`を実行すると`<no matches>`が返ります。

##### SELinuxがenforcingモード

`/var/log/message`

```
Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)
```

`/var/log/secure`

```
Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
```

##### SELinuxがpermissiveモード

`/var/log/message`

```
Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
```

`/var/log/secure`

```
Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp
```

FileZillaのメッセージログ

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
状態:	Connected to 192.0.2.1
状態:	ディレクトリ一覧を取得中...
コマンド:	pwd
レスポンス:	Current directory is: "/"
コマンド:	ls
状態:	Listing directory /
状態:	サーバのタイムゾーン オフセットを計算しています...
コマンド:	mtime "test"
レスポンス:	1386241655
状態:	タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態:	ディレクトリ一覧の表示成功
```

補足 (2014-04-19)
-----------------

`/etc/xinetd.d/sshd`の内容

```
service ssh
{
        disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/sbin/sshd
        server_args     = -i
        log_on_success += HOST PID
        log_on_failure += HOST USERID
        nice            = 10
}
```

flied_onion様への返信

13
本文
 `sudo setenforce 0`でSELinuxをpermissiveモードにすると接続できるようになりました。
 
 また、OpenSSHの設定で`ChrootDirectory %h`をコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。
+
+補足 (2014-04-17)
+-----------------
+flied_onion様、コメント有り難うございます。
+
+`ChrootDirectory`で指定しているディレクトリは、以下のように所有者を`root`にしています。
+
+```
+$ ls /home -l --context
+drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username
+```
+
+SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も`/var/log/message`にポリシー違反は記録されておらず、原因がわかりません。
+Auditは起動しておらず、`sudo ausearch --message AVC`を実行すると`<no matches>`が返ります。
+
+##### SELinuxがenforcingモード
+
+`/var/log/message`
+
+```
+Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
+Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
+Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
+Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)
+```
+
+`/var/log/secure`
+
+```
+Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
+Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
+Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
+Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
+Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
+Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
+```
+
+##### SELinuxがpermissiveモード
+
+`/var/log/message`
+
+```
+Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
+```
+
+`/var/log/secure`
+
+```
+Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
+Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
+Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp
+```
+
+FileZillaのメッセージログ
+
+```
+状態:	192.0.2.1:22 に接続中...
+レスポンス:	fzSftp started
+コマンド:	keyfile "Q:\example.ppk"
+コマンド:   open "username@192.0.2.1" 22
+コマンド:	新規ホスト鍵を信用: 一度だけ
+状態:	Connected to 192.0.2.1
+状態:	ディレクトリ一覧を取得中...
+コマンド:	pwd
+レスポンス:	Current directory is: "/"
+コマンド:	ls
+状態:	Listing directory /
+状態:	サーバのタイムゾーン オフセットを計算しています...
+コマンド:	mtime "test"
+レスポンス:	1386241655
+状態:	タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
+状態:	ディレクトリ一覧の表示成功
+```

【SELinux】OpenSSHでChrootDirectoryを設定すると接続できなくなる

最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境

  • CentOS 6.5
  • xinetd 2.3.14
  • OpenSSH_5.3p1
  • iptables 1.4.7
  • SELinux – targetedポリシーで動作
  • FileZilla 3.8.0

発生している問題

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
エラー:  Network error: Software caused connection abort
エラー:  サーバに接続できませんでした

サーバー側でsudo grep avc: /var/log/messagesを実行しても、新たなポリシー違反は記録されていませんでした。

設定手順

/etc/ssh/sshd_configへ追記
Subsystem sftp internal-sftp
Match User username
    ChrootDirectory %h
    ForceCommand internal-sftp
SELinuxの変数値を変更
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
ポリシーファイル作成・コンパイル・インストール
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;

試してみたこと

sudo setenforce 0でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定でChrootDirectory %hをコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)

flied_onion様、コメント有り難うございます。

ChrootDirectoryで指定しているディレクトリは、以下のように所有者をrootにしています。

$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も/var/log/messageにポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、sudo ausearch --message AVCを実行すると<no matches>が返ります。

SELinuxがenforcingモード

/var/log/message

Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)

/var/log/secure

Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
SELinuxがpermissiveモード

/var/log/message

Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1

/var/log/secure

Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp

FileZillaのメッセージログ

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
状態: Connected to 192.0.2.1
状態: ディレクトリ一覧を取得中...
コマンド:   pwd
レスポンス:    Current directory is: "/"
コマンド:   ls
状態: Listing directory /
状態: サーバのタイムゾーン オフセットを計算しています...
コマンド:   mtime "test"
レスポンス:    1386241655
状態: タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態: ディレクトリ一覧の表示成功
最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境
----
- CentOS 6.5
- xinetd 2.3.14
- OpenSSH_5.3p1
- iptables 1.4.7
- SELinux – targetedポリシーで動作
- FileZilla 3.8.0

発生している問題
----------------

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:	open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
エラー:	Network error: Software caused connection abort
エラー:	サーバに接続できませんでした
```

サーバー側で`sudo grep avc: /var/log/messages`を実行しても、新たなポリシー違反は記録されていませんでした。

設定手順
--------

##### `/etc/ssh/sshd_config`へ追記

```
Subsystem sftp internal-sftp
Match User username
	ChrootDirectory %h
	ForceCommand internal-sftp
```

##### SELinuxの変数値を変更

```
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
```

##### ポリシーファイル作成・コンパイル・インストール

```
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;
```

試してみたこと
--------------

`sudo setenforce 0`でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定で`ChrootDirectory %h`をコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

補足 (2014-04-17)
-----------------
flied_onion様、コメント有り難うございます。

`ChrootDirectory`で指定しているディレクトリは、以下のように所有者を`root`にしています。

```
$ ls /home -l --context
drwxr-x---. root username unconfined_u:object_r:user_home_dir_t:s0 username
```

SELinuxをpermissiveモードにすると接続できるようになるのですが、いずれの場合も`/var/log/message`にポリシー違反は記録されておらず、原因がわかりません。
Auditは起動しておらず、`sudo ausearch --message AVC`を実行すると`<no matches>`が返ります。

##### SELinuxがenforcingモード

`/var/log/message`

```
Apr 16 23:05:18 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
Apr 16 23:05:19 example xinetd[333]: EXIT: ssh status=255 pid=11111 duration=1(sec)
Apr 16 23:05:24 example xinetd[333]: START: ssh pid=22222 from=::ffff:203.0.113.1
Apr 16 23:05:25 example xinetd[333]: EXIT: ssh status=255 pid=22222 duration=1(sec)
```

`/var/log/secure`

```
Apr 16 23:05:19 example sshd[11111]: Accepted publickey for username from 203.0.113.1 port 56789 ssh2
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:19 example sshd[11111]: pam_unix(sshd:session): session closed for user username
Apr 16 23:05:24 example sshd[22222]: Accepted publickey for username from 203.0.113.1 port 54321 ssh2
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session opened for user username by (uid=0)
Apr 16 23:05:25 example sshd[22222]: pam_unix(sshd:session): session closed for user username
```

##### SELinuxがpermissiveモード

`/var/log/message`

```
Apr 16 23:34:22 example xinetd[333]: START: ssh pid=11111 from=::ffff:203.0.113.1
```

`/var/log/secure`

```
Apr 16 23:34:22 example sshd[11111]: Accepted publickey for ftpuser from 203.0.113.1 port 56789 ssh2
Apr 16 23:34:23 example sshd[11111]: pam_unix(sshd:session): session opened for user ftpuser by (uid=0)
Apr 16 23:34:23 example sshd[11111]: subsystem request for sftp
```

FileZillaのメッセージログ

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
状態:	Connected to 192.0.2.1
状態:	ディレクトリ一覧を取得中...
コマンド:	pwd
レスポンス:	Current directory is: "/"
コマンド:	ls
状態:	Listing directory /
状態:	サーバのタイムゾーン オフセットを計算しています...
コマンド:	mtime "test"
レスポンス:	1386241655
状態:	タイムゾーン オフセット: 0 秒, ローカル: 32400 秒, 差分 32400 秒.
状態:	ディレクトリ一覧の表示成功
```

質問を投稿

【SELinux】OpenSSHでChrootDirectoryを設定すると接続できなくなる

最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境

  • CentOS 6.5
  • xinetd 2.3.14
  • OpenSSH_5.3p1
  • iptables 1.4.7
  • SELinux – targetedポリシーで動作
  • FileZilla 3.8.0

発生している問題

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

状態: 192.0.2.1:22 に接続中...
レスポンス:    fzSftp started
コマンド:   keyfile "Q:\example.ppk"
コマンド:   open "username@192.0.2.1" 22
コマンド:   新規ホスト鍵を信用: 一度だけ
エラー:  Network error: Software caused connection abort
エラー:  サーバに接続できませんでした

サーバー側でsudo grep avc: /var/log/messagesを実行しても、新たなポリシー違反は記録されていませんでした。

設定手順

/etc/ssh/sshd_configへ追記
Subsystem sftp internal-sftp
Match User username
    ChrootDirectory %h
    ForceCommand internal-sftp
SELinuxの変数値を変更
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
ポリシーファイル作成・コンパイル・インストール
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;

試してみたこと

sudo setenforce 0でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定でChrootDirectory %hをコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。

最終的にやりたいことは、SELinuxをenforcingモードにしたまま、ホームディレクトリをルートとしてSFTP接続することです。
よろしくお願いいたします。

環境
----
- CentOS 6.5
- xinetd 2.3.14
- OpenSSH_5.3p1
- iptables 1.4.7
- SELinux – targetedポリシーで動作
- FileZilla 3.8.0

発生している問題
----------------

後述の手順でOpenSSHとSELinuxの設定を行いましたが、この状態でFileZillaから接続すると、以下のようなエラーが出て失敗します。

```
状態:	192.0.2.1:22 に接続中...
レスポンス:	fzSftp started
コマンド:	keyfile "Q:\example.ppk"
コマンド:	open "username@192.0.2.1" 22
コマンド:	新規ホスト鍵を信用: 一度だけ
エラー:	Network error: Software caused connection abort
エラー:	サーバに接続できませんでした
```

サーバー側で`sudo grep avc: /var/log/messages`を実行しても、新たなポリシー違反は記録されていませんでした。

設定手順
--------

##### `/etc/ssh/sshd_config`へ追記

```
Subsystem sftp internal-sftp
Match User username
	ChrootDirectory %h
	ForceCommand internal-sftp
```

##### SELinuxの変数値を変更

```
sudo setsebool -P ssh_chroot_full_access on
sudo setsebool -P ssh_chroot_manage_apache_content on
```

##### ポリシーファイル作成・コンパイル・インストール

```
module sshd 1.0;

require {
        type chroot_user_t;
        type inetd_t;
        type sshd_t;
        type user_home_dir_t;
        class tcp_socket { getopt getattr setopt };
        class file read;
}

#============= chroot_user_t ==============
allow chroot_user_t inetd_t:tcp_socket { getopt getattr setopt };

#============= sshd_t ==============
allow sshd_t user_home_dir_t:file read;
```

試してみたこと
--------------

`sudo setenforce 0`でSELinuxをpermissiveモードにすると接続できるようになりました。

また、OpenSSHの設定で`ChrootDirectory %h`をコメントアウトした場合、SELinuxがenforcingモードのままでも接続できました。