SELinuxの設定 SELinuxの一時的無効化方法 †SELinuxが機能している時、以下の方法で一時的に無効化できます。 # getenforce Enforcing ← SELinux機能は有効でアクセス制御も有効。 Permissive ← SElinuxはwarningを出すが、アクセス制限は行われない。 Disabled ← SElinux機能・アクセス制御ともに無効。 # setenforce 0 ← EnforcingからPermissiveに変更。Disabledには出来ない。 # setenforce 1 ← 上記のPermissiveからEnforcingに戻す。 注:Disabledの場合、Enforcing、Permissiveに変更はできません。 SELinuxの恒常的変更方法 †以下はEnforcingからDisabledに変更した例です。 # vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - SELinux is fully disabled. SELINUX=enforcing ↓ SELINUX=disabled ← disabledにする。 # SELINUXTYPE= type of policy in use. Possible values are: # targeted - Only targeted network daemons are protected. # strict - Full SELinux protection. SELINUXTYPE=targeted # SETLOCALDEFS= Check local definition changes SETLOCALDEFS=0 変更の反映にはLinuxの再起動が必要です。 SELinuxの各パラメータの設定方法 †# getsebool パラメータ名 ← パラメータ名の値を表示する場合。 # getsebool -a ← 全てのパラメータの値を表示する場合。 # getsebool -a | grep httpd ← httpdをパラメータ名に持つパラメータの値を表示する場合。 # setsebool パラメータ名=1 ← パラメータ名の値を一時的にonにする。 # setsebool パラメータ名=0 ← パラメータ名の値を一時的にoffにする。 # setsebool -P パラメータ名=1 ← パラメータ名の値を恒常的にonにする。 SELinuxに起因する問題 †以前Centos V5.4でシステム構築中(このサイトではありません)にSELinuxに制限されてアプリケーションが動かないという問題が幾つか発生しました。これらは、アプリケーション外のSELinuxの制限によるため、原因発見から解決まで時間がかかります。以下はその内容です。 /selinux/contextへの書込み許可がない。 †設定値:SELinuxをPermissive (setenforce 0) samba_enable_home_dirs †設定値:on httpd_disable_trans †設定値:on Not Found The requested URL /redmine/dispatch.cgi was not found on this server. 解析内容: [Sun May 09 18:44:48 2010] [error] *** Passenger could not be initialized because of this error: Cannot create FIFO file /tmp/passenger.2886/.guard: Permission denied (13) また、ブラウザーからアプリケーションにアクセスした時は以下のエラーがある。 [Sun May 09 21:07:09 2010] [error] [client 192.168.100.1] script not found or unable to stat: /var/www/html/redmine/dispatch.cgi dispatch.cgi was not found ps -efで稼動しているプロセスを調べると以下のPassengerのプロセスが無い。 mysqld_disable_trans †設定値:on MySQL データベースを初期化中: Installing MySQL system tables... : : 100514 2:33:38 [Warning] Can't create test file /apli/db/mysql/data/host.lower-test /usr/libexec/mysqld: Can't change dir to '/apli/db/mysql/data/' (Errcode: 13) 100514 2:33:38 [ERROR] Aborting : : And if you do mail us, you MUST use the /usr/bin/mysqlbug script! [失敗] 解析内容: バーチャルホストのURLがForbiddenで表示できない。 †問題の症状:バーチャルホストを設定したが、そのURLにアクセスしたところ403エラー(Forbidden)等が表示されて本来のHPが表示されない。 # view /var/log/audit/audit.log type=AVC msg=audit(1377959407.008:29): avc: denied { getattr } for pid=1348 comm="httpd" path="/home/user/public_html/index.html" dev=dm-0 ino=147403 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:home_root_t:s0 tclass=file これはhttpd_tドメインとして実行されているプロセスがhome_root_tというタイプのファイルである/home/user/public_html/index.htmlにアクセスしようとして拒否されたことを表します。 # ls -dZ /home/user/public_html drwxr-xr-x. apache apache unconfined_u:object_r:home_root_t:s0 /home/user/public_html 設定方法: # semanage fcontext -l | grep httpd_sys_content_t /etc/htdig(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/([^/]*/)?www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/srv/gallery2(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/drupal.* all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/htdig(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/icecast(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/mythtv/data(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/mythweb(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/ntop/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/openca/htdocs(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/usr/share/selinux-policy[^/]*/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/lib/cacti/rra(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/lib/graphite-web(/.*) all files system_u:object_r:httpd_sys_content_t:s0
/var/lib/htdig(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/lib/trac(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/www(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/www/icons(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
/var/www/svn/conf(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
上記の中でデフォルトで使用される/var/wwwが設定されていることが分かります。 # semanage fcontext -a -t httpd_sys_content_t "/home/user/public_html(/.*)?" -aオプションは設定の追加、-tオプションは設定するタイプです。 # semanage fcontext -lC SELinux fcontext タイプ コンテキスト /home/user/public_html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0 次にバーチャルホストのDocumentRootへファイルタイプを設定します。 # restorecon -R /home/user/public_html/ 設定を確認します。 # ls -dZ /home/user/public_html drwxr-xr-x. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 /home/user/public_html この状態で先ほどと同様にindex.htmlへアクセスし、拒否されずに内容が表示されることを確認します。 Postfixでバーチャルメールボックスに設定したディレクトリーにpostfixがMaildirディレクトリーを作成できない。 †問題の症状:Postfixでバーチャルメールボックスを設定したが、メールボックスの同期をした時にエラーとなり、メールの受信ができていませんでした。 # view /var/log/dovecot.log Jan 24 13:56:49 imap-login: Info: Login: user=<admin@centos6.com>, method=PLAIN, rip=192.168.100.1, lip=192.168.100.136, mpid=25438
Jan 24 13:56:49 imap(admin@centos6.com): Debug: Effective uid=10000, gid=10000, home=/var/spool/vmail/centos6.com/admin
Jan 24 13:56:49 imap(admin@centos6.com): Debug: Home dir not found: /var/spool/vmail/centos6.com/admin
Jan 24 13:56:49 imap(admin@centos6.com): Debug: maildir++: root=/var/spool/vmail/centos6.com/admin/Maildir, index=, control=, inbox=/var/spool/vmail/centos6.com/admin/Maildir
Jan 24 13:56:49 imap(admin@centos6.com): Debug: Namespace : Permission lookup failed from /var/spool/vmail/centos6.com/admin/Maildir
Jan 24 13:56:49 imap(admin@centos6.com): Debug: Namespace : Using permissions from /var/spool/vmail/centos6.com/admin/Maildir: mode=0700 gid=-1
Jan 24 13:56:49 imap(admin@centos6.com): Error: user admin@centos6.com: Initialization failed: Initializing mail storage from mail_location setting failed: mkdir(/var/spool/vmail/centos6.com/admin/Maildir) failed: Permission denied (euid=10000(vmail) egid=10000(vmail) missing +w perm: /var/spool/vmail, euid is not dir owner)
Jan 24 13:56:49 imap(admin@centos6.com): Error: Invalid user settings. Refer to server log for more information.
これはVirtualユーザー用のアカウントvmail(euid=10000 egid=10000)でspool下にメールユーザーのMaildirディレクトリーを作成しようとして、拒否されたことを表します。 # semanage fcontext -l | grep dovecot
/etc/dovecot(/.*)? all files system_u:object_r:dovecot_etc_t:s0
/etc/dovecot\.conf.* all files system_u:object_r:dovecot_etc_t:s0
/etc/dovecot\.passwd.* all files system_u:object_r:dovecot_passwd_t:s0
/etc/pki/dovecot(/.*)? all files system_u:object_r:dovecot_cert_t:s0
/etc/rc\.d/init\.d/dovecot regular file system_u:object_r:dovecot_initrc_exec_t:s0
/usr/libexec/dovecot/auth regular file system_u:object_r:dovecot_auth_exec_t:s0
/usr/libexec/dovecot/deliver regular file system_u:object_r:dovecot_deliver_exec_t:s0
/usr/libexec/dovecot/dovecot-auth regular file system_u:object_r:dovecot_auth_exec_t:s0
/usr/libexec/dovecot/dovecot-lda regular file system_u:object_r:dovecot_deliver_exec_t:s0
/usr/sbin/dovecot regular file system_u:object_r:dovecot_exec_t:s0
/usr/share/ssl/certs/dovecot\.pem regular file system_u:object_r:dovecot_cert_t:s0
/usr/share/ssl/private/dovecot\.pem regular file system_u:object_r:dovecot_cert_t:s0
/var/lib/dovecot(/.*)? all files system_u:object_r:dovecot_var_lib_t:s0
/var/log/dovecot(/.*)? all files system_u:object_r:dovecot_var_log_t:s0
/var/log/dovecot\.log.* all files system_u:object_r:dovecot_var_log_t:s0
/var/run/dovecot(-login)?(/.*)? all files system_u:object_r:dovecot_var_run_t:s0
/var/run/dovecot/login/ssl-parameters.dat regular file system_u:object_r:dovecot_var_lib_t:s0
/var/spool/dovecot(/.*)? all files system_u:object_r:dovecot_spool_t:s0
dovecotのspool用のファイルタイプは最後のdovecot_spool_tのようです。 設定方法: # semanage fcontext -a -t dovecot_spool_t "/var/spool/vmail(/.*)?" 設定値を確認します。lオプションに大文字のCをオプションとして追加指定すると、デフォルトのポリシーに存在しない、追加された定義情報のみを表示します。 # semanage fcontext -lC SELinux fcontext タイプ コンテキスト /var/spool/vmail(/.*)? all files system_u:object_r:dovecot_spool_t:s0 現在の設定を確認します。 # ls -dZ /var/spool/vmail
drwx------. root root unconfined_u:object_r:var_spool_t:s0 /var/spool/vmail
次にバーチャルメールボックスディレクトリーへファイルタイプを設定します。 # restorecon -R /var/spool/vmail 設定結果を確認します。 # ls -dZ /var/spool/vmail
drwx------. root root unconfined_u:object_r:dovecot_spool_t:s0 /var/spool/vmail
Postfixがバーチャルメールボックスに受信メールのファイルを作成できない。 †問題の症状: # view /var/log/maillog Jan 14 20:37:21 acompass postfix/virtual[12796]: warning: maildir access problem for UID/GID=1000/1000: create maildir file /var/spool/vmail/sub.acompass.com/user/Maildir/tmp/1418557041.P12796.acompass.acompass.net: Permission denied
Jan 14 20:37:21 acompass postfix/virtual[12796]: warning: perhaps you need to create the maildirs in advance
そしてaudit.logに以下のようなdenied { create }のavcエラーがありました。 # view /var/log/audit/audit.log Jan 14 20:46:31 acompass kernel: type=1400 audit(1418557591.569:267052): avc: denied { create } for pid=12841 comm="virtual" name="sub.acompass.net" scontext=system_u:system_r:postfix_virtual_t:s0 tcontext=system_u:object_r:dovecot_spool_t:s0 tclass=dir
前述で設定したコンテキストタイプdovecot_spool_tに対して、コンテキストタイプpostfix_virtual_tの権限の設定が必要なようです。 # grep 12871 /var/log/audit/audit.log | audit2why Jan 14 20:56:31 acompass kernel: type=1400 audit(1418558191.243:267053): avc: denied { create } for pid=12871 comm="virtual" name="sub.acompass.net" scontext=system_u:system_r:postfix_virtual_t:s0 tcontext=system_u:object_r:dovecot_spool_t:s0 tclass=dir Was caused by: Missing type enforcement (TE) allow rule. You can use audit2allow to generate a loadable module to allow this access. audit2allowでPolicy packageを作成します。ここではPackage名をvmailとしています。 # grep 12871 /var/log/audit/audit.log | audit2allow -M vmail ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i vmail.pp teファイルの内容は以下の通りでした。 # view vmail.te module vmail 1.0; require { type postfix_virtual_t; type dovecot_spool_t; class dir create; } #============= postfix_virtual_t ============== allow postfix_virtual_t dovecot_spool_t:dir create; 作成されたPolicy package vmail.ppをインストールします。 # semodule -i vmail.pp PostgreSQLでdataのディレクトリーをDefaultから変更 †問題の症状:PostgreSQLでdataのディレクトリーをDefaultから変更したところ、initdbでFAILEDとなる。 # view /home/postgres/pgstartup.log could not change directory to "/home/postgres" initdb: could not access directory "/data/pgsql": Permission denied The files belonging to this database system will be owned by user "postgres". This user must also own the server process. semanageコマンドでpostgresqlのファイルタイプを調べます。 # semanage fcontext -l | grep postgresql | grep data /var/lib/pgsql/data(/.*)? all files system_u:object_r:postgresql_db_t:s0 上記よりファイルタイプはpostgresql_db_tです。 設定方法: # semanage fcontext -a -t postgresql_db_t "/data/pgsql(/.*)?" 設定値を確認します。 # semanage fcontext -lC SELinux fcontext type Context /data/pgsql(/.*)? all files system_u:object_r:postgresql_db_t:s0 現在の設定を確認します。 # ls -dZ /data/pgsql drwxr-xr-x. postgres postgres unconfined_u:object_r:default_t:s0 /data/pgsql 次にバーチャルメールボックスディレクトリーへファイルタイプを設定します。 # restorecon -R /data/pgsql 設定結果を確認します。 # ls -dZ /data/pgsql drwxr-xr-x. postgres postgres unconfined_u:object_r:postgresql_db_t:s0 /data/pgsql httpd_can_network_connect_db †設定値:on # view /var/log/messages Jan 01 00:00:00 Hostname kernel: type=1400 audit(1405261224.356:11619): avc: denied { name_connect } for pid=12345 comm="httpd" dest=5432 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:postgresql_port_t:s0 tclass=tcp_socket PostgreSQLでPortをDefaultから変更 †問題の症状:PostgreSQLでPortをDefaultから変更したところ、起動後停止する。 # view /home/postgres/pgstartup.log LOG: could not bind IPv6 socket: Permission denied HINT: Is another postmaster already running on port 5433? If not, wait a few seconds and retry. LOG: could not bind IPv4 socket: Permission denied HINT: Is another postmaster already running on port 5433? If not, wait a few seconds and retry. WARNING: could not create listen socket for "localhost" FATAL: could not create any TCP/IP sockets semanageコマンドでpostgresqlに許可されたportを調べます。 # semanage port -l | grep postgresql postgresql_port_t tcp 5432 上記よりPostgreSQLに許可されているPortはDefaultの5432であることが分かります。 設定方法: # semanage port -a -t postgresql_port_t -p tcp 5433 設定値を確認します。 # semanage port -l | grep postgres postgresql_port_t tcp 5433, 5432 PostgreSQLを起動します。 # service postgresql start
Starting postgresql service: [ OK ]
PostgreSQLの起動を確認します。 # ps -ef | postgres postgres 7736 1 0 Jan01 ? 00:00:00 /usr/bin/postmaster -p 5433 -D /data/pgsql postgres 7742 7736 0 Jan01 ? 00:00:00 postgres: logger process postgres 7744 7736 0 Jan01 ? 00:00:00 postgres: writer process postgres 7745 7736 0 Jan01 ? 00:00:00 postgres: wal writer process postgres 7746 7736 0 Jan01 ? 00:00:00 postgres: autovacuum launcher process postgres 7747 7736 0 Jan01 ? 00:00:00 postgres: stats collector process root 7767 7692 0 00:03 pts/0 00:00:00 grep postgres Last-modified: 2014-12-16 (火) 15:15:26 (3417d)
|