実践Linux                TOP(HOME)へ

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(HOME)へ

目 次

特別企画
Raspberry Piで遊ぶ

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

CentOS7
CentOS7のインストール〜ネットワークの設定ほか
CentOS7の新機能(systemdとfirewalld)
ダイレクトルールを使ったfirewallの強化
DNS(BIND)サーバー
Webサーバー
  Webでファイルの受け渡し
  アクセス解析ツールAwstats
FTPサーバー
Mail(Dovecot&Postfix)サーバー
Sambaサーバー
MariaDB(MySQL)サーバー
DHCPサーバー
SSHサーバー
VNCサーバー

CentOS5〜6
ネットワーク&ファイアウォール(iptables)
DNS(BIND)サーバー
DHCPサーバー
メールサーバー(基本)
メールサーバー/実際の運用
Webサーバー
  WebDAVによるファイル共有
  Webでファイルのやり取り
  アクセス解析ツールawstats
  namazuで全文検索
  WordPressブログサイト構築
  EC-CUBEショッピングサイト構築
FTPサーバー
ファイルサーバー・Samba
データベースpostgreSQL
  ExcelからpostgreSQLを操作
データベースMySQL
SSHサーバー
VNC
SSL/TLSを利用した暗号化通信
openVPN
ストリーミングサーバー
    C++ RTMP Server
    Helix server Basic
ドメインの追加
Xen・仮想化
特定ディレクトリに容量制限

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

coLinux
Fedora11で試す

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

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

Glade2/GTK+を使ってみる
テキスト・ビューで簡易エディター
ドローイングエリアで自動描画
放物線運動(pango、cairoも試してみる)
これらを、GTK+のみで書き出す

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

●その他
印刷機関連開発 刷版絵柄面積率測定
数独をExcelで解く