2012年6月27日水曜日

xdebugでwarningがでる。

xdebugが有効かどうか確認すると下記のようなwarningがでる。

[root@hoge ~]# php -i | grep -i "xdebug support"
PHP Warning:  Xdebug MUST be loaded as a Zend extension in Unknown on line 0
xdebug support => enabled
[root@hoge ~]# 
■/etc/php.ini
extension=xdebug.so
   ↓ コメントアウト
;extension=xdebug.so

■/etc/php.d/xdebug.ini
zend_extension=/usr/lib/php/modules/xdebug.so
xdebug.remote_enable=On
xdebug.remote_connect_back=On
xdebug.remote_autostart=On
xdebug.remote_handler=dbgp
xdebug.remote_port=9000
xdebug.collect_params=On
xdebug.dump.GET=*
xdebug.dump.POST=*

extensionをzend_extensionに変更し、リモートの設定を追加した。(リモートデバッグを行うため) また、xdebug.remote_connect_back=On を設定して複数のクライアントからリモートデバッグが実行できるようにした。

「xdebug.remote_connect_back」は。xdebug 2.1以降で利用できる。

apacheを再起動して設定が有効になったか確認する
[root@hoge ~]# php -i | grep xdebug
/etc/php.d/xdebug.ini,
xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
 ・
 ・
xdebug.remote_autostart => On => On
xdebug.remote_connect_back => On => On
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => localhost => localhost
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000
 ・
 ・
 ・

2012年6月25日月曜日

CakePHP 複数アプリの実行

CakePHP で複数アプリを実行する。

1. virtual host を設定して複数アプリを別々ホスト名で起動する。

2. .htaccess を修正する。(忘れがちなので注意)
[root@hoge sample]# cat .htaccess

   RewriteEngine on
   RewriteRule    ^$ app/webroot/    [L]
   RewriteRule    (.*) app/webroot/$1 [L]

[root@hoge sample]# 
 
  ↓↓↓


   RewriteEngine on
   RewriteRule    ^$ webroot/    [L]
   RewriteRule    (.*) webroot/$1 [L]

サブディレクトリにcakePHPを構築する
もしサブドメインに構築する場合には、.htaccessの設定に追記が必要となる。
具体的には、RewriteBaseをきちんと設定にあるような

app/webroot/.htaccess にあるmod_rewriteの設定において RewriteBase /(サブディレクトリ名)を追加する必要がある。

もし、追加し忘れると、500 Internal Server Errorが表示され、Apacheのログには、

Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

というメッセージが記録される。

今までDocumentRoot上にしか構築したことがなかったので、少しハマってしまった。

2012年6月24日日曜日

Samba+OpenLDAP(PDC) ユーザー設定について

Samba+OpenLDAP(PDC) を運用したときのユーザーの登録について記載します。

まず先に結論から申し上げると作成済みのユーザー(Linuxアカウント)に Samba+OpenLDAP(PDC) のドメインにログオンできるようにするには、下記の2つのコマンドを実行する必要があります。

(前提条件として下記が設定済みである)
・Samba および OpenLDAPがPDC対応で正しくインストールされている。
・作成済みのユーザー(Linuxアカウント)がldapaddコマンド等でLDAPに登録済み。
・ログオンするPCのコンピュータ名が smbldap-useradd -w <コンピュータ名> で登録済み


[root@hoge ~]# smbldap-usermod -a <作成済みLinuxアカウント>

[root@hoge ~]# smbldap-passwd <作成済みLinuxアカウント>

今回は、Linuxユーザーとして作成済みのユーザーをSamba+OpenLDAP(PDC)のユーザーとして登録(再設定するための方法)記載します。

※基本的な設定については、別途記載することにします。

■変更前の設定内容■
[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
cn: pelo
objectClass: account,posixAccount,top
userPassword: {SSHA}*******************************
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
[root@hoge ~]# 

Windowsクライアントからログインできるユーザーは下記のようになっています。
比較すると、samba専用のアトリビュートが作成されていないことがわかります。

[root@hoge ~]# smbldap-usershow knownuser
dn: uid=knownuser,ou=Users,dc=hogehoge,dc=com
uid: knownuser
cn: knownuser
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
shadowMin: 0
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 500
gidNumber: 500
homeDirectory: /home/knownuser
gecos: Known User
shadowLastChange: 15462
shadowMax: 45
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-1001
displayName: Known User
userPassword: {SSHA}*******************************
sambaNTPassword: *******************************
sambaPasswordHistory: 0000000000000000000000000000000000000000000000000000000000000000
sambaPwdLastSet: 1335947382
sambaAcctFlags: [U          ]
[root@hoge ~]# 

既に作成済みのユーザーについてsamba専用のアトリビュート情報の追加を行うには、smbldap-usermod-a オプションで実行する必要があることがわかりました。
善は急げで、早速実行します。

[root@hoge ~]# smbldap-usermod -a pelo
Warning: sambaPrimaryGroupSID could not be set beacuse group of user pelo is not a mapped Domain group!
To get a list of groups mapped to Domain groups, use "net groupmap list" on a Domain member machine.
Use of uninitialized value in string at /usr/sbin/smbldap-usermod line 346.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in string eq at /usr/sbin/smbldap-usermod line 347.
Use of uninitialized value in concatenation (.) or string at /usr/sbin/smbldap-usermod line 347.
[root@hoge ~]# 

アレレ?。
何やら、嫌らしいエラーメッセージが表示されてしまいました。
usr/sbin/smbldap-usermod の346行目と347行目を確認しましたが、影響なさそうなので無視して先へ進むことにします。

    $cn = "$Options{'N'}";
    $cn .= " " . $Options{'S'}

smbldap-usermodコマンドの実施後に内容が変わったかどうかを検証します。

[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
userPassword: {SSHA}zrb5IhKHtVErK8rdx/e0pqtG4kJ0ES29
shadowLastChange: 15476
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
sambaPwdLastSet: 0
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaPwdMustChange: 2147483647
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-7004
sambaAcctFlags: [UX]
cn:  
displayName:  
[root@hoge ~]#

上記の赤字青字の部分が追加されていることを確認できます。
しかし、青字のアトリビュートは未設定のようです。
cn は氏名(Common Name)を設定するアトリビュートで、displayName もWindowsで利用される氏名を設定するアトリビュートのようです。
      →→→ ■OpenLDAPの基本的なアトリビュートについて■
上記の内容でWindows7クライアントからドメインにログオンを行ってもまだエラーになってしまいます。
ログオンできるユーザーとの違いを確認したらsambaのパスワード関連のアトリビュートがないようです。(sambaLMPassword,sambaAcctFlags,sambaNTPassword,,,)
よって、再度パスワードを再設定するコマンド(smbldap-passwd)を実行してパスワードを上書きします。    ↓ 今度は無事にWindows7クライアントからドメインにログオンできました。

赤字の部分が smbldap-passwd を実行した結果に追加されたアトリビュートです。

[root@hoge ~]# smbldap-usershow pelo
dn: uid=pelo,ou=Users,dc=hogehoge,dc=com
uid: pelo
objectClass: account,posixAccount,top,shadowAccount,sambaSamAccount
shadowMin: 0
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 3002
gidNumber: 3002
homeDirectory: /home/pelo
sambaLogonTime: 0
sambaLogoffTime: 2147483647
sambaKickoffTime: 2147483647
sambaPwdCanChange: 0
sambaSID: S-1-5-21-2725434548-1602857623-2035637331-7004
cn:  
displayName:  
sambaLMPassword: *******************************
sambaAcctFlags: [U]
sambaNTPassword: *******************************
sambaPwdLastSet: 1340506248
sambaPwdMustChange: 1344394248
userPassword: {SSHA}*******************************
shadowLastChange: 15515
shadowMax: 45
[root@hoge ~]# 

2012年6月23日土曜日

smbldap-usershow コマンドがエラーになる。

Samba+OpenLDAPでのユーザー情報を確認しようとsmbldap-usershowコマンドを実行したらエラーになってしまった。

[root@hoge ~]# smbldap-usershow hogehoge
Use of uninitialized value in string at /usr/lib/perl5/vendor_perl/5.8.8/smbldap_tools.pm line 397.
Use of uninitialized value in string at /usr/lib/perl5/vendor_perl/5.8.8/smbldap_tools.pm line 397.
user hogehoge doesn't exist

smbldap_tools.pm の397行目を確認したら、 $ldap_slave->bind( "$config{slaveDN}", password => "$config{slavePw}" ); となっていた。
slaveDNの設定に問題があるようなので、確認をすると下記の対応でエラーが解消された。

■ /etc/smbldap-tools/smbldap_bind.conf ■
# $Id: smbldap_bind.conf 35 2011-02-23 09:07:36Z fumiyas $
#
############################
# Credential Configuration #
############################
# Notes: you can specify two differents configuration if you use a
# master ldap for writing access and a slave ldap server for reading access
# By default, we will use the same DN (so it will work for standard Samba
# release)
slaveDN="cn=Manager,dc=hogehoge,dc=com"  <-- 追加
slavePw="****************"  <-- 追加
masterDN="cn=Manager,dc=hogehoge,dc=com"
masterPw="****************"

Samba+OpenLDAPを特にスレーブサーバを立てていないのでslaveの設定は不要と思っていたが、このslaveの記述がないとエラーになってしまうようでした。
なんだか良く理解できないが、コマンドが実行できるようになったので安心した。

2012年6月22日金曜日

SELinux基本コマンドの備忘録

● SELinux の基本コマンド

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

◆chcon
 ファイルやディレクトリのタイプを一時的に変更します。

 # chcon -t samba_share_t /var/smb -R
 -u でユーザ、-r でロールを変更できる。

この例では、/var/smb ディレクトリ以下のディレクトリとファイルすべてのポリシー・タイプを samba_share_t に変更しています。

◆restorecon
 ポリシー・タイプの不整合を修正します。

 # /sbin/restorecon -RF /var/smb
 -Rは再帰的に適用、-Fは強制的に適用します。
 (強制でないと変わらないときがある)

◆setsebool
 各booleanパラメータを変更します。

 # 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パラメータの調整とトラブルの回避

ポリシーを変更せずにトラブルを解決したり,セキュリティ・レベルを調整したりするのに役立つのが,booleanパラメータです。booleanパラメータを切り替えて,不要なアクセス許可を与えないようにしていけば,セキュリティを高められます。逆に,必要なアクセス許可をbooleanパラメータの切り替えで設定可能な場合は,トラブル解決にも役立ちます。

  • Apacheが他のアプリケーションに接続できない
    【解決法】 httpd_can_network_connectをonにする
  • Sambaのホームディレクトリを公開できない
    【解決法】 samba_enable_home_dirsをonにする
  • Javaアプリケーションが動かない
    【解決法】 allow_execmodをonにする
  • ログにexecmod、execstackのアクセス拒否が出力される
    【解決法】 allow_execmod/allow_execstackをonにする

《具体的な設定例》

「Sambaでホーム・ディレクトリを公開できない」という問題を「samba_enable_home_dirs」のon/offを切り替えて対処してみましょう。

  • samba_enable_home_dirsを次のようにonに切り替えます。

    # setsebool -P samba_enable_home_dirs 1

  • onに切り替わったことを確認します。

    # getsebool samba_enable_home_dirs
    samba_enable_home_dirs -->on

2012年6月21日木曜日

SELinux問題を解決する際に理解するトップ3

SELinux問題を解決する際に理解するトップ3について(Dan Walshさんの記事)記載されていので掲載します。

私もほとんど、ここで記載されている件で解決をしましたが、頻繁に発生する訳ではないのでついつい作法を忘れてしまいます。そこで、Dan Walshさんの記事を掲載して備忘録をして書き留めることにしました。

1. SELinux is all about labeling

Every process and object on the machine has a label associated with it, if your files are not labeled correctly access might be denied.

If a file is mislabeled a confined application might not be allowed access to the mislabeled file. If an executable is mislabeled, it may not transition to the correct label when executing, causing access violations and potentially causing it to mislabel files it creates. Processes and objects on the machines have labels. If the labeling is correct everything should work. Sometimes an admin decides to change the default labeling on the system. If an admin wants to store apache web pages in a unusual location, /srv/myweb. The admin needs to tell SELinux that the files stored there need to be accessible to the web server process. He does this by setting the labeling correctly in the system. The apache process is allowed to access files labeled httpd_sys_content_t.

# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'

This command tells the SELinux datastore that the /src/myweb directory and all files under it should be labeled httpd_sys_content_t. Tools like restorecon and rpm read this datastore when they are labeling or relabeling files. Note, however that the semanage command will not change the actual labels on files on your machine. You still need to execute restorecon to fix the labels.

# restorecon -R /srv/myweb

restorecon reads the SELinux datastore to determine how files under /srv/myweb should be labeled and then fixes them.

# matchpathcon /srv/myweb

matchpathcon reads the SELinux datastore and prints the default label for the specified path

2. You have to tell SELinux about how a confined process is being run.

A confined process/application can be run in many different ways. You need to tell SELinux about how you are configuring the application to run, so SELinux will allow it the proper access. SELinux does not do this automatically, SELinux has builtin if/then/else rules called booleans that allow you to tweak the predefined rules to allow different access. If you set up you apache web server to talk to a mysql server, you need to set a boolean to tell SELinux this is ok. You can do this with the setsebool command.

# setsebool -P httpd_can_network_connect_db 1

Tools like system-config-selinux or getsebool -a will list all of the possible booleans. On the latest Fedora systems you can run SELinux error messages (avc) through audit2allow -w (audit2why). This checks to see if any boolean could be set to allow the access.
setroubleshoot is also pretty good at diagnosing problems.

3. SELinux rules are evolving and applications are sometimes broken

General errors in policy or applications can cause SELInux access denials. Sometimes an application is just broken or the SELinux policy has never seen the confined application run the code path that it is running. While the application is working correctly, SELinux is denying it access. You can add custom policy to your system simply by piping the SELinux error messages through audit2allow. Say a new version of postgresql comes out that SELinux is mistakenly denying access to a resource which it should be allowed to access. You can use audit2allow to build a custom policy module that can be installed on your system to allow the access.

# grep postgresql /var/log/audit/audit.log | audit2allow -R -M mypostgresql

This command will generate a local policy module which will allow all accesses that are currently being denied..

# semodule -i mypostgresql.pp

This command installs the local policy modifications to your system. You probably want to report the SELinux errors to bugzilla or a mailing list so your local modifications can be added to the distribution's policy or upstream.

2012年6月19日火曜日

Toodledo 完了日を変更できない。

こんなに多機能なのに、完了日を変更することができないのが残念です。

また、完了日を表示させるには「SORT」から「Date Comleted」を選択する。

2012年6月10日日曜日

OEMが起動しなくなっていた。

久しぶりにLinuxマシンのOracle11gを起動したら、OEMを起動する部分でエラーが発生している。どうやら、リスナーやDBは起動しているようだ。

SAMBA+LDAP でPDCを作成するために、ドメインやホスト名を変更したことが原因のようです。

■Oracleを起動するとOEMの起動部分でエラーが発生。

[root@hoge ~]# service dbora start
Starting Oracle Database:Processing Database instance "ora02": log file /opt/oracle/app/product/11.2.0/ora02/startup.log
OC4J Configuration issue. /opt/oracle/app/product/11.2.0/ora02/oc4j/j2ee/OC4J_DBConsole_ora02.horisawa.info_ora02 not found.

[oracle@hoge ~]$ echo $ORACLE_SID
ora02
[oracle@hoge ~]$ emca -config dbcontrol db -repos recreate

EMCAの開始 2012/06/10 17:27:11
EM Configuration Assistant, リリース11.2.0.0.2 Production
Copyright (c) 2003, 2005, Oracle.  All rights reserved.

次の情報を入力してください:
データベースのSID: hoge
リスナーのポート番号: 1521
リスナーORACLE_HOME [ /opt/oracle/app/product/11.2.0/hoge ]: 
SYSユーザーのパスワード:  
DBSNMPユーザーのパスワード:  
SYSMANユーザーのパスワード:  
通知用の電子メール・アドレス (オプション): 
通知用の送信メール(SMTP)サーバー (オプション): 
-----------------------------------------------------------------

次の設定が指定されています

データベースのORACLE_HOME ................ /opt/oracle/app/product/11.2.0/hoge

ローカル・ホスト名 ................ hoge.hogehoge.com
リスナーORACLE_HOME ................ /opt/oracle/app/product/11.2.0/hoge
リスナーのポート番号 ................ 1521
データベースのSID ................ hoge
通知用の電子メール・アドレス ............... 
通知用の送信メール(SMTP)サーバー ............... 

-----------------------------------------------------------------
続行しますか。 [はい(Y)/いいえ(N)]: y
2012/06/10 17:29:19 oracle.sysman.emcp.EMConfig perform
情報: この操作は/opt/oracle/app/cfgtoollogs/emca/hoge/emca_2012_06_10_17_27_10.logでロギングされています。
2012/06/10 17:29:20 oracle.sysman.emcp.EMReposConfig invoke
情報: EMリポジトリの削除中(少し時間がかかります)...
2012/06/10 17:32:39 oracle.sysman.emcp.EMReposConfig invoke
情報: リポジトリは正常に削除されました
2012/06/10 17:32:40 oracle.sysman.emcp.EMReposConfig createRepository
情報: EMリポジトリの作成中(少し時間がかかります)...
2012/06/10 17:43:24 oracle.sysman.emcp.EMReposConfig invoke
情報: リポジトリは正常に作成されました
2012/06/10 17:43:34 oracle.sysman.emcp.EMReposConfig uploadConfigDataToRepository
情報: 構成データをEMリポジトリにアップロード中(少し時間がかかります)...
2012/06/10 17:46:01 oracle.sysman.emcp.EMReposConfig invoke
情報: 構成データが正常にアップロードされました
2012/06/10 17:46:07 oracle.sysman.emcp.util.DBControlUtil configureSoftwareLib
情報: ソフトウェア・ライブラリは正常に構成されました。
2012/06/10 17:46:07 oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
情報: プロビジョニング・アーカイブのデプロイ中...
2012/06/10 17:47:02 oracle.sysman.emcp.EMDBPostConfig configureSoftwareLibrary
情報: プロビジョニング・アーカイブは正常にデプロイされました。
2012/06/10 17:47:02 oracle.sysman.emcp.util.DBControlUtil secureDBConsole
情報: Database Controlの保護中(少し時間がかかります)...
2012/06/10 17:48:25 oracle.sysman.emcp.util.DBControlUtil secureDBConsole
情報: Database Controlは正常に保護されました。
2012/06/10 17:48:25 oracle.sysman.emcp.util.DBControlUtil startOMS
情報: Database Controlの起動中(少し時間がかかります)...
2012/06/10 17:49:38 oracle.sysman.emcp.EMDBPostConfig performConfiguration
情報: Database Controlは正常に起動されました
2012/06/10 17:49:39 oracle.sysman.emcp.EMDBPostConfig performConfiguration
情報: >>>>>>>>>>> Database ControlのURLはhttps://ora02.horisawa.info:5500/emです <<<<<<<<<<<
2012/06/10 17:49:50 oracle.sysman.emcp.EMDBPostConfig invoke
警告: 
************************  WARNING  ************************

管理リポジトリは、Enterprise Managerデータが暗号化されるセキュア・モードで配置されています。暗号化キーはファイル/opt/oracle/app/product/11.2.0/ora02/hoge.hogehoge.com_ora02/sysman/config/emkey.oraに配置されています。このファイルが失われると暗号化データを使用できなくなるため、このファイルは必ずバックアップしてください。

***********************************************************
Enterprise Managerの構成が正常に完了しました
EMCAの終了 2012/06/10 17:49:50
[oracle@hoge ~]$

■設定変更後は問題なく起動した。

[root@ora02 ~]# service dbora start
Starting Oracle Database:Processing Database instance "ora02": log file /opt/oracle/app/product/11.2.0/ora02/startup.log
Oracle Enterprise Manager 11g Database Control Release 11.2.0.1.0
Copyright (c) 1996, 2009 Oracle Corporation. All rights reserved.
https://ora02.horisawa.info:5500/em/console/aboutApplication
Starting Oracle Enterprise Manager 11g Database Control ......... started.
------------------------------------------------------------------
Logs are generated in directory /opt/oracle/app/product/11.2.0/ora02/ora02.horisawa.info_ora02/sysman/log
[root@ora02 ~]#

再構築すると、 Enterprise Managerのポート番号が変わる。
元のポート番号(デフォルト:1158)に変更したい場合は、下記のようにする。

[oracle@hoge ~]$ emca -reconfig ports -DBCONTROL_HTTP_PORT 1158

2012年6月1日金曜日

CentOSで最新版のFirefoxを実行する。

自宅のマシンとなるとユーザーの追加はめったにないので、ついつい忘れがちなユーザーの個別設定について書き留めておきます。(備忘録)

CentOSでは、Firefoxがデフォルトでインストールされていますが、インストールされているバージョンがかなり古い。やはり、最新のバージョンでブラウズしたいのでFirefoxの最新版をインストールしたあとのユーザーごとの個別設定を忘れてしまい手間取ったりします。

最新版のFIrefoxの起動設定

(例)
最新版のFireFoxインストール先:/opt/firefox/firefox

■Gnomeデスクトップにブラウザの起動設定を行う。
メニューバー上の[システム]->[設定]->[他の個人設定]から'お気に入りのアプリ'を選択します。

ウエブ・ブラウザのプルダウンメニューを firefox から その他

コマンド を /opt/firefox/firefox %s に変更

ユーザーを追加した時に、ブラウザが古いぞ! を慌ててしまうので書き留めておくことにしました。