yuu_nkjm blog
2011-11-03(Thu) [長年日記] 編集
[KVM][openSUSE][サーバまとめ] KVMのホスト機の設定
ブリッジ(ブリッヂ)接続で,KVMクライアントを接続するKVMホスト機の設定をする.
準備
openSUSEをインストールし,セキュリティの設定(sshdとfail2ban)を済ませておく.
- openSUSE11.4(64bit)のインストール - yuu_nkjm blog(2011-07-18)
- sshdのまとめ - yuu_nkjm blog(2011-07-12)
- fail2banのまとめ - yuu_nkjm blog(2011-07-20)
ブリッヂ接続を作成する
ブリッジ接続を作成する.openSUSEの場合,yastでKVMハイパーバイザをインストールすると,自動で作ってくれる.作ってくれない場合は,bridge-utilsを使っても,手書きしても良い.水銀室 ブリッジネットワークを設定します
CPUがKVMに対応しているか
Intel系CPUの場合は"grep --color vmx /proc/cpuinfo",AMD系CPUの場合は,"grep --color svm /proc/cpuinfo"とする.
KVMのインストール
- yast->インストールで,kvm,qemu,virt-manager,bridge-utilを選択する
- KVMモジュールがインストールされているかをチェックする.
lsmod | grep kvm
なにも表示されなかったら,
modprobe kvm modprobe kvm_intel lsmod | grep kvm kvm_intel 53490 0 kvm 374471 1 kvm_intel
- yast->ハイパーバイザのインストール->KVMを選ぶ.グラフィカルコンポーネントのインストール-> yesとする.
- ネットワークブリッジ-> yesとするとネットワークが落ちてしまうことがあるので,遠隔で作業するときは注意する.デフォルトゲートウェイでデバイスを"eth0"といったように指定していると,ブリッジした場合に落ちる可能性が高い.デフォルトゲートウェイのデバイスは"―"にしておくのが良さそう.もしくは,ブリッジしたあと,デフォルトゲートウェイのデバイスをブリッジ(br0)に指定する.ネットワークの設定は以下の様になる.
ネットワーク設定 │名前 │IP アドレス ││ │NetXtreme II BCM5709 Gigabit Ethernet│0.0.0.0 │eth0 │ │ネットワークブリッジ │1xx.xx.xx.150 │br0│ ルーティング │ 130.54.21.129 │デバイス - │ または │ 130.54.21.129 │デバイス br0 │ #(eth0)だと死ぬ
KVMの起動
- 起動の準備.
chkconfig libvirtd on /etc/init.d/libvirtd start chkconfig libvirt-guests on /etc/init.d/libvirt-guests start
- virt-managerコマンドを使って,KVM仮想マシンマネージャを起動する.新規(new)ボタンを押すとKVM仮想マシンの作成がはじまる.
- X11が飛ばせないときは,X11フォーワディングをしようとしたとき,DISPLAY変数に値が設定されない - yuu_nkjm blog(2011-08-01) を確認する.
トラブルシューティング
- "error: unknown OS type hvm "というエラーが出たが,libvirtdを再起動したら直った.
参考ページ
2011-11-04(Fri) [長年日記] 編集
[KVM][openSUSE][サーバまとめ] KVMのクライアント機の新規作成
GUIを使ってインストール
virt-managerコマンドを使って,KVM仮想マシンマネージャを起動する.新規(new)ボタンを押すとKVM仮想マシンの作成がはじまる."error: unknown OS type hvm "というエラーが出たが,libvirtdを再起動したら直った.
- メモリを割り当てる.
- 仮想HDDを作成する.
- インストールディスクを仮想CDとして登録する.
- インストール元をその仮想CDとする.
- openSUSE11.4(64bit)のインストール - yuu_nkjm blog(2011-07-18)を参考にさらりとインストール.
コマンドラインからインストール
virtshとかvirt-installを使うとコマンドラインからKVMクライアントイメージをインストールしたり,管理したりできるようだ.
参考ページ
2011-11-05(Sat) [長年日記] 編集
[LinuxDesktop][LinuxLanguage] ユーザのホームディレクトリ以下の自動生成フォルダの名前を英語から日本語にする
- yastで"xdg-user-dirs-gtk-lang"を入れる.
- 自動生成されるディレクトリ名が日本語になると鬱陶しいので "LANG=C xdg-user-dirs-gtk-update"とする.
- 水銀室 gtk-user-dirsでディレクトリ名を変更 -openSUSE Linuxデスクトップ環境構築-
2011-11-20(Sun) [長年日記] 編集
[Apache][openSUSE][サーバまとめ] WebDavの設定
openSUSE 11.4でApacheにWebDavモジュールを組み込んで動かした時の設定.
apacheの設定
yastの/etc/syscnfigエディタで,Network/WWW/Apache2を選択し,APACHE_MODULESを編集する.dav dav_lcok dav_fsを追加する.
ロックファイルの設定を設定ファイルに書く.
/etc/apache2/conf.d/dav.conf <IfModule mod_dav_fs.c> DavLockDB /var/lock/dav/DavLock </IfModule>
ロックファイルを作成する.
mkdir /var/lock/dav chmod 777 /var/lock/dav/
WebDavとして公開するディレクトリの設定
/etc/apache2/conf.d/dav.conf(もしくはホスト毎の設定ファイル)に以下の設定を書き込む.
Alias /dav /dav/repos/nkjm <Location /dav> Options Indexes DAV on AuthType Digest AuthName "Private" AuthUserFile /hogehoge/.htdigest Require valid-user <LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location>
2011-11-21(Mon) [長年日記] 編集
[openSUSE] WHEELグループのユーザしか管理者権限を取得できないようにする
rootになれるユーザを限定したいので,wheelを使う.以下,openSUSE11.4 (64bit)の時の設定.
/etc/pam.d/su /etc/pam.d/su-l auth required pam_wheel.so use_uid group=wheel /etc/group wheel:x:10:root,hoge,fuga (rootはいらないかも) /etc/login.defs 設定を変えない. (openSUSE10.3の時は入れていた様だ.SU_WHEEL_ONLY yesを入れない)
参考ページ
2011-11-22(Tue) [長年日記] 編集
[Apache][SSL][openSUSE] openSUSE11.4で認証局と証明書の作成
CAを生成するスクリプトがディストリビューションによって違うみたいなので,メモ.
CA【Certificate Authority】(認証局)の作成
cd /usr/share/ssl/misc/ ./CA.pl -newca CA certificate filename (or enter to create) (enter) Making CA certificate ... Generating a 1024 bit RSA private key ......................++++++ ..++++++ writing new private key to './demoCA/private/cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:JP State or Province Name (full name) [Some-State]:Kyoto Locality Name (eg, city) []:Kyoto Organization Name (eg, company) [Internet Widgits Pty Ltd]:Kyoto Organizational Unit Name (eg, section) []:Kyoto Common Name (eg, YOUR name) []:*.nkjm.info Email Address []:root@nkjm.info ..... Write out database with 1 new entries Data Base Updated
Common Nameが大事.ドメイン名と揃える必要がある.このとき*をワイルドカードとして用いることが出来る.
サーバ証明書を作成
openssl req -new -nodes -keyout mailkey.pem -out mailreq.pem -days 36500
証明書への署名
openssl ca -out mail_signed_cert.pem -infiles mailreq.pem Using configuration from /etc/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: (snip) Sign the certificate? [y/n]:y failed to update database TXT_DB error number 2
ウェブレン社長 360°ブログ ≫ SSL プライベート認証局の構築によると,「openssl ca ,,,でサーバ証明書の発行、クライアント証明書の発行を行うと、failed to update database TXT_DB error number2 でエラーが発生する場合がある。この場合は、このデータベース($dir/index.txt)を一旦削除し、空のフアイルを作成(#touch $dir/index.txt)し、再実行するとうまくいく」とのこと.
rm demo/index.txt touch demo/index.txt openssl ca -out mail_signed_cert.pem -infiles mailreq.pem Using configuration from /etc/ssl/openssl.cnf Enter pass phrase for ./demoCA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: (snip) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
2011-11-23(Wed) [長年日記] 編集
[sudo][rsync][ssh][backup] rsync + sudo + ssh
お題
- リモートサーバのroot権限がないとアクセス出来ないファイルも含めて,バックアップが取りたい.
- rootでは,リモートサーバにログインできない.一般ユーザでは鍵を使えばログインできる.
…というような状況なので,rsync + sudo + sshをすることを考える.
sudoを使ってリモートのバックアップ対象サーバにおいてrootでrsyncできる様にする
visodo # /etc/sudoersの編集と同義. #Defaults requiretty #ALL ALL=(ALL) ALL #上記,二つをコメントアウト # 追加 bakupuser ALL= NOPASSWD:/usr/bin/rsync
セキュリティを考えるとrsyncを許可するより,コピー先やオプションを書いたrsyncのシェルスクリプトを用意して,それの実行を許可した方が良いかな.
rsyncの実行
su rsync --rsync-path="sudo rsync" -qac hoge@hoge.nkjm.info:/ /mnt/backup/hoge.nkjm.info/
--rsync-pathはリモートで実行するrsyncを具体的に指定するオプション.これによりsudoしてrsyncをすることができる.
aはアーカイブのオプションで,つけとけば間違いない.qは出力を静かにさせる.詳細に振る舞いを確認したいときはvやvvとする.cはチェックサムの確認をする.オプション.
このケースでは,ssh-agentによる認証の転送をしてリモートサーバにログインをした.rsyncで明示的にssh+鍵認証をするなら,-eオプションを使う.
psしてみると,リモート側でrsyncが動いていることが分かる.
2011-11-24(Thu) [長年日記] 編集
[KVM][LVM][openSUSE] LVMで管理された論理ボリュームをオンラインで拡張する
KVMの上で動かしているopenSUSEで,LVMで管理されているパーティション(論理ボリューム)をアンマウントすることなく拡張する.
仮想HDDの作成
virt-managerから,開く->詳細->ハードウェアの追加を選択する.Storage -> デバイスの種類:Virtio Diskを選択する.
LVMの操作
新しいHDDに物理ボリュームを作る
yastからパーティション設定を選ぶ.ハードディスク->/dev/vdb1 -> プライマリパーティション -> 最大サイズ -> パーティションをフォーマットしない(Linux LVM)と選ぶ.物理ボリューム/dev/vdb1が生成されている.
ボリュームグループへの物理ボリュームの追加
ボリュームグループへの物理ボリュームの追加がないやん…と思ったら,サイズ変更からできた.ボリューム管理-> サイズ変更から/dev/vdb1を選択して,追加する.
論理ボリュームのサイズ変更
/dev/system/root->サイズ変更を選んで,好きなサイズを選ぶ.サイズを増やすだけの場合のみ,アンマウントしなくても大丈夫なようだ.
以下の様な状態を想定する.
File System: /dev/mapper/system-root mounted on: /
- /dev/mapper/system-rootを/にマウントしたまま,/の容量を増やすことは出来る.
- /dev/mapper/system-rootを/にマウントしたまま,/の容量を減らすことはできない.
関連ページ
-
LVMで管理されるパーティションサイズをオフラインで縮小する - yuu_nkjm blog(2012-01-30)
オフラインだが,サイズの縮小も可能な方法はこちら. - Pantora Networks ≫ 3章 LVM操作 応用編
2011-11-25(Fri) [長年日記] 編集
[ssh][Stone] StoneによるSSH over HTTP(HTTPS)
HTTP Proxyを介してしか,インターネットに出られない.しかし,インターネット上にあるサーバの管理をする必要があるんだよ!ってときに頑張ってトンネルする方法.
ダウンロード
[nkjm@info ~/src]$ wget http://www.gcd.org/sengoku/stone/stone-2.3e.tar.gz [nkjm@info ~/src]$ tar zxf stone-2.3e.tar.gz [nkjm@info ~/src]$ cd stone-2.3d-2.3.2.7/
コンパイル
[nkjm@info ~/src/stone-2.3d-2.3.2.7]$ vi Makefile # 以下のように編集. linux: $(MAKE) FLAGS="-O -Wall -DCPP='\"/usr/bin/cpp -traditional\"' -DPTHREAD -DUNIX_DAEMON -DPRCTL -DSO_ORIGINAL_DST=80 -DUSE_EPOLL -D_GNU_SOURCE $(FLAGS)" LIBS="-lpthread $(LIBS)" stone [nkjm@info ~/src/stone-2.3d-2.3.2.7]$ make linux-ssl
stoneをLinuxでコンパイルする ≪ 突然消失するかもしれないブログによると,Makefileで-D_GNU_SOURCEというオプションを指定すれば,64bit OS上でコンパイルできるようになるらしい.makefileからlinuxの項を見つけ出し,オプションを追加してからmake.
また,コンパイル時に,openssl/crypto.hがないよというエラーが出た場合は,yastでlibopenssl-develを入れる.
SSLの設定
[nkjm@info ~/src/stone-2.3d-2.3.2.7]$ openssl req -new -outform pem -out stone.cert -newkey rsa:1024 -keyout stone.key -nodes -rand ./rand.pat -x509 -batch -days 35600 cat stone.cert stone.key > stone.pem cp -a stone.pem /etc/ssl/certs/
サーバ側の実行
stone -p localhost:22 443/ssl
クライアント側の実行
クライアントがWindowsであれば,Windows用のバイナリを拾って来て使う.
stone -p localhost:10443/ssl 10022 -- proxy:8080/http 10443 "CONNECT server:443 HTTP/1.0" とか stone -p localhost:10443/ssl 10022 -- server:443 10443
2011-11-28(Mon) [長年日記] 編集
2011-11-29(Tue) [長年日記] 編集
[ssh][PuTTY] sshの多段の認証転送
状況
秘密鍵の置き場所に迷ったときは認証の転送が便利というお話し.
クライアントPC => ゲートウェイサーバ(鍵認証のみ) => アクセス対象サーバ(鍵認証のみ)
といった経路でしか管理したいサーバにアクセスできない(下図)とき,ゲートウェイサーバに秘密鍵を置くしかないの?となることがある.そんなときは,認証の転送が便利.下図のプライベートサーバ,公開サーバ2において,また認証の転送を行いたいときは「もう一段階先への転送」で書いた内容を実行する必要がある.
認証鍵の転送
SSHクライアントにPuTTYを使っている場合,SSH->SSH認証の設定->認証パラメータの「エージェントフォワーディングを認める」にチェックを入れる.以下のページに詳細がよくまとまっている.
Pageant は ssh-agent と同じく、認証鍵の転送機能を持っています。これを利用すれば、たとえログイン先のサーバーに認証鍵がなくても、ローカルにある認証鍵を使用してログイン先からさらに別のサーバーに SSH 接続を確立できます。サーバーに秘密鍵を保存する必要が無いため、秘密鍵の流出の危険を大幅に削減できます。
Pageant による認証鍵の転送は以下の手順で利用できます。
Pageant を起動し、必要な認証鍵を登録する。 PuTTY を起動する。 普通に SSH ログインするのですが、その際に [接続]-[SSH]-[認証] の「エージェントフォワーディングを認める」にチェックを入れておきます。もしくは、起動時に "-A" オプションを指定する方法もあります。 ログイン先で、さらに "ssh <ユーザー名>@<ホスト名>" などとしてさらに別のホストにログインします。 Pageant に必要な認証鍵が登録されていれば、正常にログインできるはずです。なお、Pageant で認証鍵の転送機能を利用するためには、ログイン先の SSH サーバーが OpenSSH でなければなりません。本家 SSH は OpenSSH とは別のプロトコルを使用しており、そちらは Pageant ではサポートされていません。
もう一段階先への転送
SSHサーバを渡り歩くには,~/.ssh/configに"ForwardAgent yes"を追加する必要がある.
cat ~/.ssh/config # "ForwardAgent yes"がなかったら,以下を実行. echo "ForwardAgent yes">>~/.ssh/config
ssh の agent forwarding | 自作自演がすごく分かりやすかった.
2011-11-30(Wed) [長年日記] 編集
[openSUSE][Apache][WebDav][SVN] svn over httpの設定
svn co svn+ssh://hoge.nkjm.info/svn/nkjm workspace
ではなく,
svn co http://hoge.nkjm.info/svn/nkjm workspace
をやりたい.
サーバの設定
digest認証
yastの/etc/sysconfig エディタで,Network/WWW/Apache2を選択しAPACHE_MODULESを編集する.auth_digestを追加する.
SVNの準備
yastでsubversion,subversion-serverを入れる.
WebDavの準備
SVN on DAVの設定
yastの/etc/sysconfigエディタで,Network/WWW/Apache2でAPACHE_MODULESを編集する.dav_svn authz_svnを追加する.
/etc/apache2/conf.d/subversion.conf(もしくはホスト毎の設定ファイル)に以下の設定を書き込む.
閲覧するだけでもパスワードが必要
<Location /svn> DAV svn SVNPath /svn/repos/nkjm AuthType Digest AuthName "Private" AuthUserFile /hogehoge/.htdigest Require valid-user Options Indexes Order allow,deny Allow from all </Location>
閲覧するだけならパスワードなし,書き込み時には必要(うまくいかなかった)
以下の設定でうまくいくと思ったんだけど,意図通りは動作しなかった.
<Location /svn> DAV svn SVNPath /svn/repos/nkjm <LimitExcept GET PROPFIND OPTIONS REPORT> AuthType Digest AuthName "Private" AuthUserFile /hogehoge/.htdigest Require valid-user </LimitExcept> Options Indexes Order allow,deny Allow from all </Location>
SVNレポジトリの作成
svn create /svn/repos/nkjm chmod -R wwwrun:www /svn/repos/nkjm
WebDAVのテスト
SVNクライアントによるアクセス
http経由でチェックアウト出来るか,コミットできるかを確認する.
svn co http://hoge.nkjm.info/svn/nkjm workspace cd workspace svn add README svn add ADD_FILE_TEST svn commit -m "Add files."
ブラウザによるアクセス
"http://hoge.nkjm.info/svn/nkjm"にブラウザからアクセスする.
cadaver
cadaverというdavクライアントがあるらしい.yastでcadaverを入れる.
cadaver http://hoge.nkjm.info/svn/nkjm
備考・注意事項
- ユーザ毎に,閲覧権限,書き込み権限を与える様な設定はできていない.やりたい場合は,以下の記事を参照.
リポジトリの中も細かく制御したいorユーザごとの制御もしたい場合 †
<Location "/svn/repos"> DAV svn SVNParentPath /absolute/path/to/repository/parent AuthzSVNAccessFile /my/svn/authz/file AuthType Basic AuthName "Subversion repository" AuthUserFile /my/svn/user/passwd/file Require valid-user </Location>
- /my/svn/authz/file
# グループ定義 [groups] grp1 = user1, user2 grp2 = user1, user3 # 全ユーザに全リポジトリ以下の読み込み権限を与え、 # user0に全リポジトリ以下の読み書き権限を与える。 [/] * = r user0 = rw # grp1に属するユーザにproject1リポジトリ以下の読み書き権限を与える [project1:/] @grp1 = rw # grp2に属するユーザにproject2リポジトリのtrunk以下の読み書き権限を与える [project2:/trunk] @grp2 = rw
- /my/svn/authz/file
- レポジトリの持ち主がwwwrun:wwwになっているので,ssh+svnでコミットしようとするときに注意する必要がある.
- HTTPプロキシ経由でしか外部に出られないようなケースもあるので,HTTPでSVNが扱えると便利
- DavとSVNを使おうとするディレクトリに対して,"Options Indexes"が必要なようだ.DAV svnがあれば,よろしくやってくれるのかと思っていたけれど.