2015-11-26

openldapをActiveDirectoryのプロキシーとして設定する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
openldapをActiveDirectoryのプロキシーになるように設定して、openldap経由でActiveDirectoryの内容を確認する方法です。

ちなみにCentos6にopenldapをインストールする前提です。


まずは、openldapをインストールします。
yum install openldap openldap-servers openldap-clients

そしてActiveDirectory用スキーマダウンロードします。
wget http://lism.sourceforge.jp/docs/ad.schema -O /etc/openldap/schema/ad.schema


openldapはsyslogのlocal4にログを出力するようになっているらしいので、出力できるようにします。
vi /etc/rsyslog.conf
以下の内容を追記します。
------------------------------------------------------
# openldap slapd log
local4.*                                                /var/log/ldap.
log
------------------------------------------------------

変更を反映させるためにsyslogを再起動します。
service rsyslog restart

ActiveDirectoryのプロキシーになるように設定をします。
vi /etc/openldap/slapd.conf
以下のように記載します。
以下peername.ipの部分は接続を許可するサーバのIPアドレスを記載しますが、接続制限をしないならばAccess Controllの部分はなしでOKです。
------------------------------------------------------
### Schema includes ###########################################################
include                 /etc/openldap/schema/core.schema
include                 /etc/openldap/schema/cosine.schema
include                 /etc/openldap/schema/inetorgperson.schema
include                 /etc/openldap/schema/misc.schema
include                 /etc/openldap/schema/nis.schema
include                 /etc/openldap/schema/ad.schema

# Allow LDAPv2 client connections.  This is NOT the default.
allow bind_v2

# Main settings ###############################################################
pidfile         /var/run/openldap/slapd.pid
argsfile        /var/run/openldap/slapd.args

### Logging ###################################################################
loglevel                256

### Access Controll  ##########################################################
access to *
  by peername.ip=127.0.0.1 read
  by peername.ip=192.168.0.10 read
  by * none

### Database definitions  #####################################################
database        ldap
readonly        yes
suffix          "ActiveDirectoryのBaseDNを記載します"
uri             ldap://ActiveDirectoryサーバのホスト名かIPアドレス/
rebind-as-user
idassert-bind   bindmethod=simple
                binddn="ActiveDirectoryにBINDするユーザ"
                credentials=上記ユーザのパスワード
                mode=none
idassert-authzFrom      "*"
------------------------------------------------------

設定を反映させます。
rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d

openldapを起動させます。
service slapd start

以下のような感じで接続できたらOKです。
ldapsearch -H ldap://localhost -x -b "上記で設定したActiveDirectoryのBaseDN" -LLL "sAMAccountName=jojo"


ちなみにldapsearchでActiveDirectory直接問い合わせるならば以下のような感じになります。 ldapsearch -D "ActiveDirectoryにBINDするユーザ" -w ユーザのパスワード -h ActiveDirectoryサーバのホスト名かIPアドレス -b "ActiveDirectoryのBaseDNを記載します" -x "sAMAccountName=jojo"


もう一つおまけで、この設定を行ったopenldapにrubyからActiveDirectory上のユーザパスワードの確認を行うとすると以下のような感じです。

require 'net/ldap'
ldap = Net::LDAP.new
ldap.host = "openldapが起動するホスト名またはIPアドレス"
username,password = "jojo", "jojopwd"
result = ldap.bind_as(:base => Settings.ad_base,:filter => "(cn=#{username})",:password => password )

パスワードがあっていればldapのオブジェクトが戻り、あってなければfalseが戻ります。


2015-11-25

redmineの認証にActiveDirectoryを利用する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
redmineの認証をActiveDirectoryにオマカセする方法です。

[管理]-[LDAP認証]の画面で「新しい認証方式」をクリックします。

そして最低限、以下のように設定します。

名称:AD(お好きな名称を設定します) 
ホスト:XXX.XXX.XXX.XXX(ActiveDirectoryのドメインサーバ名かIPアドレス) 
ポート:389 
アカウント:domain\$login(domainは利用するActiveDirectoryのドメイン名です。普段利用しているドメインアカウントがdomain\mynameみたいなものだったら、mynameの部分を$loginに置き換えて登録します。) 
パスワード:(空白) 
検索範囲:DC=domain,DC=sample,DC=co,DC=jp(ユーザを検索するBaseDNを設定します) 
ログイン名属性:sAMAccountName

これで作成して、テストを実施して
接続しました。
と出ればOKです。

そしてredmineにすでに作成済みのユーザがいて、認証をActiveDirectoryに切り替えたい場合は、
[管理]-[ユーザ]の画面で「設定変更したいユーザ」をクリックします。

そして 
認証方式:AD(上記で作成したもの) 
に変更して保存すればOKです。

これでActiveDirectoryに設定してあるパスワードでredmineにログインできるようになります。


ちなみに以下のサイトであるようなredmineとsubversionを連携させてredmineのユーザ情報でsubverionを認証させている場合、設定はそのままでLDAPの情報をきちんとひっぱて来てくれてsubversion側もActiveDirectoryのパスワードで認証できるようになりました。
http://blog.ogatomo.com/blog/2012/05/17/redmine-pm-setting-memo/




2015-08-09

rubyでモジュラス10ウェイト3

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyでモジュラス10ウェイト3を利用してチェックデジットを計算する方法です。
モジュラス10ウェイト3の計算方法に関しては、以下をご確認ください。

http://www.barcode-net.com/chisiki/modulus10_3.html

2015-07-15

subversionの変更記録とredmineのチケット情報を連携させてレポートしてみる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
以下のサイトでsubversionのリポジトリのコード変更量を集計する方法を紹介しています。
http://iyukki.blog56.fc2.com/blog-entry-179.html

これを見てこの情報とredmineのチケット情報を組み合わせることができないかなぁと思ってみたので作ってみました。
以下に置いておきました。
https://github.com/vivahiraj/svn_rm_rep

subversionのコミットログに関連するredmineのチケット番号を
#1111
のように記録していることを前提とはしています。

まずは、リポジトリの変更量を
http://iyukki.blog56.fc2.com/blog-entry-179.html
と同じような仕組みで取得します。

そしてコミットログからredmineのチケット番号を取得して、集計をしておいて
最後にredmineのapiを利用してそのチケット情報を取得します。

使い方としては、以下のような感じになります。
ruby svn_rm_rep.rb -r "{2015-06-01}:{2015-08-01}" -c config.yaml

config.yamlには
subversionリポジトリのURL
redmineのURL
redmineのAPIキー
を記載する必要があります。

ちなみにredmineのAPIキーの取得方法は以下が参考になります。
http://www.r-labs.org/projects/r-labs/wiki/Redmine_REST_API

ツールを実行した結果は以下のようになります。
-----------------------------------------------------------------------------------
 rev| author   | date     | add| del| ticket 
 ---+----------+----------+----+----+-----------
 872|  jagajaga|2015-05-28|   7|   3|1826
 873|  jagajaga|2015-06-11| 124|  54|1922
 874|    imoimo|2015-06-15|   1|   4|
 875|  jagajaga|2015-06-24|  63|   0|1949
 876|  jagajaga|2015-06-24|   7|   7|1950
 877|    imoimo|2015-06-24|   1|   1|1958
 878|  jagajaga|2015-06-24|  19|   7|1949
 879|    imoimo|2015-06-24|   4|   4|
 880|  jagajaga|2015-07-03|  54| 124|1976
 881|    imoimo|2015-07-07|  30|  30|
 882|    imoimo|2015-07-07|   1|   0|
 883|    imoimo|2015-07-08|   2|   1|
 884|    imoimo|2015-07-09|   1|   1|
 885|  jagajaga|2015-07-09|  53|  28|1986
 886|  jagajaga|2015-07-09|  23|   0|1986


 month      | commits | add    | del    | delta  
 -----------+---------+--------+--------+--------
 2015-07    |       7 |   +164 |   -184 |    -20
 2015-06    |       7 |   +219 |    -77 |   +142
 2015-05    |       1 |     +7 |     -3 |     +4


 author     | commits | add    | del    | delta  
 -----------+---------+--------+--------+--------
 imoimo     |       7 |    +40 |    -41 |     -1
 jagajaga   |       8 |   +350 |   -223 |   +127


 ticket | commits | add    | del    | delta  | start      | end        | diff   
 -------+---------+--------+--------+--------+------------+------------+--------
 1986   |       2 |    +76 |    -28 |    +48 | 2015-07-09 | 2015-07-15 |     +5 
 1976   |       1 |    +54 |   -124 |    -70 | 2015-07-03 | 2015-07-03 |     +0 
 1958   |       1 |     +1 |     -1 |     +0 | 2015-06-24 | 2015-06-24 |     +0 
 1950   |       1 |     +7 |     -7 |     +0 | 2015-06-22 | 2015-06-24 |     +1 
 1949   |       2 |    +82 |     -7 |    +75 | 2015-06-22 | 2015-06-24 |     +2 
 1922   |       1 |   +124 |    -54 |    +70 | 2015-06-09 | 2015-06-11 |     +2 
 1826   |       1 |     +7 |     -3 |     +4 | 2015-05-28 | 2015-05-28 |     +0 

-----------------------------------------------------------------------------------

上3つのレポートは
http://iyukki.blog56.fc2.com/blog-entry-179.html
で紹介されたのと同じです。

最後の一つがredmineの情報を組み合わせています。
ticket欄がredmineのチケット番号になっており、startがチケットを起票した日(created_on)でendがチケットをクローズした日(closed_on)になっており、diffがstartからendまでの経過日数になっています。

2015-07-09

apacheで認証は、ActiveDirectoryにしてもらって、認可はローカルファイルを利用する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
apacheでAcitveDirectoryで認証させるには、
sshとapacheの認証でActiveDirectoryと連携する
をご覧ください。

上記は、認証できたら使えますというものでしたが、認証はActiveDirectoryにまかせるけど、実際に利用できるかどうかはローカルのファイルを利用する場合です。

以下のような感じに設定を書きます。
ポイントは、AuthGroupFileとrequire groupです。

<location /test_krb_auth>
  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbAuthRealms MY_DOMAIN
  KrbVerifyKDC Off
  KrbMethodNegotiate Off

  AuthGroupFile /var/www/authgroup
  require group admin
</location>

グループファイルの方は以下のような感じです。
@以下は、認証後にセットされるユーザ名にあわせます。設定方法によっては@以下がなしの場合もあるはずです。

admin: jaga@MY_DOMAIN imo@MY_DOMAIN

これでAcitveDirectoryでjagaさんとsatoさんが認証できたとしても、認可されるのはjagaさんだけになります。

2015-03-12

passengerを利用していてログにpassenger_native_support.soがどうのこのと書いてあったときのこと

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
passenger4以上では、複数のバージョンのrubyを混在させて利用できるようになっています。

passengerでrubyバージョンを混在させる方法は、以下を参照してください。
http://y-ken.hatenablog.com/entry/how-to-use-multiple-ruby-version-in-one-apache-passenger

railsアプリをサブディレクトリ毎にいくつか配置していて、rbenvを利用してそのrailsアプリ毎にrubyのバージョンを変えて使っていたりしています。

で、apacheのerror_logに時折、以下のようなメッセージが表示されていました。

App 7405 stderr:  --> Compiling passenger_native_support.so for the 
current Ruby interpreter...
App 7405 stderr: 
App 7405 stderr:      (set PASSENGER_COMPILE_NATIVE_SUPPORT_BINARY=0 to 
disable)
App 7405 stderr: 
App 7405 stderr:  --> Downloading precompiled passenger_native_support.
so for the current Ruby interpreter...
App 7405 stderr: 
App 7405 stderr:      (set PASSENGER_DOWNLOAD_NATIVE_SUPPORT_BINARY=0 to 
disable)
App 7405 stderr: 
App 7405 stderr:      Could not download https://oss-binaries.phusionpassenger.com/binaries/passenger/by_release/4.0.59/rubyext-ruby-2.1.2-x86_64-linux.tar.gz: The requested URL returned error: 404
App 7405 stderr:      Trying next mirror...
App 7405 stderr:      Could not download https://s3.amazonaws.com/phusion-passenger/binaries/passenger/by_release/4.0.59/rubyext-ruby-2.1.2-x86_64-linux.tar.gz: The requested URL returned error: 403
App 7405 stderr:  --> Continuing without passenger_native_support.so.

別に普通に使えていたので、ほったらかしいたのですが、
ふと/tmpの下を見たら
passenger_native_support-1q5o6tj.log
というファイルができていて、その中身を見たら以下のような内容が出ていました。

# mkdir -p /usr/local/lib/ruby/gems/1.9.1/gems/passenger-4.0.59/buildout/ruby/ruby-2.1.2-x86_64-linux
Encountered permission error, trying a different directory...
-------------------------------
# mkdir -p /var/www/.passenger/native_support/4.0.59/ruby-2.1.2-x86_64-linux
Encountered permission error, but no more directories to try. Giving up.

私の環境では、apacheをapacheユーザで運用していたのですが、
/var/www/
のオーナーがrootになっていました。
そこで
mkdir /var/www/.passenger
chown apache:apache /var/www/.passenger
としてapacheを再起動したら、上記のメッセージが出なくなりました。

そして
/var/www/.passenger/native_support/4.0.59/ruby-2.1.2-x86_64-linux
の中に
passenger_native_support.so
が確かにできていました。

メッセージが出ているだけで、特に動きに支障はなかったのですが、気にはなっていたので解決できてよかったです。