2015年8月11日火曜日

ARMクロスコンパイル用clang

■ソース取得
・binutils
http://ftp.gnu.org/gnu/binutils/
上記から最新バージョンのtarアーカイブ取得

・LLVM他
gitで取得

git clone http://llvm.org/git/llvm
cd tools
git clone http://llvm.org/git/clang
git clone http://llvm.org/git/lldb

■ビルド
・binutils
cd binutils
mkdir build
../configure --target=arm-eabihf --enable-threads --enable-shared
make; make install

(注意)
../configure --target=arm-eabihf --enable-targets=arm とするとエラー発生
複数ARM用のビルド設定は出来ない様子

・clang, llvm, lldb
cd llvm
mkdir build
cd build

../configure --target=arm-eabihf --enable-threads --enable-shared --enable-optimized --disable-assertions --with-abi=aapcs-vfp --with-cpu=cortex-a9 --with-float=hard --with-fpu=neon
make; make install

2015年8月5日水曜日

ドメイン名の取得とサーバー証明書

■経緯
 VPSのサーバー証明書を取るのに必要になった
 →さくらVPSのデフォルトドメインでKingSSLのサーバー証明書を取ろうとしたらフィッシング審査ではじかれたため
 →sakura.ne.jpがかつてフィッシングサーバとして使われたからか?

■取得先
 お名前どっとこむ
  割と安いしメジャーな様子
 →安いと思いきや罠あり。Whois代行がドメイン登録時は無料だが更新後から1000円/年かかる
  これはドメイン更新費用より高く割に合わない

 ムームードメイン
  こちらもメジャーなうえ、Whois代行が無料。
  登録時の費用はお名前ドットコムより高いが更新も考えるとこちらの方が安い

(補足)
 お名前ドットコムもムームードメインもどちらもGMOのグループ会社
 サービス内容については大差無い

■取得契約内容
・TLD(Top Level Domain): 値段と目的で .workにする
・Whois代行: ON
  Whois代行とはドメイン取得所在地、所有者情報を個人名から登録代行業者に変更すること

■契約後の設定
・さくらVPSドメイン設定から取得したドメイン名を登録
 その際にさくらのDNSサーバアドレスが表示されるので控えておく
 今回はns1.dns.ne.jp, ns2.dns.ne.jp だった

・ムームードメインの設定から外部DNSを使用を選択
 さくらのDNSサーバアドレス2つを登録する

■SSLサーバ証明書
・秘密鍵生成
  openssl genrsa -des3 -out [秘密鍵ファイル名] 4096
  鍵にパスフレーズをつけないのであれば-des3オプションは不要

・CSR生成
  openssl req -new -key [秘密鍵ファイル名] -out [出力CSRファイル名.csr]

・証明書要求
 今回はKingSSLにした。安いので
 申し込みページのCSR欄に生成したCSRをエディタで表示した内容をコピーペーストする

 簡易ドメイン審査が行われた後にドメイン宛にメールが送られる。
 送り先アドレスはpostmaster@やwebmaster@が選択できる
 サーバー側でpostfixを動作させてメールを受け取れるようにしておくこと
 念のため/etc/aliases でローカルアカウントと外部メールの両方に転送しておくといいかもしれない
 /etc/aliasesの転送先はカンマ区切りで複数指定できる

・申し込み後に承認確認メールが来るので承認URLをブラウザで開いて確定する
 確定後に証明書情報が送られてくる。

■クライアント証明書
・秘密鍵生成
 openssl genrsa -out [キーファイル名] 4096

・CSR生成
  openssl req -new -key [キーファイル名] -out [CSRファイル名]

・署名
  openssl ca -in [CSRファイル名] -config /etc/ssl/openssl.cnf -out [クライアント証明書ファイル名]

■はまった点
 メールを外部転送しなかったので添付ファイルを開くのに苦労した。
 コマンドラインからメールを開くにはbase64 contentの部分だけ抜き出してファイル保存をする
 そして以下のコマンドで復号する
  openssl base64 -d -in <infile> -out <outfile>

2015年7月23日木曜日

msys2 - clang作成

■準備
以下のパッケージをインストール。64bit版を想定

・mingw-w64-x86_64-toolchain
 →32ビットにしたいならmingw-w64-i686-toolchain
・diffutils
・git

■llvmファイル一式取得
適当なワークフォルダに移動してgitで取得

git clone http://llvm.org/git/llvm
cd tools
git clone http://llvm.org/git/clang
git clone http://llvm.org/git/libcxx
cd ../projects
git clone http://llvm.org/git/compiler-rt
cd ..

■ビルド
ARMクロスコンパイルもしたいのでx86, x86_64, arm, arm64をターゲットとしてビルドする

mkdir build
cd build
../configure --enable-targets=x86_64,x86,arm,aarch64 --disable-assertions --enable-optimized
make; make install

msys2インストール

■インストール後アップデート
pacman -Suy

もし下記エラーが出る場合は
error: GPGME error: No data
error: GPGME error: No data
error: GPGME error: No data

rm -r /var/lib/pacman/sync
pacman -Syuf
 
アップデート後はターミナルを再起動する 

2015年4月29日水曜日

Apache2のセキュリティ設定(基本)

■ヘッダ情報削減
・HTTPレスポンスヘッダのサーバ情報を減らす
 /etc/apache2/conf-available/security.conf

ServerTokens OS →  ServerTokens Prod
ヘッダにApacheやOSのバージョン情報を入れない

・ヘッダ識別子非表示
 ServerSignature On  →  ServerSignature Off

■Apacheトップページの非表示
http://ドメイン名/ で表示されるApacheのサンプルページの非表示

/etc/apache2/conf-available/security.conf

<Directory />
  AllowOverride None
  Order Deny,Allow
  Deny from all
</Directory>

これがコメントアウトされていたらはずす。無ければ追記

[Ubuntu] Gitolite3 + Apache2 + SSLクライアント認証

■目的
自分で立てたgitサーバーに対してhttps プロトコルでクライアント認証アクセスする

■インストール
Apache2はインストール済みとする

・Gitolite3インストール
  apt-get install gitolite3
 インストール中に管理者の公開鍵パスを要求されるので適当にSSHログインできる公開鍵を指定する
 →これは後で変更も可能なので適当でOK

 インストールが完了するとGitolite3のファイル群は /usr/share/gitolite3
 環境は /var/lib/gitolite3 に作成される。

■Apache2準備
まずはApache2の準備

・ apache-suexec-custom のインストール
   apt-get install apache-suexec-custom
   a2enmod suexec

・mod_cgid 有効化
  a2enmod cgid

・gitolite ラッパースクリプト用意
  DocumentRoot が /var/www だとしたら /var/www/git というフォルダを作成する。
  ここにスクリプトを追加する。  gitolite-suexec-wrapper.sh とする。
 →スクリプトを置くフォルダは/var/www/git でなくても良いが、DocumentRootで指定したフォルダのサブフォルダでないとsuexecがスクリプトを実行できないので注意

(gitolite-suexec-wrapper.sh)
===============================================================================
  #!/bin/bash

  export GIT_PROJECT_ROOT="/var/lib/gitolite3/repositories"
  export GITOLITE_HTTP_HOME="var/lib/gitolite3"

  exec /usr/share/gitolite3/gitolite-shell
===============================================================================

  chown gitolite3:gitolite3 gitolite-suexec-wrapper.sh
  chmod +x /var/gitolite/gitolite-suexec-wrapper.sh

  として所有者、実行権限を変更する。

・SSLクライアント認証設定
  VirtualHost の設定に以下を追加

===============================================================================
SSLEngine on
SSLCertificateFile <サーバー証明書のパス>
SSLCertificateKeyFile <サーバ秘密鍵のパス>
SSLCACertficateFile <CA証明書のパス>
SSLVerifyClient require
SSLUserName SSL_CLIENT_S_DN_CN

SuexecUserGroup gitolite3:gitolite3
ScriptAlias /git /var/www/git/gitolite-suexec-wrapper.sh

<Location /git>
    Order allow,deny
    Allow from all
</Location>
===============================================================================

CAはオレオレCAで良い。SSLUserName設定はクライアント証明書のCNをユーザー名として扱うことの宣言。
環境変数REMOTE_USERもこれによって証明書CNに置き換わる。

■Gitolite3準備
次にGitolite3側の準備

・リポジトリアクセス権設定
Gitolite3のインストールによってgitolite-admin リポジトリが自動で生成されているはず。
まずはこれをローカルでclone する。そして conf/gitolite.conf を編集する。
例えばtesting リポジトリの設定が以下のようになっていたら

repo testing
    RW+    = @all



repo testing
    RW+    = @all
    R        = daemon

というようにdaemonユーザーに対してRead権限を付与する。こうしないとApacheからGitolite3管理のリポジトリが読み出せない。Apacheからアクセスしたい全てのリポジトリにR = daemonを付与する。
変更したらcommit, push して反映

また当然であるが、クライアント証明書のCNと同じ名前のアクセス権限がリポジトリに設定されている必要がある。例えば、developというメンバーがクライアント認証でアクセスする場合にはtesting リポジトリの例で言うと

repo testing
    RW    = develop
    R      = daemon

とする。このときtestingリポジトリにApacheからはクライアント証明書のCNがdevelopでないとリポジトリにアクセスできない。

■クライアント側設定
・git設定ファイルの変更
(Linux)
    ~/.gitconfig

(Windows)
    C:/Users/<ユーザー名>/.gitconfig

以下の設定を追記する
===============================================================================
[http]
sslCert = <クライアント証明書ファイルパス>
sslKey = <クライアント秘密鍵ファイルパス>
sslCaInfo = <CA証明書ファイルパス>
sslVerify = false
===============================================================================

最後のsslVefiry = false はオレオレCAの場合に必要。ちゃんと認証機関からCA証明書を取得しているなら不要。

■実行
以上の設定が完了していれば以下のコマンドでリポジトリの取得が可能なはず。

git clone https://<ドメイン名>/git/<リポジトリ名>