2012年7月18日水曜日

CentOSでUPSの設定(apcupsd)

自宅のPCサーバー(Linux:CentOS)にUPSを付けることにした。

今までUPSをつけないでいたために、何台かPCのディスクを故障させてしまった。
一度の突然の電源断でもディスクが破壊される場合もあるが、何度も電源断があるとディスクのアクセスアームが磁気ディスク(円盤)を傷つけてしまう。

今年は、夏真っ盛りになる前にUPSを付けて停電・ブレーカー落ちに対応する。

購入したUPSは、APC RS550電源バックアップ(500VA) BR550G-JP です。
てっきり、Linux用のPowerChuteもCDに含まれていると思っていたら、なんとありませんでした。

APCのサイトでRPM版のPowerChuteが公開されていましたが、CentOSのリポジトリでapcupsd・apcupsd-gui・apcupsdーcgiがあるので、これをインストールする。

インストール後に早速アクセスしてみるが
Unable to communicate with the UPS on 127.0.0.1.
エラーで接続できない。SELinuxでエラーが吐き出されているので確認してみる。

アクセスを許可
httpd がネットワークポートに接続するように設定する場合、httpd_can_network_network_connect boolean をオンにする必要があります: "setsebool -P httpd_can_network_connect=1"

次のコマンドがこのアクセスを許可します:
setsebool -P httpd_can_network_connect=1

追加情報
ソースコンテキスト:  system_u:system_r:httpd_sys_script_t
ターゲットコンテキスト:  system_u:object_r:apcupsd_port_t
ターゲットオブジェクト:  None [ tcp_socket ]
Source:  upsstats.cgi
Source Path:  /var/www/apcupsd/upsstats.cgi
Port:  3551
Host:  hoge
Source RPM Packages:  apcupsd-cgi-3.14.10-1.el5
Target RPM Packages:  
ポリシー RPM:  selinux-policy-2.4.6-327.el5
Selinux 有効化:  True
ポリシータイプ:  targeted
MLS 有効化:  True
強制モード:  Enforcing
プラグイン名:  httpd_can_network_connect
      ・
      ・
      ・

生の監査メッセージ :

host=ora02 type=AVC msg=audit(1342584417.76:293): avc: denied { name_connect } for pid=7159 comm="upsstats.cgi" dest=3551 scontext=system_u:system_r:httpd_sys_script_t:s0 tcontext=system_u:object_r:apcupsd_port_t:s0 tclass=tcp_socket

host=ora02 type=SYSCALL msg=audit(1342584417.76:293): arch=40000003 syscall=102 success=no exit=-13 a0=3 a1=bfba290 a2=3 a3=804eb20 items=0 ppid=3361 pid=7159 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="upsstats.cgi" exe="/var/www/apcupsd/upsstats.cgi" subj=system_u:system_r:httpd_sys_script_t:s0 key=(null)

早速、指示通りに # setsebool -P httpd_can_network_connect=1 を実行すると...

無事に表示されました。

2012年7月17日火曜日

SELinux覚書き(httpd_can_network_connect)

SELinuxのこまごまとした点についての覚書き

  • httpd_can_network_connect
    WEBサーバからDBサーバへアクセスするプログラムをPHPで作成したが、アクセスできない現象が発生
    • 原因
      WEBサーバのSELinuxのhttpd_can_network_connectが無効となっていた
    • 対処
      # setsebool -P httpd_can_network_connect 1
    • 確認
      # getsebool httpd_can_network_connect
      httpd_can_network_connect --> on

2012年7月15日日曜日

CentOS Firefox最新版のインストール

CentOSの自動更新では、firefoxの最新版はインストールされないので手動で最新版をインストールするための覚書き。
※CentOSの自動更新ではかなりふるいバージョンになってしまう。

一度最新版をインストールしたら、その後は firefox から(rootで)最新版に更新ができるが、12.0あたりになってから firefox の起動時に下記のエラー(kernel: 4gb seg fixup, process firefox)がでるようになったので、最新版のインストールを再度実行して確認することとした。

Jul 15 20:16:14 hoge kernel: 4gb seg fixup, process firefox (pid 8118), cs:ip 73:00401cef

■ firefoxの最新版をダウンロードする。(http://www.mozilla.jp/firefox/)

ダウンロードした tarボール を展開する。

# tar jxfv firefox-13.0.1.tar.bz2

展開された firefox をディレクトリごと移動します。

# mv firefox /usr/lib/firefox-13.0.1

/usr/bin にシンボリックリンクを貼ります。

# ln -s /usr/lib/firefox-13.0.1/firefox /usr/bin

2012年7月10日火曜日

SELinux ラベルの変更

httpd で公開フォルダを追加した時についつい忘れて手間取ってしまうのが、SELinuxのラベルの貼り替えです。

SELinuxで運用しているとフォルダや作成した時には、作成先に見合うラベルを設定する必要があります。
通常は、restorecon -R コマンドで親フォルダの情報が引き継がれると思っていたのですが、単純に引き継がれる訳でないようです。(詳細は未確認(未調査)です。)
よって、作成したフォルダに正しいラベルを設定するという事が必要になります。

# chcon system_u:object_r:httpd_sys_content_t /home/www -R
# chcon system_u:object_r:httpd_sys_script_exec_t /home/www/cgi-bin -R

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 ~]#