2017年01月12日

システムの再起動が必要かどうかの確認方法

すぐに忘れちゃうのでメモ。
# cat /var/run/reboot-required
*** システムの再起動が必要です ***

ちなみに再起動が不要な場合はファイルそのものがありません。
なのでチェックが目的であれば以下のとおりですね。
# ls /var/run/reboot-required
posted by 月水和尚 (とも) at 19:30 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2017年01月05日

Linuxでうるう秒の挿入を確認する方法

こんな感じ。
$ dmesg | grep leap
[389065.076861] Clock: inserting leap second 23:59:60 UTC

dmesgに出力されるんですね。

ちなみに確認したのはRaspberry Pi2上のRaspbianですが、たぶんプラットフォームやディストリビューションに縛りはないと思われます。

これ、23:59:60の挿入に関するログなので、ntpdがstepモードで動いているときにしか出力されないのかな?という素朴な疑問。
slewモードの時はどうなるんだろう…手元にslewな環境がないのが悔やまれる。
ご存じの方、コメントなどいただけるととても嬉しいです。
posted by 月水和尚 (とも) at 00:39 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2011年11月22日

groupに関するエトセトラ

Linuxでユーザの情報を確認しようと思ったらidコマンド。
んじゃグループを確認しようと思ったらどうすんの?/etc/groupcatするしかないの?と思って調べてみたら、ちゃんと確認方法ありました。
getent group hoge

getentコマンド自体はグループを確認するためのコマンドではなく、管理系のデータベース(groupとかpasswdとかhostsとか)から値を引っ張ってくるコマンドなのですが、単なるcatと違うのはネットワーク上の名前解決にも対応している事。なのでLDAP上に登録されてるユーザやグループ、DNSに問い合わせるべきホスト情報とかもgetentで取得できるのです。これは便利!

例えばgoogle.comの名前解決ならこんな感じ。
getent hosts google.com

nslookupでも同じ事出来るのですが、この手の(管理系の)データに同じインターフェースでアクセスできるのは分かりやすくてGood。sudo使った権限管理とかもやりやすそうですし。

で、これを調べているうちに面白いコマンドに出会いました。それがnewgrpコマンド。自分自身のプライマリグループを変えるためのコマンドです。

例えばこんなユーザがいたとしましょう。
$ id
uid=700(hogehoge) gid=700(hoge) 所属グループ=700(hoge),701(fuga)

このユーザがファイルを作成したら、当然ですが所有者はhogehoge:hogeになります。
$ touch hogefile
$ ls -l hogefile
-rw-r--r-- 1 hogehoge hoge 0 11月 22 10:40 hogefile

ここで、fugaグループにログイン(プライマリグループの変更)します。
$ newgrp fuga
$ id
uid=700(hogehoge) gid=701(fuga) groups=700(hoge),701(fuga)

プライマリグループがfugaに変更されている事が分かります。
もちろんファイルを作成したら、
$ touch fugafile
$ ls -l fugafile
-rw-r--r-- 1 hogehoge fuga 0 Nov 22 10:42 fugafile

と、hogehoge:fugaが所有者になります。
権限を元に戻すには、exitすればOKです。(グループにログインしていたので)

さらに、自分の所属グループ以外であってもログインする事が可能です。
ここではpiyoというグループにログインしてみましょう。
$ newgrp piyo
パスワード:
$ id
uid=700(hogehoge) gid=702(piyo) groups=700(hoge),701(fuga),702(piyo)

自分が所属していないグループへのログインにはパスワードが必要になります。パスワードの設定されていないグループへのログインは出来ません。
では、この状態でファイルを作成してみましょう。
$ touch piyofile
$ ls -l piyofile
-rw-r--r-- 1 hogehoge piyo 0 Nov 22 10:46 piyofile

すごーく当たり前の話ですが、hogehoge:piyoを所有者とするファイルが作成されました。

さて、ここで「グループに対するパスワードって何ぞ?」という疑問が湧いてくるかと思うのですが、これもちゃんとコマンドが用意されていました。
gpasswd piyo

普通はグループへのパスワード設定なんてしないですよね…newgrp知らないと意味分かんないですし。

ここまでグループがユーザと同じように扱えるなら、suのグループ版だってあるんじゃね?と思って調べたらやっぱりありました。
その名もsgコマンド。(超そのまんま)
$ sg fuga -c "touch sgfugafile"
$ ls -l sgfugafile
-rw-r--r-- 1 hogehoge fuga 0 11月 22 10:59 sgfugafile

これはもう解説不要ですね。- をつけると環境の再初期化をするってのもsuと同じなのですが、環境を設定してる.profileなり.bashrcなりってユーザ単位で設定されますよね?グループの場合 - がどう効いてくるのか今ひとつピンと来ていないのですが…まぁいい事にします。

この辺きちんと意識して使うと、ついつい甘くなりがちな管理者権限の局所化ってのがよりうまい感じに出来るのかもしれません。ちょっと色々試してみたいなこれ。

以下のサイトを参考にさせていただきました。(ありがとうございます!)

Linux グループ一覧の確認と/etc/group ファイル
http://kazmax.zpp.jp/linux_beginner/etc_group.html

getentコマンドでユーザ情報を確認
OpenGroove : http://open-groove.net/linux-command/getent/

Studio ODIN - blog風小ネタ集 > newgrp コマンドでグループを変更する
http://www.odin.hyork.net/write/write0311.html
posted by 月水和尚 (とも) at 11:06 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2010年01月19日

パーティション分割されたパーティションのmount方法

タイトルが分かりにくくてすいません…。
(内容もお世辞にも分かりやすく書けてません…orz)

きっかけは昨日の記事。iSCSIターゲットサーバ上で論理ボリュームやパーティションを公開する領域として指定した場合、ターゲットサーバ上では1つのパーティションとして扱われる領域が、イニシエータ側ではディスクそのものだと認識され、その中にさらにパーティションが作成されることになります。

イニシエータ側はそれで何の問題もないんですが、ターゲットサーバ側で中身を見たいときに「パーティションの中にあるパーティション」のマウントってどうやるの?と考えたら頭の上にはてなマークが。

で、その解決方法。
実はとっても簡単で、offsetを指定してあげるだけでした。

まずはパーティション内のパーティション(分かりにくい言葉ですね^^;)のoffsetを調べるために、fdisk-lu オプションを付けて実行します。(以下の例では /dev/hdb1 がiSCSIで公開している領域となります)
fdisk -lu /dev/hdb1

こんな感じの結果が出てくると思います。
Disk /dev/hdb1: 1069 MB, 1069254144 bytes
255 heads, 63 sectors/track, 129 cylinders, total 2088387 sectors
Units = セクタ数 of 1 * 512 = 512 bytes

デバイス Boot Start End Blocks Id System
/dev/hdb1p1 63 1044224 522081 b W95 FAT32
/dev/hdb1p2 1044225 2072384 514080 b W95 FAT32
この Start とあるのが各パーティションのオフセット値になります。ただしここで表示されているのはセクタ単位。fdiskoffset値はバイト単位で指定する必要があるので、このStartの値にセクタサイズを掛け算した値を指定する必要があります。上記の例で第2パーティションを指定したいのであれば、
1044225(セクタ位置) x 512(セクタサイズ) = 534643200

を指定する必要があります。

実際のコマンドは以下のようになります。
mount -o loop,offset=534643200 /dev/hdb1 /mnt

これでターゲットサーバ側でもディスクの内容を参照出来るようになりますが、1つ留意点が。イニシエータ側での書き込みはターゲットサーバ側には即座に反映されません。一度umountしてmountし直すと反映されていましたが、どのタイミングで反映されるかは具体的には分かりません。逆のパターンでターゲットサーバ上での書き込み結果もイニシエータ側はディスクの切り離し/再接続をするまで反映されませんでした。

基本的にはターゲット側とイニシエータ側で同時に書き込みする(それも別の仕組みで)事は考慮されていないと思うので、常時両方からmountするのではなく、イニシエータ側が使用していないときにターゲット側で内容を確認するための手段くらいに考えておいた方が良さそうです。

以下のサイトを参考にさせていただきました。(感謝!)

壊れたかもしれないハードディスクからのデータサルベージ - 黒糖々日記/kokutoto diary
http://d.hatena.ne.jp/kokutoto/20080525/p1

HDDイメージファイルをマウントして使う方法 - adsaria mood
http://d.hatena.ne.jp/adsaria/20080724
posted by 月水和尚 (とも) at 17:41 | Comment(2) | TrackBack(0) | Linux(UNIX)全般

2009年08月18日

OpenVPN用のPKI環境構築

OpenVPNで公開鍵認証方式を使うための環境構築手順。
OpevVPN自体のインストールについては以前の記事を参照してください。

まずはインストール時に回収したeasy-rsaを適当なディレクトリ(ここでは /data とします)に展開してください。配下に重要なファイルが生成されるので、/tmpなど一時ディレクトリは避けてください。あと、セキュリティの観点からOpenVPNをインストールしたマシンとは別のマシンを使用することをお勧めします。
cd /data
tar xvf easy-rsa.tar

続いて設定ファイルである vars を修正します(ファイルは展開されたeasy-rsaディレクトリの中にあります)。変更するのは以下の5行です。以下は記述例で、実際にはご自身の環境に合わせて内容を記述してください。
export KEY_COUNTRY=JP
export KEY_PROVINCE=Tokyo
export KEY_CITY=Shinjuku
export KEY_ORG="Hoge Corp."
export KEY_EMAIL="hogemaster@hogera.com"

これで準備完了、まずは環境の初期化をします。
cd /data/easy-rsa
. vars
./clean-all

そしたらマスタCA証明書と鍵を作成します。
./build-ca

入力値を求められた際に、以下の値はご自身の環境に合わせて入力してください。それ以外はデフォルト値のままEnterを押してしまって大丈夫です。(もちろんデフォルト値以外の値を設定しても大丈夫です)
Common Name (eg, your name or your server's hostname) []:Hoge-corp_CA

次にDH(Diffie Hellman)パラメータの作成をします。こちらはコマンド1つです。
./build-dh

続いてTLS証明鍵を作成します。
この作業だけはeasy-rsaを展開したサーバではなく、OpenVPNが導入されているサーバで実行する必要がありますのでご注意下さい。実行するコマンドは以下のとおりです。
openvpn --genkey --secret ta.key

生成された鍵(ta.key)はOpenVPNのconfigディレクトリに移動しておきます。またそのコピーをeasy-rsaを展開したサーバの /data/easy-rsa/keys 配下に保存しておいてください。(保管場所はどこでもいいんですが、keysディレクトリが一番分かりやすくていいと思います)

続いてサーバ側で使用する証明書と鍵の作成をします。
./build-key-server vpnserver

引数である vpnserver はサーバ名なので、ご自身の環境に合わせて適宜変更してください。鍵の生成時に聞かれる内容はマスタCAの時と一緒です。そのため必ず値を入れなければならない項目も一緒になります。
Common Name (eg, your name or your server's hostname) []:vpnserver

マスタCAの場合と違い、入力終了後にまず
A challenge password []:

とパスワードの入力が求められます。サーバで使用する鍵にパスワードをかけてしまうと運用が面倒なので、何も入力せずにEnterキーを押してください。次に
An optional company name []:

と表示されますがこれも何も入力せずにEnterでOKです。すると
Sign the certificate? [y/n]:

と証明書にサインしていいかどうか聞かれます。入力内容に間違いがなければ y を入力してEnterを押してください。最後に
1 out of 1 certificate requests certified, commit? [y/n]

とコミット確認が表示されるので、こちらも y を入力してEnterを押してください。
Write out database with 1 new entries
Data Base Updated

と表示されれば鍵と証明書の生成は完了です。

最後にクライアント用の証明書と鍵を作成します。
./build-key hogeuser

作業内容はサーバ用の場合と全く同じです。

生成された鍵やら証明書やらをサーバとクライアントに送ります。
必要なファイルは以下のとおりです。

<サーバ側>
 ca.crt
 dh1024.pem
 vpnserver.key
 vpnserver.crt
 ta.key

<クライアント側>
 ca.crt
 hogeuser.key
 hogeuser.crt
 ta.key

ここまで書くと設定についても記述が必要ですね…。
それはまた、次のエントリと言うことで。
posted by 月水和尚 (とも) at 17:09 | Comment(2) | TrackBack(0) | Linux(UNIX)全般

2009年06月25日

GDMでもsynergyを使う

Synergy超便利だけど、最初に実機からログインしてGnome立ち上げないと使えないから結局クライアント側にもキーボードとマウスが必要なんだよね…と思ってたら、全然そんな事はありませんでした。ちゃんと本家にやり方書いてありましたね。(ちゃんと読め>自分)

Synergy Autostart Guide
http://synergy2.sourceforge.net/autostart.html

というわけで、手元のubuntu 9.04の環境で検証してみました。

まずはGDM起動時にsynergyが立ち上がるように、/etc/gdm/Init/Default のファイルの最後の方(最終行の exit 0 の直前ですね)に以下の記述を追加します。
/usr/bin/killall synergyc
sleep 0.1
/usr/bin/synergyc synergy-server-hostname

続いてGDM終了時(=Gnomeの起動が始まる直前)にsynergyが停止するように、/etc/gdm/PostLogin/Default のファイルの最後の方(最終行の exit 0 の直前ですね)に以下の記述を追加します。
/usr/bin/killall synergyc
sleep 0.1

最後にログイン後のGnome上でsynergyが使えるように、/etc/gdm/Xsession に以下の記述を…と書きたいところなのですが、私の環境ではうまく行きませんでした。プロセスは上がるんですが、サーバ側と通信してくれないんですよね。なのでGDMの設定としては何もせず、Gnomeの自動起動するアプリとしてsynergycを登録しています。(これで問題なく動きます)

これで非常に快適になりました。逆も出来るのかな…と調べてはみたのですが、Windows側をクライアントにすると画面ロックかけたときにsynergy経由でロック解除が出来ないらしく、ちょっと実用に耐えそうにありません。素直にWindowsを親にしときますか…。

sleepを0.1にするアイディアはこちらのサイトから拝借させていただきました。(ありがとうございます!)

Ubuntu/Install/Synergy - やましーウィキ - livedoor Wiki(ウィキ)
http://wiki.livedoor.jp/yamashitatakuya/d/Ubuntu/Install/Synergy

あと、全角/半角キーが効かない問題はこちらのサイトでパッチ適用版が配布されています。(便利に使わせていただいております…ありがとうございます!!)

Synergy - 斜に
http://naname.jp/index.php?Synergy
posted by 月水和尚 (とも) at 15:01 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2008年02月20日

make menuconfigのお供に

すんばらしい解説を見つけました。

Linuxカーネルの設定パラメータ:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20071025/285507/

make menuconfig必須なGentoo使いには非常にありがたいです!
(いつも手探り状態で設定していたので…)
posted by 月水和尚 (とも) at 17:50 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2008年01月25日

D01NXをLinuxで動かす(ログ無能力化パッチ公開)

いい加減タイトル変えました。(笑)

とりあえずLinuxではログ出力さえ無能力化してしまえばVMBドライバ1.10でいけるようなので、ものすごい強引にログを無能力化するパッチを置いておきます。

vmb-1.10-nolog.patch.gz

ものすごぉ〜い力業です。
いちSEとしてどうかと思いますが、クレームは受け付けません。(笑)

そのうちきちんと直します…。
posted by 月水和尚 (とも) at 17:47 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

トラックポイント使用時のマウスポインタの動きをを速くする

X Windowのマウスに関する設定って、何気にマウスポインタの移動速度を変更するためのパラメータがありません。あるのは『加速度』と『閾値』のみ。

マウスを使っている場合はこれでもあまり困らないのですが、トラックポイント(私の場合はInterLink MP-XP3210)だと動きが遅すぎてものすごいストレス!何とか出来ないものかと調べてみたら、以下のサイトに改善方法がありました。

Ubuntuでのトラックポイント最適化 - Vox
http://nkjm.vox.com/library/post/ubuntu%E3%81%A7%E3%81%AE%E3%83%88%E3%83%A9%E3%83%83%E3%82%AF%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E6%9C%80%E9%81%A9%E5%8C%96.html

私の環境ではserio4だったので、以下のコマンドで可能な限り速くします。
echo -n 255 > /sys/devices/platform/i8042/serio4/speed
echo -n 255 > /sys/devices/platform/i8042/serio4/sensitivity

これで快適に使えるようになりました。
nkjmさん、ありがとうございました!
posted by 月水和尚 (とも) at 16:44 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2008年01月07日

LVMパーティションの拡張

何回調べても忘れるので…。

1.対象LVのumount
umount /mnt/hoge

2.LVの拡張(ここでは512MB追加)
lvextend -L+512M /dev/hogevg/hogelv

3.ファイルシステムの拡張
e2fsck -f /dev/hogevg/hogelv
resize2fs /dev/hogevg/hogelv

4.mountし直す
mount /mnt/hoge

LVMってホント便利だぁ〜!

以下のサイトを参考にさせていただきました。(ありがとうございます!)

LVMパーティションの拡張
http://pc.watanet.com/lab/homesvr/linux/lvm_resize/lvm_resize.html
posted by 月水和尚 (とも) at 15:01 | Comment(2) | TrackBack(0) | Linux(UNIX)全般

2007年10月22日

LDAP認証失敗時にローカル認証を有効にする方法

ログイン認証にLDAPを使用している場合、デフォルトではLDAPサーバが落ちてしまう(というよりLDAPサーバにアクセスできない)と、LDAP上のユーザだけでなく、ローカルユーザですらログインできなくなってしまいます。

これは非常に困るので、LDAP認証に失敗した場合でもローカルユーザでログインできるように設定を変更。対象のファイルは /etc/pam.d/system-auth です。

<変更前>
account [default=bad success=ok user_unknown=ignore] /lib/security/$ISA/pam_ldap.so

<変更後>
account [default=bad success=ok user_unknown=ignore authinfo_unavail=ignore] /lib/security/$ISA/pam_ldap.so


元ネタはsambaのメーリングリストより。(感謝!)

[samba-jp:15181] Re: LDAP認証とSWATとsystem-auth
http://www.samba.gr.jp/ml/article/samba-jp/msg15164.html


−追記:2010/01/07−

/etc/ldap.conf に以下の設定もしないと駄目でした。
#bind_policy hard
 ↓(変更)
bind_policy soft

あと忘れがちなのが /etc/nsswitch.conf の設定。
passwd: files ldap
shadow: files ldap
group: files ldap

久々に設定したらハマりました…やでやで。
posted by 月水和尚 (とも) at 16:56 | Comment(2) | TrackBack(0) | Linux(UNIX)全般

2007年02月05日

samba+OpenLDAP環境でのUserminによるパスワード変更 リターンズ!

以前に基本設定日本語化については記事にしたのですが、改めて最新版のUsermin(1.250)で入れ直してみると、だいぶ見た目が変わっています。(公式ページの作りは以前の見た目のままなので私の環境だけでしょうか?) そんなわけで、まとめの記事もちょっと手直し。例によって前提は、

・samba+OpenLDAPの環境は整っている
・Userminではパスワード変更しか行わない


ということでお願いします。
(sambaをドメインコントローラにしていても大丈夫かは未確認です…)

まずはインストールと初期設定。
これは以前に書きましたので、そちらを参照してください。

Samba+OpenLDAP環境でUserminによるパスワード変更
http://bird-memo.seesaa.net/article/18740422.html

そして日本語化。
こちらも以前の記事をどうぞ。

Userminのもっと日本語化
http://bird-memo.seesaa.net/article/18981740.html

これでだいぶ満足なのですが、このままだとUserminにログインした直後の画面がシステム情報のようなページになってしまいます。(以前の1.200では全然違う画面構成だったのですがいつの間に変わってしまったのでしょうか?) パスワード変更にしか使用しない&あまり詳しくない人も使用することを考えると、何とかしたいところです。

ログイン直後の画面はどこで生成されているんだろう…と調べたところ、/usr/local/bin/usermin/blue-themeの配下にあるファイル達がそれのようです。

まずはログイン直後にパスワード変更画面を表示するよう、index.cgiを変更します。(ここから下は分かりやすくdiffの結果で書きます。1行が長いためFirefoxだとちょっと見にくいです…ゴメンナサイ)

/usr/local/bin/usermin/blue-theme/index.cgi
# diff index.cgi index.cgi.org
37c37
< <frame name="right" src="../changepass/index.cgi" noresize>
---
> <frame name="right" src="$goto" noresize>

左側のメニュー部分ももう少しすっきり表示するようにleft.cgiを変更します。『パスワード変更』のリンク部分にアイコンがなくて寂しいので、ついでにそれっぽいアイコンを表示するようにします。(パスワード変更以外にも機能を使う場合は全部同じアイコンが表示されてしまうのでご注意下さい)

/usr/local/bin/usermin/blue-theme/left.cgi
# diff left.cgi left.cgi.org
35c35
< print &text('left_login', $remote_user),"<br><br>\n";
---
> print &text('left_login', $remote_user),"<br>\n";
42c42
< print "<img src=../file/images/acl.gif><a target=right href=$minfo->{'dir'}/>  $minfo->{'desc'}</a><br>\n";
---
> print "<a target=right href=$minfo->{'dir'}/>$minfo->{'desc'}</a><br>\n";
60c60
< print "<br>\n";
---
> print "<div class='leftlink'><hr></div>\n";
63,64c63,64
< #print "<div class='linkwithicon'><img src=images/gohome.gif>\n";
< #print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=status'>$text{'left_home'}</a></div></div>\n";
---
> print "<div class='linkwithicon'><img src=images/gohome.gif>\n";
> print "<div class='aftericon'><a target=right href='right.cgi?open=system&open=status'>$text{'left_home'}</a></div></div>\n";
67,68c67,68
< #print "<div class='linkwithicon'><img src=images/oc.gif>\n";
< #print "<div class='aftericon'><a target=_new href='http://www.opencountry.com/webmin/'>$text{'left_oc'}</a></div></div>\n";
---
> print "<div class='linkwithicon'><img src=images/oc.gif>\n";
> print "<div class='aftericon'><a target=_new href='http://www.opencountry.com/webmin/'>$text{'left_oc'}</a></div></div>\n";

これで完成…かと思ったら、パスワード変更後の画面の左上に『モジュール インデックス』なる謎のリンクが。これを消すべく、以下のファイルを修正します。

/usr/local/bin/usermin/web-lib-funcs.pl
# diff web-lib-funcs.pl web-lib-funcs.pl.org
683,688c683,688
< # if (!$_[4] && !$tconfig{'nomoduleindex'}) {
< # local $idx = $module_info{'index_link'};
< # local $mi = $module_index_link || "/$module_name/$idx";
< # local $mt = $module_index_name || $text{'header_module'};
< # print "<a href=\"$gconfig{'webprefix'}$mi\">$mt</a><br>\n";
< # }
---
> if (!$_[4] && !$tconfig{'nomoduleindex'}) {
> local $idx = $module_info{'index_link'};
> local $mi = $module_index_link || "/$module_name/$idx";
> local $mt = $module_index_name || $text{'header_module'};
> print "<a href=\"$gconfig{'webprefix'}$mi\">$mt</a><br>\n";
> }

最後に、左上に表示される"Login:"という表示も日本語化してしまいましょう。

/usr/local/bin/usermin/blue-theme/langja_JP.euc (新規作成)
left_login=ログイン中 : $1

パスワード変更専用の日本語Userminの完成です!
posted by 月水和尚 (とも) at 12:09 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2007年01月19日

複数のUSBストレージを正しくmountする

USBストレージ(USB接続のHDDなど)はhotplugで認識された順にデバイス名が付与されてしまうので、普通にデバイス名で/etc/fstabを書いてしまうとちょっと都合がよくありません。そこでドライブにラベルを付けて管理します。

ラベルの付与は以下のコマンドで行います。
e2label デバイス名 ラベル名

例えば/dev/sdb1に"USB-HDD_1"とラベルを付けるなら、
e2label /dev/sdb1 USB-HDD_1

となります。
付与したラベルの確認は以下のコマンドで行います。
e2label デバイス名

/etc/fstabには以下のように記述を加えます。
(ファイルシステムはext3/mnt/usb1にマウントすると仮定)
LABEL=ラベル名    /mnt/usb1    ext3    defaults    0 0

ただマウントオプションがdefaultsでいいのかちょっと悩みどころ。
pamconsole,rw,suid,noexec,auto,nouser,async

あたりが妥当かな、と思っていますがいかがでしょうか。
(samba用のデータ領域なのでnoexecにしています)

−追記:2007/01/30−
pamconsoleを書くとそれ以前の設定がみんな無効になってしまうようなので、最初に書くように変更しました。

ネタ元はいつもお世話になっている@ITLinux Tipsです。

ボリュームラベルでUSBハードディスクの管理を効率化するには − @IT
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/925vollabel.html

mountのオプションについては以下のサイトを参考にさせていただきました。
(ありがとうございます!)

Linux/CentOSネットワーク実験/初めての自宅Linuxシステム管理
http://centos.it-cafe.jp/lsys07.html

mountのマニュアルはこちら。

Manpage of MOUNT
http://www.linux.or.jp/JM/html/util-linux/man8/mount.8.html
posted by 月水和尚 (とも) at 16:22 | Comment(5) | TrackBack(0) | Linux(UNIX)全般

2006年11月21日

ファイルからCRを除去する方法

WindowsなCR+LFのファイルをバイナリでLinuxに送ってしまった場合の対処法。
tr -d '\015' < 読み込みファイル > 出力ファイル

何でもコマンドで実現できちゃうLinuxって素敵だ…。

元ネタは以下のサイトより。(ありがとうございます!)

CRコードの除去
http://www.ksknet.net/linux/cr.html
posted by 月水和尚 (とも) at 18:36 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2006年11月06日

chrootして動かすプロセスのtimezone対策

タイトルだけでは何のことだか分からないですね…。

セキュリティ対策のために、特定のプロセス(主にネットワーク系のデーモン)の実行時にchrootして最低限のファイルシステムしか見せないようにするってのがあるかと思います。apacheとかbindとか。
私の場合はOpenVPNでそれを実施しているのですが、この方法だとsyslogに出力されるログの時刻がUTCになってしまい困っておりました。やっとこ解決法が分かったのでそのメモ。

といっても方法は至って簡単。例えばchrootする先が /hoge/root だとすると、
mkdir /hoge/root/etc
cp -p /etc/localtime /hoge/root/etc

とこれだけ。
ようするに/etc/localtimechroot後も参照可能になっていればいいみたいです。

原因が分からず非常に難儀していたのですが、何とか解決して一安心♪

残りの戯れ言も読む
posted by 月水和尚 (とも) at 18:13 | Comment(4) | TrackBack(0) | Linux(UNIX)全般

2006年06月08日

Userminのもっと日本語化

−2007/02/05:追記−
内容をちょびっとだけ修正しました。
また新たなまとめ記事をこちらに記述しております。


基本的な日本語化は前回ご紹介のUsermin導入(Usermin) - Fedoraで自宅サーバー構築に解説されているとおり、/etc/usermin/config
lang=ja_JP.euc

の記述を追加するだけで完了します。(localeがUTF8の場合でもこの指定でOKです)

…が、このままだと英語のままの部分も散見されます。もっと全面的に日本語化をする方法がないものか…とUserminの構成を見ていると、言語の設定らしきファイルを発見。こいつを修正してみる事にします。
(下記の日本語化は『Userminではパスワード変更しかしない』という前提で行っています。他のモジュールも使われる方は適宜ふさわしい日本語に変更してください)

ちなみに下記のファイルは全てja_JP.eucJPで書かれています。それ以外のlocaleで使用している方は、
export LANG=ja_JP.eucJP

とし、さらに使用しているターミナルの文字エンコードをeucJPに変更して作業を行ってください。(またはWindows上にファイルを持ってきてeucJP対応のエディタで修正し、元の場所にftpしてもOKですが、その際に改行コードを間違えないよう注意してください)

/usr/local/bin/usermin/ulang/ja_JP.euc
main_title=ユーザアカウントの管理
main_title2=Usermin
main_none=You do not have access to any Usermin modules.

category_mail=メール
category_usermin=Usermin
category_login=ユーザアカウントの管理
category_apps=アプリケーション

header_webmin=Usermin Index
header_config=初期設定

programname=Usermin

feedback_title=Usermin Feedback
feedback_desc=This form allows you to report bugs on make suggestions to the Usermin developers regarding any problems or missing features that you have found. When the Send button is clicked, the details entered into the form will be emailed to $1.

session_header=パスワード変更ページへのログイン
session_mesg=ユーザ名と現在のパスワードを入力して<br><strong>『ログイン』</strong>を押してください。

/usr/local/bin/usermin/changepass/lang/ja_JP.euc
index_title=パスワードの変更
index_desc1=このページではログイン用のパスワードが変更できます。
index_desc2=パスワードは8文字以上で、ユーザ名や辞書に載っている単語などは使用できません。
index_for=変更するユーザー
index_old=現在のパスワード
index_new1=新しいパスワード
index_new2=新しいパスワード(再入力)
index_change=変更する
index_return=パスワード変更のページ

change_err=パスワードの変更に失敗しました。
change_title=パスワードを変更しました
change_ok=$1 のパスワードが変更されました。以降のファイルサーバへのログインは全て新しいパスワードを使用してください。
change_enew1=新しいパスワードが入力されていません
change_enew2=新しいパスワードが一致していません
change_eold=古いパスワードが正しくありません
change_epam2=認証エラーです : $1
change_samba=ファイルサーバログイン用のパスワードも変更されました。
change_samba2=注意!ファイルサーバログイン用のパスワードは変更されていません : $1
change_ecmd=$1 失敗しました : $2
change_epam=The Authen::PAM perl module がインストールされていません。その代わりには外部のpasswd プログラム を使うように設定されていなければなりません。

だいぶ良い感じになりましたが、まだ『前のページに戻る』が『Previous Pageに戻る』となっています。こいつも変更する事にします。

/usr/local/bin/usermin/lang/ja_JP.euc (追加分のみ)
error_previous=前のページ
efilewrite=$1 への書き込みに失敗しました : $2
efileclose=$1 への書き込みに失敗しました(ファイルクローズ時) : $2
efileopen=$1 のオープン(書き込み用)に失敗しました : $2

うむ、満足。

あとはPAM自身がはき出すエラー(と表現していいのでしょうか?パスワードが短すぎるよ〜とか言うあれです)さえ日本語化出来れば完璧なんですが…。PAMがらみの設定を少し見直す必要がありそうです。
posted by 月水和尚 (とも) at 03:55 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2006年06月02日

Samba+OpenLDAP環境でUserminによるパスワード変更

−2007/02/05:追記−
現時点での最新版に対応するよう記事を修正しました。
また新たなまとめ記事をこちらに記述しております。


長年の課題がやっとクリアできました!
とりあえずSamba+OpenLDAPの環境は整っているものとして話を進めます。

まずはperl用のSSLモジュールであるNet::SSLeayを導入します。

Net::SSLeay.pm
http://symlabs.com/Offerings/Net_SSLeay/

現在の最新版は1.21です。バージョンが変わってなければ以下のコマンドで導入できます。(事前にopenssl-develの導入が必要です)
cd /tmp
wget http://symlabs.com/Offerings/Net_SSLeay/Net_SSLeay.pm-1.21.tar.gz
tar zxvf Net_SSLeay.pm-1.21.tar.gz
cd Net_SSLeay.pm-1.21
perl Makefile.PL
make install

続いてUserminの認証機能に必要なAuthen::PAMを導入します。

Authen::PAM - a perl interface to the PAM library | Nikolay Pelov's Home Site
http://nik.pelov.name/Authen-PAM/

こちらの最新版は0.17です。バージョンが変わってなければ以下のコマンドで導入できます。(事前にpam-develの導入が必要です)
cd /tmp
wget http://nik.pelov.name/files/Authen/Authen-PAM-0.17.tar.gz
tar zxvf Authen-PAM-0.17.tar.gz
cd Authen-PAM-0.17
perl Makefile.PL
make
make install

これで前提ソフトウェアは揃いました。いよいよUserminを導入します。

Usermin
http://www.webmin.com/index6.html

最新版は1.250です。バージョンが変わってなければ以下のコマンドで導入できます。
cd /tmp
wget http://jaist.dl.sourceforge.net/sourceforge/webadmin/usermin-1.250.tar.gz
cd /usr/local/bin
tar zxvf /tmp/usermin-1.200.tar.gz
mv usermin-1.200 usermin
cd usermin
./setup.sh

導入シェルでいくつか設定を聞かれますが、基本的にはデフォルトのままでかまいません。SSLの使用可否を聞かれた時(Use SSL (y/n):)だけは使用する(y)を入力してください。

実は私自身はVPNの内部でUserminを稼働させているためSSLは使用していません(SSLを使う場合証明書うんうんの警告が出て不便ですし)。その場合はAuthen::PAMは導入しなくても良いようです。またログファイルの出力先も/var/userminから/var/log/userminに変更しています。

導入はこれで完了です。ブラウザに以下のURLを入力してUserminにアクセスできることを確認します。
https://導入したホスト名またはIP:20000/

アクセスできない場合はiptablesの設定を確認してください。

そしたら各種設定を行います。まずはUserminで使用する機能の選択。今回はパスワードの変更のみに使用するので/etc/usermin/webmin.aclの内容を以下の通り変更します。
user: changepass

また今回の用途ではrootのパスワード変更は行う必要がない(むしろ行えない方がセキュリティ上好ましい)ので、rootユーザがUserminを使えないよう、/etc/usermin/configに以下の記述を追加します。
denyusers=root

続いてユーザ認証の機構を通常のパスワードファイルからAuthen::PAMモジュールに変更します。/etc/usermin/changepass/configの内容を以下のとおり変更します。
変更前:passwd_cmd=file
      
変更後:passwd_cmd=

そうしたらUserminPAM設定をします。/etc/pam.d/userminを以下のとおり作成(もし既に存在していた場合は変更)します。
#%PAM-1.0
auth required /lib/security/pam_stack.so service=system-auth
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth

基本的にはこれで完了なのですが、パスワード変更用のCGIモジュール(changepass.cgi)に一部不具合があるためこのままでは動きません。/usr/local/bin/usermin/changepass/changepass.cgiの内容を以下のとおり変更します。場所は関数"sub pam_change_func"の中(18行くらい下)です。
変更前:if ($msg =~ /old|current/i) {
      
変更後:if ($msg =~ /login/) {

この修正の内容は過去のバージョンと異なっています。過去バージョンの情報は多数見かけたのですが、現バージョンの情報にずっとたどり着けず宿題として残ってしまっていました…。

最後にUserminrunlevel3〜5の時に自動起動するよう、以下のコマンドを実行します。
cp -p /usr/local/bin/usermin/usermin-init /etc/rc.d/init.d/usermin
chown root:root /etc/rc.d/init.d/usermin
chkconfig --add usermin
chkconfig --level 345 usermin on

これで全ての準備が完了しました。userminを再起動します。
service usermin restart

先ほど稼働確認の時にもアクセスした、
https://導入したホスト名またはIP:20000/

にアクセスし、LDAP上のユーザでログインが出来ること、パスワードの変更が出来ることを確認してください。

参考にさせていただいたサイトは以下のとおりです。

@IT:LDAPによるパスワードの一元管理(1/3)
http://www.atmarkit.co.jp/flinux/rensai/root02/root02a.html

Usermin導入(Usermin) - Fedoraで自宅サーバー構築
http://fedorasrv.com/usermin.shtml

Windowsネットワーク用統合認証サーバー構築(OpenLDAP+Samba) - Fedoraで自宅サーバー構築
http://fedorasrv.com/openldap.shtml

日本Webminユーザ会 公式Webページ - フォーラム
http://jp.webmin.com/modules/newbb/viewtopic.php?viewmode=flat&topic_id=150&forum=1

有用な情報の数々に感謝いたします。
posted by 月水和尚 (とも) at 17:06 | Comment(2) | TrackBack(0) | Linux(UNIX)全般

2006年05月30日

MySQLの設定がうまくいかない時の対策

導入自体はaptを使ってさくっと終わるMySQLですが、いざ立ち上げてみると2台やって2台とも失敗。その時の解決方法。ちなみに環境はCentOS 4.3です。

その1:"/tmp"のアクセス権が正しくない

エラーログ(/var/log/mqsqld.log)には以下のようなエラーが出力されます。
060526 16:00:42 mysqld started
/usr/libexec/mysqld: Can't create/write to file '/tmp/ibFNQH8i' (Errcode: 13)
060526 16:00:42 InnoDB: Error: unable to create temporary file; errno: 13
060526 16:00:42 [ERROR] Can't init databases
060526 16:00:42 [ERROR] Aborting

060526 16:00:42 [Note] /usr/libexec/mysqld: Shutdown complete

060526 16:00:42 mysqld ended

/tmpの下の階層の名称はランダムです。

この場合はユーザmqsql/tmpに対してアクセス権がないのが原因です。
特に問題がなければ、全ユーザに対してアクセス権を開放してしまいましょう。
chmod 777 /tmp


その2:"/var/lib/mysql"配下のアクセス権が正しくない

エラーログ(/var/log/mqsqld.log)には以下のようなエラーが出力されます。
060529 16:11:53 mysqld started
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
060529 16:11:53 InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
060529 16:11:53 InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
060529 16:11:53 InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
060529 16:11:54 InnoDB: Started; log sequence number 0 0
060529 16:11:54 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)
060529 16:11:54 [ERROR] Fatal error: Can't open privilege tables: Can't find file: './mysql/host.frm' (errno: 13)
060529 16:11:54 mysqld ended


ポイントは下から2行目、3行目の'./mysql/host.frm'。これは初期設定スクリプトが作成する権限テーブル(すべての権限を管理するmysqlデータベース)関連のファイルのはず。該当ファイルの格納ディレクトリである/var/lib/mysql/mysqlを確認したところ、ファイルのオーナが全てroot:rootでした。(otherに対して何の権限もなかった)
別の環境で確認したところ/var/lib/mysql配下のファイルは全てオーナがmysql:mysqlだったので、権限を正しく設定し直します。
chown -R mysql:mysql /var/lib/mysql

その1は環境の問題なので分かりますが、その2が何で発生したのか不思議です。

MySQLは初めて触ったへなちょこさんなので、有識者様の助言、ツッコミお待ちしております。

参考資料はこちらです。

MySQL 4.1 リファレンスマニュアル :: 2.4 インストール後の設定とテスト
http://dev.mysql.com/doc/refman/4.1/ja/post-installation.html

MySQL 4.1 リファレンスマニュアル
http://dev.mysql.com/doc/refman/4.1/ja/index.html
posted by 月水和尚 (とも) at 09:49 | Comment(0) | TrackBack(0) | Linux(UNIX)全般

2006年05月22日

AIXで使えるLongFileNameなCDの作成方法

AIXJolietに対応していないのでWindowsから普通にCDを作成したのでは×。RockRidgeなCDを焼き焼きする必要があります。

用意するのはLinux環境。出来ればkernel-2.6の環境がよいです。ここではCentOS 4.3を使用します。

まずは事前にCDのデバイスファイル名を調べておきましょう。
/var/log/dmesgを見ると、
hdd: DVDRW DRW-2S81, ATAPI CD/DVD-ROM drive

とこんな感じにデバイスファイル名が表示されます。

続いてCDの焼き焼きコマンドであるcdrecordを導入。
apt-get install cdrecord

焼き焼きする対象のファイルを1つのディレクトリ配下に集めておきます。
(ここでは/tmp/burnとでもしておきます)

そうしたら対象となるファイルからCDのISOイメージを作成します。
mkisofs -o burn.iso -RLvJDlN /tmp/burn

設定しているオプションの詳細は以下のとおりです。
R:RockRidge拡張
L:ファイル名をピリオドで始めることを許す
v:詳細なログ出力
J:Joliet拡張
D:深いディレクトリの再配置を行わない
l:30文字のファイル名を許す
N:ISO9660ファイル名のバージョン番号を省略

DOS環境でも使いたい(=ISO9660完全準拠にしたい)のであれば"RJv"とかするのがいいみたいです。

作成したISOイメージが意図したとおりになっているか確認します。
mount -t iso9660 -r -o loop burn.iso /mnt
ls -l /mnt

問題ないようでしたらmountは外しておきましょう。
umount /mnt

いよいよCDを焼きます。まずはテスト書き込み。(念のため、ですね)
cdrecord -dummy -v speed=24 dev=/dev/hdd -dao burn.iso

speed(n倍速)とdev(デバイスファイル名)は環境に合わせて変更してください。-daoは"Disc At Once"のオプションです。

問題なくいけるようでしたらいよいよ本焼きに入ります。
cdrecord -v speed=24 dev=/dev/hdd -dao burn.iso

これで完成。

参考にさせていただいたサイトの多くではデバイスの確認のために"cdrecord -scanbus"というコマンドを実行しておりますが、これはkernel-2.6では必要ないようです。

参考にさせていただいたサイトはこちら。

Solaris/Linux/FreeBSDでCD-Rを焼こう@謎の処理系 SunOS 4.1.4
http://www15.big.or.jp/~yamamori/sun/sd-2000-06/

Linux,ISOイメージからのインストールCD作成(cdrecord)
http://park15.wakwak.com/~unixlife/linux/app-cdrecord.html

dW : Linux : LinuxでCDを焼く
http://www-06.ibm.com/jp/developerworks/linux/030627/j_l-cdburn.html

Manpage of CDRECORD
http://www.linux.or.jp/JM/html/cdrecord/man1/cdrecord.1.html



ついでに。(まさに覚え書きの覚え書きたるゆえん)
/etc/filesystemsにCDの定義がされていなかった場合は以下のコマンドでCDのmountが出来ます。
mount -oro cdrfs /dev/cd0 /cdrom
posted by 月水和尚 (とも) at 16:53 | Comment(9) | TrackBack(0) | Linux(UNIX)全般

2006年05月02日

Linuxでksh

以前にご紹介したVinekshですが、kshのバージョンが変わっていたので最新版対応のwgetコマンドを書いておきます。

wget --http-user "I accept www.opensource.org/licenses/cpl" --http-passwd . http://public.research.att.com/~gsf/download/tgz/ksh.2006-02-14.linux.i386.gz


あとの手順は一緒。
最初gunzipして出ていたファイルがtarでもrpmでもなかったので『何じゃこりゃ?』と思ってしまいました。
実体そのものが出てくるんでしたね。忘れてたなぁ。

ちなみに今回の導入先はCentOSです。
posted by 月水和尚 (とも) at 11:50 | Comment(0) | TrackBack(0) | Linux(UNIX)全般