実践Linux                TOPへ(目次に戻る)

SELinux基本設定(CentOS5の場合)  2009年1月

●動作モード
selinuxには、「permissiveモード」、「enforcingモード」がある。
現在のモードをみるには # getenforce
モードを変える
  # setenforce permissive または 0  → permissive
  # setenforce enforcing または 1  → enforcing
この設定は/etc/selinux/configに書き込まれている。直接ここを参照したり、編集してもよい。
GUIでの設定 システム→管理→セキュリティレベルとファイヤーウォールの設定→SELinux

●Selinux
ユーザーにはロール、プロセスにはドメイン、リソースにはタイプといったラベルが付与され、ユーザーはどのドメインを許可されているか、ドメインがタイプに対してどのような操作ができるか(アクセスベクタ)を決めていく。
現在のロールを知るには、 # id -Z
現在動作しているプロセスのドメインを知るには、 # ps -eZ
ディレクトリやファイルのタイプを知るには、 # ls -dZ ファイル(ディレクトリ)
      # ls -Z ディレクトリ  ディレクトリ以下の情報

●booleanによるポリシーの設定
CentOS5ではデフォルトで、targetedポリシーで起動するようになっている。これは、dhcpd、httpd、namedなど、一部が制限を受け、その他はunconfined_tという全く制限を受けないドメインに設定されている。
これは、booleanを使って簡単に各ポリシーを有効にしたり無効にしたりすることができるようになっている。
全ポリシーの内容表示 # getsebool -a | less
ポリシーのON、OFF # setsebool -P ポリシー on

●GUIによる設定(あまり使わないのでインストールしなくてもよいが一応)
policycoreutils-guiのインストール。
# yum list installed | grep policy インストールされているかどうかの確認
# yum install policycoreutils-gui インストール
システム→管理→SELinux Management


SELinux の基本コマンド
◆.setenforce
 permissive、enforcingモードを切り替えるコマンド 。
 # setenforce 0   permissive モード (SELinux の動作を抑える)。
 # setenforce 1   enforce モード (SELinux を動作させる)。

◆ls
 オプションに -Z をつければ、タイプを表示することができる。
 # ls -Z

◆chcon
 ファイルやディレクトリのタイプを変更する。(ただし恒久的ではない。下のsemanage参照。)
 この例では、/var/smb ディレクトリ以下のディレクトリとファイルすべてのタイプを samba_share_t に変更している。
 # chcon -t samba_share_t /var/smb -R
 -u でユーザ、-r でロールを変更できる。

◆restorecon
 タイプの不整合を修正するコマンド。
 # /sbin/restorecon -RF /var/smb
 -Rは再帰的に適用。-Fは強制的に適用(強制でないと変わらないときがある)。

◆setsebool
 各ブーリアンパラメータを変更するコマンド。
 # setsebool -P allow_smbd_anon_write 1
 -Pオプションは、システムを再起動しても設定を反映するようにする。

◆semanage
ファイルに関するタイプのほか、ポートに対するタイプも変更可能なコマンド。
chcon では file_contexts ファイル内の内容は変更できないので、yum update などでポリシーをアップデートした場合は変更内容が消えてしまう。semanage では file_contexts ファイルの内容を書き換えるのでそのような問題は起きない。
 # semanage fcontext -a -t samba_share_t "/var/smb/(/.*)?"
この設定内容を反映させるには restorecon コマンドを使う。
 # restorecon -RF /var/smb
設定内容を削除するには -a の代わりに -d を使用する。
 # semanage fcontext -d -t samba_share_t "/var/smb/(/.*)?"
 # restorecon -RF /var/smb

ポートに対するタイプを見るには
 # semanage port -l
Apache に TCP 8080 番ポートを使えるようにさせるには
 # semanage port -a -t http_port_t -p tcp 8080
ポートの場合は即座に設定が反映される。


実際の運用

booleanのポリシーは、
 # getsebool -a | less
 # getsebool -a | grep samba
 # getsebool -a | grep smbd
などで調べておくとよい。

●samba
@/home以下にアクセスできるようにする。
 smbd_tがuser_home_dir_tにアクセスできるようにする。(/homeに作るディレクトリはuser_home_dir_t)
 ポリシーsamba_enable_home_dirsをONにする。
  # setsebool -P samba_enable_home_dirs 1
Aそれ以外の場所を共有にする場合
 そのディレクトリにsamba_share_tタイプを付ける。
  # semanage fcontext -a -t samba_share_t "/var/samba/share(/.*)?"
  # restorecon -RF /var/samba/share
  # ls -Z /var/samba で確認しておく。

●mail関係
 postfix、dovecotはそのままでOK。

●openVPNはunconfined_tで動いている。

●ftp
 booleanのftpd_is_daemonはすでにONになっている。
 /home以下にアクセスできるようにする。
 ポリシーftp_home_dirをONにする。
  # setsebool -P ftp_home_dir 1

●http
booleanのhttpd_builtin_scripting、httpd_enable_cgi、httpd_enable_homedirs、httpd_unified等はすでにONになっている。
しかし/var/www/htmlはそのままで見ることができるが、ユーザーホームで作成したpublic_html以下はそのままで見ることはできない。これはSELinuxのfile_contextsファイルには/home/***/puburic_html以下にはhttpd_sys_content_tタイプを付与するようになっているのだが、puburic_htmlディレクトリを作成したときに親ディレクトリに基づいてuser_home_tが付与されてしまうためである。
これを改善するには、SELinuxの設定を反映し直すだけでよい。
 # restorecon -RF /home/yam/public_html
 # ls -Z /home/yam で確認しておく。

◆CGIを使えるようにする(phpには必要ない)
 httpd_sys_script_tドメインがアクセスできるようにする。
 CGIファイルにhttpd_sys_script_exec_tタイプを付与する。
  # semanage fcontext -a -t httpd_sys_script_exec_t "/home/yam/cgi-bin(/.*)?"
  # restorecon -RF /home/yam/cgi-bin
  # ls -Z /home/yam で確認しておく。
 CGIの書き込み用ファイルにはhttpd_sys_script_rw_tタイプを付与する。
  # semanage fcontext -a -t httpd_sys_script_rw_t "/home/yam/cgi-bin/data.txt"
  # restorecon -F /home/yam/cgi-bin/data.txt
  # ls -dZ /home/yam/cgi-bin/data.txt で確認しておく。

◆phpでデータベースにアクセスできるようにする
 ポリシーhttpd_can_network_connect_dbをONにする。
  # setsebool -P httpd_can_network_connect_db 1

●postgreSQL
 # restorecon -RF /var/lib/pgsql
 # ls -Z /var/lib/pgsql/data 等で確認しておく。


SELinux目次
 SELinuxの基本設定
 新しいタイプとポリシーモジュールの作成   マクロを利用したteファイルの記述
 新しいドメインの導入

TOPへ(目次に戻る)
目 次

特別企画
CentOS7の新機能を試してみる
クラウド Amazon EC2

HOME(全体のシステム構成&目次)

ブロードバンドルータの設定

●ns1.my-dom.xxxマシン
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
WebDAVによるファイル共有
FTPサーバー
SSL/TLSを利用した暗号化通信
ストリーミングサーバー
EC-CUBEでショッピング・サイト構築
WordPressでブログ・サイト構築
namazuで全文検索
アクセス解析ツールawstats
ドメインの追加
SSHサーバー chroot機能
VNC+SSH(リモートディスクトップ)
Xen・仮想化

●linux.my-domマシン
RAID
ファイルサーバー
データベースpostgreSQL
Excel+ADOでpostgreSQLアクセス
データベースMySQL
openVPN

●SELinux
SELinux基本設定
新しいタイプとポリシー・モジュールを作成してみる
マクロを利用したteファイルの記述
新しいドメインを導入してみる

●coLinux
Fedora11で試す


Cプログラミング目次
X11プログラム
サイエンス・プログラム

計測・プログラム
秋月電子のデーターロガーpico ADC-16
「今すぐ使えるパソコン計測USBマイコン基板」に付属のTRZ1102
センサーの使用例

Glade(GTK+)を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画

フォントについて
ネットワーク・プログラミング
postgreSQL接続
CGI
ファイル操作