はじめに
これは管理人がLinuxを導入しようとした時のインストールメモ記録です。後でまたインストールし直さなければならなくなったときに、細かいカスタマイズをメモしておくほうが都合がいいと思うので。他にもバグや仕様上の不満を回避するための方法などもリストアップしていくので、他の人がLinuxを導入する際の参考になれば幸いです。
- 2008年4月12日 改訂
Sambaを追加。 - 2007年6月25日 改訂
.vimrcを修正。.bashrcを追加。 - 2007年1月13日 改訂
XMMSの一部を加筆修正。Root-tailを追加。環境をFC5に。 - 2007年1月12日 改訂
Squidの一部を訂正。 - 2006年11月19日 改訂
Iptablesを訂正。 - 2006年11月05日 改訂
PPPoEを追加。 - 2006年10月24日 改訂
DHCPの一部を訂正。NTP、Squidを追加。 - 2006年10月4日 改訂
使用環境、NFSの一部を訂正。 - 2006年9月17日 改訂
Iptablesの記述を訂正。 - 2006年9月16日 改訂
NFS、NIS、AutoFSの記述を訂正。DHCPを追加。 - 2006年9月13日 改訂
NIS、AutoFSを追加。 - 2006年9月9日 改訂
Firefox、Iptables、XMMS、MPlayerの記述を改訂。NFSを追加。 - 2006年3月10日 改訂
Iptablesの記述を追加。 - 2005年12月13日 改訂
ページ全体を再記述。 - 2005年5月15日 公開
Linux 環境
環境に依存しているメモもあるので、デスクトップ用のLinuxの環境を晒しておきます。OSがFCだから頻繁に切り替わる可能性もあり。所詮メモレベルのものなので、参考にする際も自己責任でよろしくお願いします。
- OS:Fedora Core 6
- カーネル:Linux kernel 2.6
- マザーボード:GIGABYTE GA-8IRXP
- プロセッサ:Pentium 4 1.6A GHz
- メモリ:DDR-SDRAM 512MB×2
- グラフィック:ATI Radeon 9000 AGP
- サウンド:Creative SB Audigy Audio
- プリンタ:EPSON PM-870C
- スキャナ:EPSON GT-6700U
他、サーバOSとしてVine Linux 4を使用。自宅サーバは小型ホームサーバ、研究室サーバはDELL PowerEdge SC1420にインストールしてます。あまりハードウェア情報は役に立たないと思いますが、そういった環境にもインストールしているということの参考までに。
目次
- システム環境設定
- Firefox
- Thunderbird
- Vim
- Iptables
- XMMS
- MPlayer
- NFS
- NIS
- AutoFS
- DHCP
- NTP
- Squid
- PPPoE
- Root-tail
- Samba
システム環境設定
Linux初期インストール
パッケージはデスクトップ目的ならオールインストールで構わない。開発ツールなども全部ねじ込んでおく。ハードディスクのパーティションは自動設定後、領域を手動指定。環境関係で再設定が必要そうな部分はほとんどなし。自動判定でのインストールでほぼ満足。あと、更新用にyum関連の設定を施す。
### /etc/yum.conf [main] cachedir=/var/cache/yum keepcache=0 debuglevel=2 logfile=/var/log/yum.log pkgpolicy=newest distroverpkg=redhat-release tolerant=1 exactarch=1 obsoletes=1 gpgcheck=1 plugins=1 metadata_expire=1800 # Exclude Packages to Update exclude=scim* firefox* thunderbird* # PUT YOUR REPOS HERE OR IN separate files named file.repo # in /etc/yum.repos.d
### /etc/yum.repos.d/fedora-core.repo
[core]
name=Fedora Core $releasever - $basearch
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/$releasever/$basearch/os
http://fedora.redhat.com/releases/fedora-core-$releasever
ftp://ftp.riken.jp/Linux/fedora/core/$releasever/$basearch/os
ftp://ftp.kddlabs.co.jp/Linux/packages/fedora/core/$releasever/$basearch/os
#mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-core-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora file:///etc/pki/rpm-gpg/RPM-GPG-KEY
### /etc/yum.repos.d/fedora-updates.repo
[updates]
name=Fedora Core $releasever - $basearch - Updates
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/updates/$releasever/$basearch
http://ftp.riken.jp/Linux/fedora/core/updates/$releasever/$basearch
ftp://ftp.kddlabs.co.jp/Linux/packages/fedora/core/updates/$releasever/$basearch
http://ftp.jaist.ac.jp/pub/Linux/Fedora/core/updates/testing/$releasever/$basearch
#mirrorlist=http://fedora.redhat.com/download/mirrors/updates-released-fc$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora
### /etc/yum.repos.d/fedora-extras.repo
[extras]
name=Fedora Extras $releasever - $basearch
baseurl=http://download.fedora.redhat.com/pub/fedora/linux/extras/$releasever/$basearch/
http://mirrors.kernel.org/fedora/extras/$releasever/$basearch/
http://mirror.hiwaay.net/redhat/fedora/linux/extras/$releasever/$basearch/
http://www.mirrorservice.org/sites/download.fedora.redhat.com/pub/fedora/linux/extras/$releasever/$basearch/
#mirrorlist=http://fedora.redhat.com/download/mirrors/fedora-extras-$releasever
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-extras
ネットワークにつなげて更新パッケージをダウンロード&インストール。up2dateは一々ボタンを押す必要があるので、yumコマンドでオートアップデート。一度updateのオプションの後ろにさらに適当なパッケージ名を追加して、正常にアップデートできるか試した方がよい。オールインストールならば全てをアップデートするには時間がかかるので放置。
デスクトップ
Fedora CoreはデフォルトのままインストールするとデフォルトセッションをGNOMEで起動する。KDEで起動したい場合は /etc/sysconfig/desktop を以下のように記述。
DESKTOP="KDE" DISPLAYMANAGER="KDE"
実験的にUTF-8を導入していく。/etc/sysconfig/i18nは以下の通り。
LANG="ja_JP.UTF-8" SUPPORTED="ja_JP.UTF-8:ja_JP:ja" SYSFONT="latarcyrheb-sun16"
ファイルサーバのハードディスク等を自動でマウントするように/etc/fstabを変更する。マウント先ディレクトリは予め作っておくこと。すぐに使用するならmountコマンドを使う。
/etc/bashrcにはエイリアスや環境変数を記述する。/etc/profileにはシェルオプションを記述する。/boot/grub/grub.confで、ブートの設定を弄る。rhgbオプションを外したり、quietオプションをつけたり。
基本的な環境設定を施した.bashrcは以下の通り。
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Alias
alias mv='mv -iv'
alias rm='rm -iv'
alias cp='cp -iv'
alias h='history'
alias l='ls -Fal --color=auto'
alias L='ls -Fal --color=auto | less'
# Environment
export PAGER=lv
他、自作のシェルスクリプトを /usr/local/bin にコピーしてアクセス権を755に変更。デスクトップを適当な設定に変更。このあたりは好みで。タスクバーも自分仕様にカスタマイズする。
KDEコントロールセンターで、デスクトップの外観やアイコンテーマなどを変更する。~/.kde/Autostartディレクトリに自動起動させたいプログラムを記述したbashスクリプトをインストール。~/直下のドットファイルはアプリケーションの個人設定になっているので、設定が必要なら随時。
参考サイト
Firefox
Firefoxが英語Verであれば、ローカライズセンターで日本語化XPIをインストール。about:configとかuser.jsを使ってlocaleをja-JPに変更。ついでにブックマークファイルの肥大化を防ぐため、browser.chrome.faviconsとbrowser.chrome.site_iconsの値をfalseに変更しておく。Windowsとデータを共有して使用する。主な共有データは、ブックマーク、bbs2chのログデータ。共有するデータは予め共有ディスクに入れておく。WindowsのFirefoxの設定変更はuser.jsで行う。bbs2chreaderのログもuser.jsで変更できるので、user.jsで統一。
user_pref("browser.bookmarks.file", "ブックマークの共有パス");
user_pref("browser.chrome.favicons", false);
user_pref("browser.chrome.site_icons", false);
user_pref("browser.download.defaultFolder", "ダウンロードディレクトリの共有パス");
user_pref("browser.download.dir", "ダウンロードディレクトリの共有パス");
user_pref("browser.sessionhistory.max_viewers", "10");
user_pref("fls.bbs2chreader.appoint_data_dir", true);
user_pref("fls.bbs2chreader.board_auto_update", true);
user_pref("fls.bbs2chreader.data_dir", "bbs2chreaderの共有パス");
user_pref("fls.bbs2chreader.thread_skin_uri", "skinの共有パス");
user_pref("general.useragent.locale", "ja-JP");
profile.iniを編集してプロファイルごと共有する方法は失敗。エクステンションを使用していると問題が発生するので、個別にデータを共有した方がよさげ。エクステンションを使わないなら問題ないけど。
Adobe ReaderやJava Runtime Environment等のプラグインを導入する。プラグイン導入ディレクトリは、/usr/lib/firefox/plugins/もしくは~/.mozilla/plugins/等。プラグインディレクトリに、*.soのファイルをインストールする。Adobe Readerならnppdf.so、Javaならlibjavaplugin_oji.so。アプリケーションをインストール後、該当ファイルにシンボリックリンクを貼っても良い。
他、Flash用プラグイン(libflashplayer.so)、非公式だがMPlayer用プラグイン(mplayerplug-in-*.so)にてReal Player、Windows Media Player等のメディアファイルに一部対応できる。about:pluginsで、導入済みプラグインを確認できる。Firefoxの再起動なしで、ページ更新すれば最新の状態を確認できる。
Thunderbird
Thunderbirdも英語Verなら、Firefoxと同様に日本語化XPIをインストール。Thunderbirdの場合は一度ローカルに保存してからインストールする必要がある。Firefoxと同じくuser.jsを使ってlocaleをja-JPに変更。
user_pref("general.useragent.locale", "ja-JP");
共有ディレクトリにMailを置いてメールデータを共有。user.jsには共有ディレクトリに指定する箇所を幾つか設定する。
user_pref("general.useragent.locale", "ja-JP");
user_pref("mailnews.hints_and_tips.url", "http://www.mozilla-japan.org/support/thunderbird/");
user_pref("ldap_2.servers.history.filename", "history.mab");
user_pref("ldap_2.servers.pab.filename", "abook.mab");
user_pref("ldap_2.servers.user_directory_1.filename", "abook-1.mab");
user_pref("ldap_2.servers.user_directory_2.filename", "abook-2.mab");
user_pref("mail.root.none", "(Mailディレクトリの絶対パス)");
user_pref("mail.root.pop3", "(Mailディレクトリの絶対パス)");
user_pref("mail.server.server1.directory", "Mailディレクトリ内のアカウント用ディレクトリの絶対パス");
user_pref("mail.server.server2.directory", "Mailディレクトリ内のアカウント用ディレクトリの絶対パス");
(以下、アカウントの数だけ続く)
user_pref("browser.download.defaultFolder", "ダウンロードディレクトリの共有パス");
user_pref("browser.download.dir", "ダウンロードディレクトリの共有パス");
user_pref("mail.compose.attach.dir", "ダウンロードディレクトリの共有パス");
user_pref("messenger.save.dir", "ダウンロードディレクトリの共有パス");
ただし、必ずしも番号は1から連続的に続いているわけではない。その辺りはpref.jsを見つつ弄るべし。browser.download.defaultFolder、browser.download.dir、mail.compose.attach.dir、messenger.save.dirなども絶対パスで共有ディレクトリに指定しておいたほうがいいかもしれない。これらは添付ファイルなどを保存する初期ディレクトリになる。pref.jsの[ProfD]が含まれる行を削除する。これはpref.jsからの相対パスになっているが、Thunderbird起動時に自動で生成される。user.jsとpref.jsをこのように分けておくと、pref.jsはそのままコピー、user.jsはWindowsとLinuxで適宜絶対パスの書き方を変更するだけでメールボックスを共有できる。とりあえず同じOSのバックアップからの復帰であれば、プロファイルフォルダ直下のファイルをまるごと移動しても問題は発生せず。
Vim
viと併せて設定ファイル編集の時などに重宝しているエディタ。GUI版のgVimは常用エディタとして使用。なければvim-X11などのRPMをインストール。FC4のインストールCDにも入っているはず。vimの設定は、/etc/vimrc、~/.vimrcなどを弄る。以下、独自に追記している内容。
" User original settings
set backupdir=~/tmp
set noautoindent
set number
set nowrap
set listchars=tab:> ,trail:-,eol:<
set list
set clipboard+=unnamed
set guioptions+=b
highlight ZenkakuSpace guibg=grey
match ZenkakuSpace / /
augroup BinaryXXD
autocmd!
autocmd BufReadPre *.bin let &binary =1
autocmd BufReadPost * if &binary | silent %!xxd -g 1
autocmd BufReadPost * set ft=xxd | endif
autocmd BufWritePre * if &binary | %!xxd -r | endif
autocmd BufWritePost * if &binary | silent %!xxd -g 1
autocmd BufWritePost * set nomod | endif
augroup END
" 文字コードの自動認識
if &encoding !=# 'utf-8'
set encoding=japan
set fileencoding=japan
endif
if has('iconv')
let s:enc_euc = 'euc-jp'
let s:enc_jis = 'iso-2022-jp'
" iconvがeucJP-msに対応しているかをチェック
if iconv("x87x64x87x6a", 'cp932', 'eucjp-ms') ==# "xadxc5xadxcb"
let s:enc_euc = 'eucjp-ms'
let s:enc_jis = 'iso-2022-jp-3'
" iconvがJISX0213に対応しているかをチェック
elseif iconv("x87x64x87x6a", 'cp932', 'euc-jisx0213') ==# "xadxc5xadxcb"
let s:enc_euc = 'euc-jisx0213'
let s:enc_jis = 'iso-2022-jp-3'
endif
" fileencodingsを構築
if &encoding ==# 'utf-8'
let s:fileencodings_default = &fileencodings
let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
let &fileencodings = &fileencodings .','. s:fileencodings_default
unlet s:fileencodings_default
else
let &fileencodings = &fileencodings .','. s:enc_jis
set fileencodings+=utf-8,ucs-2le,ucs-2
if &encoding =~# '^(euc-jp|euc-jisx0213|eucjp-ms)$'
set fileencodings+=cp932
set fileencodings-=euc-jp
set fileencodings-=euc-jisx0213
set fileencodings-=eucjp-ms
let &encoding = s:enc_euc
let &fileencoding = s:enc_euc
else
let &fileencodings = &fileencodings .','. s:enc_euc
endif
endif
" 定数を処分
unlet s:enc_euc
unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
function! AU_ReCheck_FENC()
if &fileencoding =~# 'iso-2022-jp' && search("[^x01-x7e]", 'n') == 0
let &fileencoding=&encoding
endif
endfunction
autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
set ambiwidth=double
endif
参考サイト
Iptables
概要
Linuxカーネル2.4以降の標準ファイアウォール。市販のファイアウォールなどよりもかなり細かく設定することができる。その分、中身を理解するのは面倒。セキュリティ関係の設定は他人に迷惑をかけることにもなりかねないので、自分で責任を負える人にのみ推奨。ただ、初期設定のIptablesはファイアウォールとしての機能を果たしていないということも忘れてはいけない。面倒なことはイヤだという人は、素直に市販ルータの簡易ファイアウォールに頼っていた方が幾分マシ。
Iptablesの設定は応用を利かせやすくするために、シェルスクリプトに記述して逐一設定するのがいい。以下、Iptablesの設定の流れ。
- 初期化と初期設定。(Initialized and Default Rules)
- フィルタリングの基本設定。(Basic Rules)
- 各種攻撃の防御設定。(IP Spoofing/Ping of Death/SYN Flood/Port Scan)
- フィルタリングの拡張設定。(Each Protocol Rules)
- ルールの保存。(Saved Rules)
NICが一枚の場合、IP Spoofingでは自分のLANに対して拒否しないようにする。LAN上の他ホストと通信できなくなる可能性がある。実際に設定を適用するには、ルート権限でこのシェルスクリプトを実行するだけでよい。(iptablesを再起動する必要はない。下記コマンドは次節で説明するスクリプト実行ファイル)
# /root/bin/iptables-rule
iptablesをsaveオプションで実行すると、現在の設定が保存される。iptablesを再起動して、実際に設定の変更が保存されているかどうかを確認する。確認方法は以下のコマンドを実行する。
# iptables -nvL
簡易フィルタリング設定
LAN内クライアントの場合の簡易セキュリティポリシー。
- 外部からのパケットは基本的に破棄する。(指定許可方式)
- 内部から出ていくパケットは基本的に許可する。(指定拒否方式)
- NICは二つもないので、転送パケットは全て破棄する。
- localhost(自分自身)からのアクセスは無制限に許可する。
- 接続が確立したパケットについてはアクセスを許可する。
Iptablesはリストの上から順に評価し、条件にマッチした場合にターゲット(ACCEPT・DROP等)を実行する。よって記述の順序にも意味があるということを意識しておく。外部に接続するインターフェースは全てeth0。NIC二枚差し等の場合はeth1等々、インターフェースの設定は変更しなければならないかもしれない。使用インターフェースはifconfigで確認。以下、スクリプトが記述されたiptables-client-ruleの内容。実行可能ファイルにしておき、/usr/local/sbinや/root/bin以下にインストールする。
#!/bin/sh # Values Setting LO_IP="127.0.0.1" LO_IF="lo" LAN_IF="eth0" # Initialized and Default Rules iptables -F iptables -t nat -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Basic Rules iptables -A INPUT -p all -i $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT iptables -A OUTPUT -p all -o $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT iptables -A INPUT -p all -i $LAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p all -o $LAN_IF -j ACCEPT # Each Protocol Rules # Saved Rules service iptables save
サーバ設定
NIC二枚差しでLinuxをルータ化して使い、LAN内クライアントにサーバを公開する場合の設定。WAN側には公開しない。使用インターフェースはeth0とeth1とする。ファイアウォールの設定の他、LinuxサーバでIPフォワードを許可する設定を行わなければならない。以下のコマンドを実行。
echo 1 > /proc/sys/net/ipv4/ip_forward
または/etc/sysctl.confを設定することで、OSブート時に自動で設定することができる。
# /etc/sysctl.conf net.ipv4.ip_forward = 1 net.ipv4.conf.default.rp_filter = 1 # IP Spoofingの防御 net.ipv4.tcp_syncookies = 1 # SYN Flood攻撃への対処
/etc/sysctl.confは各防御設定も組み込める。必要に応じて設定を有効化する。
実際の設定例。外部ネットワークはeth0側、内部ネットワークはeth1側とする。
#!/bin/sh # Values Setting LO_IP="127.0.0.1" WAN_IP="201.xxx.xxx.xxx" LAN_IP="192.168.0.1" LAN_NET="192.168.0.0/24" LO_IF="lo" WAN_IF="eth0" LAN_IF="eth1" LAN_BCAST="192.168.0.255" # Initialized and Default Rules iptables -F iptables -t nat -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP # Basic Rules iptables -A INPUT -p all -i $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT iptables -A OUTPUT -p all -o $LO_IF -s $LO_IP -d $LO_IP -j ACCEPT iptables -A INPUT -p all -i $WAN_IF -d $WAN_IP -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -p all -o $WAN_IF -s $WAN_IP -j ACCEPT iptables -A INPUT -p all -i $LAN_IF -d $LAN_IP -s $LAN_NET -j ACCEPT iptables -A OUTPUT -p all -o $LAN_IF -s $LAN_IP -j ACCEPT iptables -A INPUT -p all -i $LAN_IF -d $LAN_BCAST -j ACCEPT # IP Masquerade and Transport iptables -t nat -A POSTROUTING -o $WAN_IF -s $LAN_NET -j MASQUERADE iptables -A FORWARD -p all -o $WAN_IF -i $LAN_IF -s $LAN_NET -j ACCEPT iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT # IP Spoofing iptables -N TCP-DROP iptables -A TCP-DROP -p tcp ! --syn -m state --state NEW -j LOG --log-level info --log-prefix "INVALID TCP Packet: " iptables -A TCP-DROP -p tcp ! --syn -m state --state NEW -j DROP iptables -A TCP-DROP -i $WAN_IF -s 0.0.0.0/8 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 10.0.0.0/8 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 127.0.0.0/8 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 169.254.0.0/16 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 172.16.0.0/12 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 192.0.2.0/24 -j DROP #iptables -A TCP-DROP -i $WAN_IF -s 192.168.0.0/16 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 224.0.0.0/4 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 240.0.0.0/5 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 248.0.0.0/5 -j DROP iptables -A TCP-DROP -i $WAN_IF -s 255.255.255.255/32 -j DROP # Ping of Death iptables -N PING-OF-DEATH iptables -A PING-OF-DEATH -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A PING-OF-DEATH -i $WAN_IF -j LOG --log-level info --log-prefix "PING-OF-DEATH: " iptables -A PING-OF-DEATH -j DROP iptables -A INPUT -p icmp --icmp-type echo-request -j PING-OF-DEATH iptables -A FORWARD -p icmp --icmp-type echo-request -j PING-OF-DEATH # SYN Flood iptables -N SYN-FLOOD iptables -A SYN-FLOOD -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A SYN-FLOOD -i $WAN_IF -j LOG --log-level info --log-prefix "SYN-FLOOD: " iptables -A SYN-FLOOD -j DROP iptables -A INPUT -p tcp --syn -j SYN-FLOOD iptables -A FORWARD -p tcp --syn -j SYN-FLOOD # Port Scan iptables -N PORT-SCAN iptables -A PORT-SCAN -m limit --limit 1/s --limit-burst 4 -j RETURN iptables -A PORT-SCAN -i $WAN_IF -j LOG --log-level info --log-prefix "PORT-SCAN: " iptables -A PORT-SCAN -j DROP iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -j PORT-SCAN # Each Protocol Rules # Saved Rules service iptables save
LAN内のクライアントに対しては、無制限に接続を許可するというあまり厳しくないセキュリティポリシー。これが問題ある場合、無制限許可のルールをコメントアウトし、各パケット・ホストのフィルタリングルールを作成する必要がある。
インターネットに直接接続するホストでスタンドアロンで動く場合は、IPマスカレード・パケット転送辺りの設定をコメントアウトすれば良い。
参考サイト
XMMS
Fedoraでは、ライセンス問題が解決していないソフトは収録しない方針。ゆえにxmmsの初期インストール状態ではMP3などの楽曲データを再生することができない。Googleでxmms-mp3を検索し、rpmをダウンロード・インストールすればOK。xmms RPM packages for Red Hat/FedoraやIndex of /pub/freshrpms/redhat/9/xmms-mp3など。
日本語を表示するにはxmmsの日本語化パッチが必要。yumでインストールするxmmsでは表示不可。なので、ソースをrpmでまとめて管理する。
xmms-enhancedのsource archiveから最新版のソースtarボールをダウンロード。/usr/src/redhat/SOURCES等のrpm作成ディレクトリのソースに置く。このtarボールを解凍し、specファイルを取り出す。中身を幾つか修正してrpmに丸める。以下、修正したソースと元との差分表示。
2c2
< %define version 1.2.10j_20060524
---
> %define version 1.2.10j
44c44
< Source: %{name}-%{version}.tar.gz
---
> Source0: %{name}-%{version}.tar.bz2
142c142
< mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/mini
---
> mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/pixmaps
146c146
< ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/mini/xmms_mini.xpm
---
> ${RPM_BUILD_ROOT}%{_datadir}/pixmaps/xmms_mini.xpm
149c149
< mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/wmconfig
---
> mkdir -p ${RPM_BUILD_ROOT}%{_datadir}/applications/wmconfig
151c151
< ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/wmconfig/xmms
---
> ${RPM_BUILD_ROOT}%{_datadir}/applications/wmconfig/xmms
154d153
< mkdir -p ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/applnk/Multimedia/
156c155
< ${RPM_BUILD_ROOT}%{_sysconfdir}/X11/applnk/Multimedia/
---
> ${RPM_BUILD_ROOT}%{_datadir}/applications/xmms.desktop
167,168c166,167
< %{_sysconfdir}/X11/wmconfig/xmms
< %{_sysconfdir}/X11/applnk/Multimedia/xmms.desktop
---
> %{_datadir}/applications/wmconfig/xmms
> %{_datadir}/applications/xmms.desktop
187c186
< %{_datadir}/pixmaps/mini/xmms_mini.xpm
---
> %{_datadir}/pixmaps/xmms_mini.xpm
さらにxmms/xmms.desktopも修正する。
22a23 > Categories=Application;AudioVideo;Audio;Player;
このxmms.desktopによってアプリケーション/マルチメディア項目にxmmsが追加される。修正後はbzip2で圧縮しておく。tarボールの名前も変更する。
最後にバージョン等々も間違っていないか確認しておく。修正したspecファイルを/usr/src/redhat/SPECS等にコピーし、rpmbuildでrpmに丸める。最終的なsrc.rpmとFC5環境でコンパイルしたrpmを置いておく。
インストールが完了したら、オプションで日本語表示の設定を行う。入出力プラグインで「Mpeg Layer 1/2/3 プレイヤー」という入力プラグインの設定のうち、タイトルタブの設定を修正。読み込み時に適当な文字コードからロケール推測にしておく。あとはフォント設定で適当な2バイト文字フォントを設定しておく。
参考サイト
MPlayer
Fedoraにデフォルトでは入っていない。RPMを適宜ダウンロードしてくる。基本的にmplayer、mplayer-gui、mplayer-skin、mplayer-codecsなどがあればOK。よくあるエラーはコーデックが足りないというもの。/usr/lib/codecs等々のコーデックディレクトリに適宜追加すれば解決する。コーデックがあるのに読み込めない場合、コーデック初期化ができていないことが多い。再起動すれば正常に読み込めるようになる時もある。
参考サイト
NFS
概要
NFSはNetwork File Systemの略。NFSサーバにログインの必要なくサーバ上のディスクを扱えるようになる。ユーザはNFSで提供されるファイルシステムの特性やそもそもディスクがサーバにある事を意識することなく、ローカルのディスクのように扱う事が出来る。NFSは便利だがシステム的には時代遅れの感がある。セキュリティ性能に乏しく、Iptables等と組み合わせて使わなければならない。NFSサーバの提供は簡単だが、セキュリティと利便性を天秤にかけてシステムを構築する必要がある。ともあれ、それでもまだまだネットワークのファイルを扱うときにUNIX系では主流として用いられるシステムでもある。
NFSサーバの設定
まずはNFSサーバをインストールする。FedoraやVineなどではnfs-utilsというパッケージで提供されている。これをインストールする。設定を行うファイルは/etc/exports、/etc/hosts.allow、/etc/hosts.denyの三つ。後者二つはサービス提供には関係ないが、セキュリティ上設定しておくのが無難である。/etc/exportsにはNFSクライアントに対して接続を認めるディレクトリ、その接続を認めるNFSクライアントのIPとオプションを指定する。例は以下の通り。
/usr/local 192.168.0.1(ro) 192.168.0.2(ro) /home 192.168.0.0/255.255.255.0(rw)
接続を認めるNFSクライアントの指定は、IPアドレスもしくはネットワークで指定する。指定後の括弧内にオプションを記述するが、このときオプションの前にスペースを挿入してはいけない。記述の意味が変わってしまう。エクスポート時の注意点としては、あるディレクトリをエクスポート後にその子ディレクトリをエクスポートすることはできないこと、FAT等のマルチユーザを考慮していないファイルシステムはエクスポートしないようにすべきであること等。詳細は参考サイトを参照のこと。
/etc/exportsはNFSサーバが起動するときに読み込まれる。既に起動しているならば、次のコマンドで再読込させる。
# exportfs -ra
/etc/hosts.allow、/etc/hosts.denyはNFSで使用するポートへのアクセス可否を決定する。セキュリティを考慮するならば設定しておくべきである。記述は以下の通り。
# /etc/hosts.allow portmap: 192.168.0.0/255.255.255.0 lockd: 192.168.0.0/255.255.255.0 rquotad: 192.168.0.0/255.255.255.0 mountd: 192.168.0.0/255.255.255.0 statd: 192.168.0.0/255.255.255.0 # /etc/hosts.deny portmap: ALL lockd: ALL rquotad: ALL mountd: ALL statd: ALL
サーバの動作は、/etc/hosts.allowで一致すれば許可、次に/etc/hosts.denyで一致すれば拒否となる。/etc/hosts.denyにはALL:ALLと記述する事も出来るが、他の新しいサービスを開始したときに拒否されてしまうかもしれない。NFSサーバの基本設定は以上の通り。NFSサーバを起動すればサービスが開始される。NFSサーバ上で次のコマンドを入力してサービスを確認。
# rpcinfo -p
このとき、最低限portmapper・nfs・mountdが起動している必要がある。なければデーモンを再起動しなければならない。ここで表示されるポートにアクセスすればNFSクライアントから接続できる。デフォルトでportmapperは111、nfsは2049に固定されているが、mountd、lockd、rquotad、statdのポートは動的に設定される。このポートを固定するには、Redhat系では/etc/sysconfig/nfsに次のように記述する。
STATD_PORT=32765 STATD_OUTGOING_PORT=32766 MOUNTD_PORT=32767 LOCKD_UDPPORT=32768 LOCKD_TCPPORT=32768 RQUOTAD=no
上記はrquotadを使用していない場合。rquotadを使用する場合や、これらのrc変数を使えない場合は以下のコマンドを実行する。
# statd -p 32765 -o 32766 # mountd -p 32767 # rquotad -p 32769
lockdはカーネルモジュールとして使用するので、オプションを直接渡す事は出来ない。この場合、/etc/modules.confに以下のように記述する。
# /etc/modules.conf options lockd nlm_udpport=32768 nlm_tcpport=32768
lockdをモジュールとして扱わず、カーネルに組み込んである場合はカーネルのブート時にパラメータを渡すようにする。
vmlinuz 3 root=/dev/hda1 lockd.udpport=32768 lockd.tcpport=32768
Redhat系でrquotadを使用しない場合は/etc/sysconfig/nfsに記述するだけなので非常に簡潔。通常、rquotadは使用しなくてもNFSサービスは正常に動作する。ポートが固定されれば、Iptablesでパケットフィルタリングを設定する事が出来る。上記のようなポート固定の設定であれば、以下のように記述する。
iptables -A INPUT -s $lan_net -p tcp --dport 32765:32768 -j ACCEPT iptables -A INPUT -s $lan_net -p udp --dport 32765:32768 -j ACCEPT iptables -A INPUT -s $lan_net -p tcp --dport nfs -j ACCEPT iptables -A INPUT -s $lan_net -p udp --dport nfs -j ACCEPT iptables -A INPUT -s $lan_net -p tcp --dport sunrpc -j ACCEPT iptables -A INPUT -s $lan_net -p udp --dport sunrpc -j ACCEPT
$lan_netはIptablesでの設定中にある変数で、LAN内のネットワークを指す。nfsはポート2049、sunrpcはポート111を指す。/etc/servicesに記述されている通りに書く。
NFSクライアントの設定
まずmountプログラムが十分新しいこと(NFSv3を使うなら2.10m以降が必要)を確認し、クライアントマシンがNFSマウントをサポートしているかどうかを確認する。カーネル2.2以降なら/proc/filesystemsを見てみる。NFSクライアントにするにはポートマッパの起動、NFSでファイルロックを使うならrpc.statd、rpc.lockdがサーバとクライアントで起動している必要がある。現在のディストリビューションはほとんどがブート時に自動で起動する。サービスが起動したら、通常のマウントと同じようにファイルシステムをマウントできるようになる。
# mount -t nfs 192.168.0.1:/home /home
/etc/hosts等で名前解決されていれば、サーバのIPアドレスにはホスト名を使うことも可能。自動起動するには/etc/fstabに記述する。
192.168.0.1:/usr/local /usr/local nfs auto,ro,hard,intr 0 0 192.168.0.1:/home /home nfs auto,rw,hard,intr 0 0
オプションの指定で、autoがあればクライアント起動時に自動でマウントする。その際、_netdevを指定すればネットワークが起動されるまでマウントされない。ファイルの破壊を防ぐには、hardとintrオプションを指定しておいた方が無難である。その他のオプションは環境によって設定を変えること。
NFSマウントの最適化
NFSマウントが遅い、NFSマウントしているファイルシステムからプログラムを起動するのが遅い等々、NFSの性能に不満があれば自分のネットワークに合わせて最適化する必要がある。とくに非同期書き込み、パケットサイズの指定、NFSロックを使用しないなどの設定は、ネットワークの状況によっては劇的に速くなる場合がある。ただし、その場合ファイルが壊れてしまう可能性も孕んでいるので、クリティカルなファイルシステムは同期、ロックを用い、速度優先のファイルシステムは非同期、ロック無しにするという柔軟な対応が考えられる。
NFSサーバ側では、書き込みを同期させるか非同期にするかを決定できる。/etc/exportsのオプションに設定する。
/usr/local 192.168.0.0/255.255.255.0(ro,async) /home 192.168.0.0/255.255.255.0(rw.async) /imagesa 192.168.0.0/255.255.255.0(rw,sync)
/usr/localと/homeは非同期書き込みで、/imagesaは同期書き込みでNFSマウントさせる。/imagesaは重要なファイルが保存されているので、速度よりもファイルシステムの頑丈さを優先している。
NFSクライアント側では、パケットサイズの指定やロックの使用を設定できる。/etc/fstabのオプションに指定する。
192.168.0.1:/usr/local /usr/local nfs auto,ro,hard,intr,nolock,rsize=8192,wsize=8192 0 0 192.168.0.1:/home /home nfs auto,rw,hard,intr,nolock,rsize=8192,wsize=8192 0 0 192.168.0.1:/imagesa /imagesa nfs auto,rw,hard,intr,nosuid,rsize=8192,wsize=8192 0 0
パケットサイズの最適な設定方法は、参考サイトのNFSの最適化に詳しい。他、NFSオプションは多様な設定を行える。自分の使用している環境とセキュリティを考慮して設定する。
参考サイト
NIS
概要
Network Information Serviceのこと。Yellow Pages(=YP)とも呼ばれるが、これは英国にあるBritish Telecom社の登録商標でもあるため、NISと呼ばれるようになる。ネットワーク上で必要な情報を共有できるサービス。具体的にはpasswd、group、hosts、shadow等のユーザ/グループ情報や、オートマウンタに必要なauto.*等を共有できる。これにより、全てのNISクライアントで同一のログイン情報を扱え、一元的に管理できる。NISを拡張したNIS+というサービスも存在するが、NIS+はサービスの設定が煩雑かつ管理が困難であり、LinuxのNIS+ではバグが多く開発がストップしているので、大学の研究室などの中小規模ネットワークではNISで十分。ここではNISマスターサーバ、NISクライアントの設定のみを扱う。NISスレーブサーバは設置しない。管理が必要な場合は参考サイトを参照のこと。
NISマスターサーバ設定
GNU C Library 2.x(libc6)を用いたNISを扱う。libc5以下では扱いが面倒。最近のディストリビューションではlibc6以上が主流だと思うけど。NISサーバのインストールは、ypservが要る。他、NISスレーブサーバ転送用のypxfrd、パスワード変更デーモンのyppasswddも必要に応じてインストール。ここではパスワードの管理も考えるので、ypservとyppasswddをインストールする。ypservがインストールされると/varにypディレクトリが作成される。ypservの設定項目は、/etc/ypserv.conf、/etc/sysconfig/network、/var/yp/securenets、/var/yp/Makefileである。まず、NISドメイン名を決定する。
# nisdomainname (NISドメイン名)
NISドメイン名はDNSドメイン名と異なるようにしておくべき。そうすると、外部のクラッカーがNISにアクセスするのを多少難しくすることができる。NISドメイン名を設定したら、/etc/sysconfig/networkに記述してブート時に設定されるようにしておく。またポートマップに登録する番号も設定する。
# /etc/sysconfig/network NISDOMAIN="(NISドメイン名)" YPSERV_ARGS="-p 834" YPXFRD_ARGS="-p 835"
/var/yp/securenetsを設定する。
# /var/yp/securenets 255.0.0.0 127.0.0.0 255.255.255.0 192.168.0.0
securenetsはネットマスク、ネットワークの順に記述する。次に/etc/ypserv.confを設定する。
# /etc/ypserv.conf # Host : Domain : Map : Security 192.168.0.0/24 : * : passwd.byname : port 192.168.0.0/24 : * : passwd.byuid : port 192.168.0.0/24 : * : shadow.byname : port 192.168.0.0/24 : * : passwd.adjunct.byname : port
Hostはネットワークを、DomainはNISドメイン名を、Mapは共有するマップファイルを、Securityはnone・port・denyを記述する。HostやDomainやMapではアスタリスクをワイルドカードとして使う事が出来る。Securityのnoneはポート制限なし、portはポート1024未満のみアクセス許可、denyはアクセス拒否する。
NISサーバの詳細な設定は/var/yp/Makefileで行う。
# /var/yp/Makefile MINUID=500 MINGID=500 MERGE_PASSWD=false MERGE_GROUP=false all: passwd group hosts shadow auto.master auto.home
設定箇所はMERGE_*変数と100行目付近のall:項目にNISで配布する情報を設定する。ここではユーザのログイン関係情報とオートマウンタ関係情報を配布する。オートマウンタの設定はまた後述する。他、配布するユーザの最小UID・GID(Linuxは通常500)を設定しなければNISサーバのシステム用ユーザ情報まで配布してしまうことになる。
設定が完了したら、makeで配布するマップファイルを作成する。
# cd /var/yp # make
この時点でypservを起動させれば、NISサーバが正常に起動するはずである。chkconfig等でブート時にypservが自動起動するようにしておく。ypservが起動したらNISマスターサーバ情報を設定する。次のコマンドを実行して設定する。
# /usr/lib/yp/ypinit -m
NISサーバの登録情報が決定したら、ctrl+Dを入力してプログラムを終了する。
NISパスワードデーモン設定
NISのログイン情報を使ってログインしていると、通常のpasswdコマンドが使えない。パスワードの変更にはyppasswdを用いることになる。このプログラムを扱うには、NISサーバがyppasswddを起動している必要がある。NISサーバにyppasswddをインストールし、/etc/sysconfig/yppasswddを設定する。
ETCDIR=/etc YPPASSWDD_ARGS="--port 836"
/etc/sysconfig/yppasswddはyppasswdd起動時に読み込まれるだけなので、yppasswddを再起動しておく。
NISクライアント設定
NISクライアントに必要なのは、ypbindのみである。NISスレーブサーバになるには、NISサーバになると同時にNISクライアントにもならなければならないし、NISマスターサーバでも設定確認に使えるのでypbindはインストールしておいても構わない。NISクライアントの設定には、/etc/yp.conf、/etc/nsswitch.conf、ログイン関係情報をNISで取得するなら/etc/passwd、/etc/group、/etc/shadowも設定する必要がある。また、上記のサーバ設定を行っていない純粋な新規NISクライアントであれば、サーバの項目で説明したNISドメイン名を設定する必要がある。
NISドメイン名を設定後、/etc/yp.confにはNISサーバのアドレスを設定する。
ypserver 192.168.0.1
IPアドレスにはホスト名を記述することもできるが、NISサーバから受け取るhosts情報ではなくローカルの/etc/hostsにホスト名が登録されている必要がある。特別の事情でもない限り、IPアドレスで記述する方がいい。
別のLinuxでDHCPサーバを立ち上げ、NISクライアントをDHCPクライアントにしている場合、/etc/yp.confはDHCPサーバの設定で置き換えられる。その場合はクライアント側で/etc/yp.confを設定する必要はない。DHCPサーバの設定は後述する。
/etc/nsswitch.confを設定する。このファイルはネームサービスの選択順を設定する。
passwd: compat group: compat # For libc5, you must use shadow: files nis shadow: compat passwd_compat: nis group_compat: nis shadow_compat: nis hosts: nis files dns services: nis [NOTFOUND=return] files networks: nis [NOTFOUND=return] files protocols: nis [NOTFOUND=return] files rpc: nis [NOTFOUND=return] files ethers: nis [NOTFOUND=return] files netmasks: nis [NOTFOUND=return] files netgroup: nis bootparams: nis [NOTFOUND=return] files publickey: nis [NOTFOUND=return] files automount: nis aliases: nis [NOTFOUND=return] files
大幅に入れ替えるので、元々あったnsswitch.confはnsswitch.conf.old等、別ファイルとして保存しておく方がいいかもしれない。automount:項目は、オートマウンタを使うのであればnisを、使わなければfilesを指定する。ここでは後述するオートマウンタ設定と併せて設定するので、nisに設定する。
必要があれば、さらに/etc/passwd、/etc/group、/etc/shadowに適宜設定を追加する。
# /etc/passwd ":"は6個 +:::::: # /etc/group ":"は3個 +::: # /etc/shadow ":"は8個 +::::::::
/etc/nsswitch.confと併せて、これでNISから情報を受け取ってユーザ/グループ情報を追加することができる。
この時点でypbindを再起動する。ちなみに最低限起動に必要なのは、/var/ypディレクトリとNISドメイン名である。上手く起動すればNISサーバを発見し、情報の共有が可能となる。ypwhichで接続先NISサーバの確認、ypcatで各ファイルの確認ができる。
# ypwhich # ypcat passwd # ypcat hosts
Mapのファイル名は正確にはpasswd.byname、passwdbyuid、hosts.byaddr等であるが、NISサーバの/var/yp/nicknamesで通称が指定されていればそれを使うことも出来る。shadow.bynameは通称がないのでypcat shadow.bynameと入力しなければならない。また、shadowファイルは一般ユーザからはypcatで閲覧できず、root権限が必要となる。
Iptablesとの併用
NISはセキュリティの問題が多く、Iptables等のファイアウォールでこれに少しでも対処する必要がある。通常、ypserv、yppasswdd、ypxfrd等の使用ポートは1024未満で動的であるが、上記の設定中にポートを固定する設定を施してあるので、これを利用する。NISサーバに以下の情報を登録する。
iptables -A INPUT -s $lan_net -p tcp --dport 834:836 -j ACCEPT iptables -A INPUT -s $lan_net -p udp --dport 834:836 -j ACCEPT
参考サイト
AutoFS
概要
オートマウンタはファイルシステムを必要なときに自動マウントし、必要が無くなれば自動でアンマウントするサービスである。オートマウンタを利用するメリットは色々あるが、大きくはNISと併用することでネットワーク内のパソコンのマウントテーブルを効率よく管理できることである。オートマウンタはNFSマウントプロトコルを拡張したものであり、NFSとNISを併せて使うときに用いる。オートマウンタにはautofsやamdがあるが、ここではautofsを用いて説明する。
AutoFSサービス設定
オートマウンタを使うにはマップという概念を理解する必要がある。このマップがいわゆる/etc/fstabに記述される情報と等しく、またNISで管理することが出来るものである。マップは基本的にマスタマップ、直接マップ、間接マップがあり、このうちNISで管理するマップはマスタマップと間接マップのみ。一応、直接マップの記述も付記しておくが、ローカルなマップとしてしか使えないことに注意。
オートマウンタを利用するには、まず管理すべきディレクトリを考えなければならない。ここではNISでログイン情報を管理するので、同時に/homeもネットワーク管理するようにした方がスマートだと思う。また、小規模なネットワークでは/usr/localのような追加インストールするためのディレクトリも同時に管理した方が、ネットワーク内のユーザに対して同一のプログラムを使用させることが可能になる。それ以外にマウントする必要があるものは、/nfs以下で管理することにする。
上記の構成をオートマウンタで管理するには、間接マップとして/etc/auto.home、/etc/auto.nfsが必要となる。/usr/localに対しては後述するとして、まずはこれらの間接マップを設定する。前提として、クライアントのユーザ名はuser01、サーバ名はserver01、server01はNFSサーバとして/export/*をエクスポートしているとし、/exportには/export/home、/export/local、/export/imagesa01、/export/imagesa02が存在しているとする。
# /etc/auto.home user01 -rw,hard,intr server01:/export/home/user01 # /etc/auto.nfs local -ro,hard,intr server01:/export/local data01 -rw,hard,intr,nosuid server01:/export/imagesa01 data02 -rw,hard,intr,nosuid server01:/export/imagesa02
間接マップの記述は、マップキー、NFSオプション、マウントするファイルシステムを表すサーバ名:パス名の順である。マップキーは最終的なマウントポイントの要素を意味する。つまり、これらは次のようにマウントされることを期待している。
# /etc/auto.home /home/user01 # /etc/auto.nfs /nfs/local /nfs/imagesa01 /nfs/imagesa02
auto.*という風に、マップ名のサフィックスとマウントポイントの名前が一致する必要はないが、一致させておいた方が両者の関連が理解しやすい。これらは/etc/fstabに次のように記述するのと同等の意味を持つ。
# /etc/fstab server01:/export/home/user01 /home/user01 nfs rw,hard,intr 0 0 server01:/export/local /nfs/local nfs ro,hard,intr 0 0 server01:/export/imagesa01 /nfs/imagesa01 nfs rw,hard,intr 0 0 server01:/export/imagesa02 /nfs/imagesa02 nfs rw,hard,intr 0 0
次に直接マップの記述であるが、基本的には間接マップの記述と大して差はない。マップキーに絶対パスを用いるというだけである。例として、以下に/etc/auto.directを設定する。
/usr/local -ro,hard,intr server01:/export/local
直接マップを用いる利点は、オートマウンタが1つのディレクトリエントリ上にマウントできるということである。ここでは/usr/localにserver01:/export/localがマウントされる。これが/usr/localに対する間接マップでのマウントだと、/usr/binや/usr/lib等が見えなくなってしまう。他にエントリが存在するディレクトリに対して間接マップを使用することは出来ない。しかし前述の通りNISでは直接マップが扱えないため、/usr/localをオートマウントするにはこれを回避する必要がある。設定は後述する。
上記のマップ群を扱うメタマップがマスタマップである。これは/etc/auto.masterに設定する。
/home auto.home -nobrowse /nfs auto.nfs --timeout=600 /- /etc/auto.direct
auto.masterの記述は、ディレクトリ、マップ、NFSオプションの順である。間接マップ等の記述順と違うことに注意。マップが絶対パスであればローカルファイルを意味し、/etc/プレフィックスを省略していればNISとローカルファイルのどちらにも対応でき、これは/etc/nsswitch.confの設定に基づいて判断される。ディレクトリの指定には、間接マップはマウントポイントを設定する。直接マップはプレースホルダである/-を使用する。繰り返すが、NISでは直接マップを扱わないことに注意する。
NISでこれらのマップを配布するには、/var/yp/Makefileを設定しなければならない。ターゲットallの定義に、auto.master、auto.home、auto.nfsを記述する。デフォルトのMakefileには既にauto.master、auto.homeの情報が設定されているかもしれない。auto.nfsについては、次のコードを挿入する。
AUTO_NFS = $(YPSRCDIR)/auto.nfs all: passwd group hosts shadow auto.master auto.home auto.nfs auto.nfs: $(AUTO_NFS) $(YPDIR)/Makefile @echo "Updating $@..." -@sed -e "/^#/d" -e s/#.*$$// $(AUTO_NFS) | $(DBLOAD) -i $(AUTO_NFS) -o $(YPMAPDIR)/$@ - $@ -@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@
auto.masterやauto.homeも同様の定義がなされているので、それらを参考にすると間違いないだろう。オートマウンタマップのキーがNISマップのキーになるので、これをmake後にypcatで確認することが出来る。
オートマウンタのサービスが起動するときにオートマウンタマップを参照するので、NISで適切にマップが配布されていればブート時にオートマウンタが起動するように設定しておくだけでクライアント側ではオートマウンタを利用できる。既にオートマウンタサービスが起動しているなら、次のコマンドでオートマウンタマップだけ再読込すればよい。
# service autofs reload
/homeをマウントするのであれば、クライアントマシンを一度再起動した方が混乱が少ないかもしれない。またオートマウンタで設定されているマウントポイントは自動で作成されるが、一応/nfsはmkdirで作成しておいた方がいいだろう。オートマウンタが起動しても/nfsをlsするだけでは見えないが、/nfs/localをlsするなどしてアクセスすれば見えるようになる。
直接マップ変換
NISでは直接マップを扱えないので、/usr/localなどをオートマウンタでマウントしたいときはそれに代わる手段を用いる必要がある。これは非常に単純で、間接マップで配布されるlocalに対してシンボリックリンクを作成すればよい。
# Original Direct-Map /usr/local -ro,hard,intr server01:/export/local
以下のように変換する。
# /etc/auto.master /nfs auto.nfs --timeout=600 # /etc/auto.nfs local -ro,hard,intr server01:/export/local
# ln -s /nfs/local /usr
このようにすることで、/usr/localへのアクセスが発生したときにそのシンボリックリンクを辿って/nfs/localへとアクセスする。/nfs/localはオートマウンタで管理されているので、これによってserver01:/export/localがオートマウントされる。同様に/usr/man等、直接マップとして扱いたいエントリを全て1つの間接マップで扱い、そのシンボリックリンクを作成することで直接マップを間接マップとして置き換えることが出来る。
キー置換・変数置換
実際のところ、/usr/local以下全てのエントリを配布するのであれば、直接マップやその変換で配布する必要はない。/usr/localそのものではなく、それより下のエントリを間接マップで配布すればいいだけである。ただし、全てのキーを登録するのは面倒なので、キーの置換を行ったほうが便利。これは/homeのような不特定多数が使用するディレクトリで、エントリの命名規則が一定しないものにも有効な方法といえる。それ以外にも、変数置換という方法がある。
# /etc/auto.local bin -ro,hard,intr server01:/export/local/bin lib -ro,hard,intr server01:/export/local/lib man -ro,hard,intr server01:/export/local/man sbin -ro,hard,intr server01:/export/local/sbin # ... 以下キーの指定が続くとする # /etc/auto.master /usr/local auto.local --timeout=600
これは次のように置き換えられる。
# /etc/auto.local bin -ro,hard,intr server01:/export/local/& lib -ro,hard,intr server01:/export/local/& man -ro,hard,intr server01:/export/local/& sbin -ro,hard,intr server01:/export/local/& # /etc/auto.master /usr/local auto.local --timeout=600
さらに次のように簡略化できる。
# /etc/auto.local * -ro,hard,intr server01:/export/local/& # /etc/auto.master /usr/local auto.local --timeout=600
このとき、/usr/local/bin/testにアクセスがあると、オートマウンタはbinをキーにして、server01:/export/local/bin/testにアクセスしようとする。/usr/local/man/man1ならオートマウンタはmanをキーにする。このように、アクセス時にマップキーがワイルドカード(アスタリスク表示)にあたり、アンパサンドで該当するキーの名前に変換する方法をキー置換という。ワイルドカードマップエントリは全てのマップキーに一致するので、固有マップエントリはこれより前に記述する必要がある。
変数置換はシェルスクリプトを記述したことがあるならば、馴染みのある置換である。例を示す。
# /etc/auto.direct /usr/local/bin -ro server01:/export/local/bin.$ARCH
組み込み変数は以下の通り。
- ARCH:アーキテクチャ(uname -m)
- CPU:プロセッサタイプ(uname -p)
- HOST:ホスト名(uname -n)
- OSNAME:オペレーティングシステム(uname -s)
- OSREL:OSのリリース(uname -r)
- OSVERS:OSのバージョン(uname -v)
NISでオートマウンタを管理する場合、異なるアーキテクチャやバージョンのOSも同じマップで扱うことになるので、このような変数でマウント先を変えた方がいい場合がある。クライアントのOSとバージョンを固定していれば、変数置換はあまり使わないかもしれない。
また、自分で独自変数を組み込むことも出来る。automountの-Dオプションを使って追加定義する。
# automount -D MACHINE=`/bin/uname -m`
このようにすると、MACHINE変数と組み込み済みのARCH変数は同一の意味を持つ。ただし、独自に変数を追加するには起動スクリプトを編集して-Dオプションを加える必要があるので、組み込み変数で定義されているものはそれを使うべき。
この他に、同一マップでのNISとローカルファイルの混在、間接マップの階層化、実行可能な間接マップ等々、複雑なマップの設定方法があるがここでは扱わない。必要な場合は参考サイトを参照のこと。
参考サイト
DHCP
概要
DHCPサーバは規定されたIPアドレスをDHCPクライアントに自動で割り当てて配布するのが主なサービスであるが、LinuxのDHCPデーモンはその他柔軟な設定が可能である。LANで使う場合、LANケーブルを指せば後は自動で外部ネットワークにも接続できるようになるなどのクライアント側の負担を減らすことも出来る。
DHCPサーバ設定
設定ファイルは/etc/dhcpd.confのみ。デーモン起動時に読み込まれ、編集したらデーモンを再起動するだけで構わない。以下に設定内容例を示す。
ddns-update-style interim;
ignore client-updates;
subnet 192.168.0.0 netmask 255.255.255.0 {
option routers 192.168.0.1;
option subnet-mask 255.255.255.0;
option domain-name "example.jp";
option domain-name-servers 192.168.0.1;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 192.168.0.128 192.168.0.255;
default-lease-time 21600;
max-lease-time 43200;
}
プライベートIPを使った設定はこのような例のようになるだろう。また、DHCPサーバははクライアントの/etc/resolv.conf、/etc/yp.conf、/etc/ntp.confを設定することが出来る。元の設定は/etc/*.conf.svというファイルにリネームされる。これにより、クライアント側の設定の手間を省くことが出来る。設定オプションの例を以下に示す。
# /etc/resolv.confに対する設定 option domain-name "example.jp"; option domain-name-servers 192.168.0.1, 192.168.0.2, 192.168.0.3; # /etc/yp.confに対する設定 option nis-domain "example-nis-domain"; option nis-servers 192.168.0.1, 192.168.0.4; # /etc/ntp.confに対する設定 option ntp-servers 192.168.0.1, 192.168.0.5;
その他、色々と柔軟な設定が可能。詳しくは参考サイトを参照のこと。
DHCPクライアント設定
既に市販のルータなどでDHCP設定を行っている場合、DHCPクライアントとなっていることが多い。dhcpcdというDHCPクライアントデーモンを用いる。/etc/sysconfig/network-scripts/ifcfg-eth0等、ネットワーク設定ファイルでインターフェースの設定からクライアントになる。以下、設定例。
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
デバイス名eth0、IPアドレスはDHCPから自動取得、ブート時に自動起動モードで設定。DHCPサーバ側から送られてくるデータが正しければ、クライアントはこれだけでネットワークに接続できるはずである。
DHCPサーバは上記で説明したように各種の設定を配布するが、dhcpcdではクライアント側でそれを拒否することも出来る。dhcpcdの起動時に-R、-Y、-Nを渡すことで/etc/resolv.conf、/etc/yp.conf、/etc/ntp.confの設定を置き換えなくなる。ただしDHCPサーバの設定は柔軟に対応できるので、特別の事情がない限りDHCPサーバが配布する設定を使用すべき。一応、/etc/sysconfig/network-scripts/ifcfg-*にて、オプションを指定することで置き換えを禁止できる。
DHCPCDARGS="-R -Y -N"
参考サイト
- Manpage of dhcpd.conf
- Manpage of dhcpd-options
- Manpage of dhcpd
- @IT:DHCPサーバをたてるには
- Manpage of dhcpcd
- インターフェース設定ファイル
NTP
概要
ネットワークタイムプロトコル(Network Time Protocol: NTP)を導入することで、時刻の自動調整を行うことができる。PCの内部時計は、日に数分もずれが生じる程度の精度なので、定期的に時刻サーバにアクセスし調整する必要がある。例えば、サーバでログをとる際に時刻のずれが激しいとログの意味をなさなくなるなどの問題が考えられる。
NTP設定
NTPサーバとクライアントは同一プログラムを用いる。便宜的に時刻を提供する側をサーバ、時刻を確認しに行く側をクライアントと呼ぶ。国内には幾つかのNTPサーバがあり、その時刻と同期させるのが最良であるが、個々のパソコンがそれぞれにアクセスしてしまうとネットワーク帯域を食いつぶしてしまう。LAN内にあるパソコンは、そのLAN内などにローカルNTPサーバが提供されていないかどうかを確認すべき。ネットワーク管理者は、NTPサーバをLANで提供し、そのサーバだけが外部NTPサーバと通信するように配慮する。
NTPをインストールする。Fedoraならyum、Vineならapt-getで簡単にインストールできる。フロントエンドもデーモンもまとめてインストールされる。デーモンの設定は/etc/ntp.confで行う。以下、LAN内の上位NTPサーバ用設定。
### /etc/ntp.conf server ntp.nict.jp prefer server ntp.nict.jp server ntp.nict.jp server ntp1.jst.mfeed.ad.jp server ntp2.jst.mfeed.ad.jp server ntp3.jst.mfeed.ad.jp server 127.127.1.0 # local clock fudge 127.127.1.0 stratum 10 logfile /var/log/ntp.log driftfile /etc/ntp/drift multicastclient # listen on default 224.0.1.1 broadcastdelay 0.008
nict.jpやmfeed.ad.jpは国内の一般公開上位NTPサーバ。プロバイダなどがNTPサーバを提供していれば、混雑緩和のためにそちらを優先して使用すること。
次はLAN内クライアント用設定。
### /etc/ntp.conf restrict default noquery notrust nomodify restrict 127.0.0.1 restrict 192.168.0.0 mask 255.255.255.0 restrict 192.168.0.1 server 192.168.0.1 restrict 127.127.1.0 server 127.127.1.0 driftfile /etc/ntp.drift logfile /var/log/ntp.log
この場合、まず192.168.0.1のLAN内NTPサーバにアクセスしに行き、なければ次にローカルホストにアクセスする。サーバ用設定のように、外部にアクセスするようにはしない。
ブート時に自動起動するように設定。デーモンを起動。
# chkconfig ntpq on # service ntpd start
NTPデーモンは起動後しばらくしてからサーバにアクセスする。ログを見て、正しくアクセスしているかどうか確認する。ntpqは現在のNTPデーモンの状態を、ntptimeは時刻の確認ができる。
# ntpq -pn # ntptime
ntpdateは、ntpdが起動していないときに手動でNTPサーバにアクセスして時刻を調整できる。ntpdが起動していると使用できない。cronを使用して定期的に時刻調整を行いたい場合は、ntpdateを用いてスクリプトを構成する。
# service ntpd stop # ntpdate 192.168.0.1
DHCPクライアントであれば、DHCPサーバからNTP情報が配布されることがある。DHCPの項目を参照。この場合、/etc/ntp.confはDHCPによって自動で設定される。手動で設定されていたファイルは/etc/ntp.conf.svとして保存される。
参考サイト
Squid
概要
Squidはプロキシサーバの他、ウェブキャッシュサーバとしてもよく利用される。特にLAN内に多数のクライアントが存在する場合、キャッシュを有効活用することでネットワークの負担を減らすことができ、ウェブブラウジングの速度も快適になる。ここではSquid 2.5を透過プロキシサーバとして、クライアント側に設定を施さずにhttpリクエストに対してプロキシを利用させるようにする。透過プロキシは、クライアントがリクエストを要求する経路上に存在(ルータとプロキシサーバが同一)するほうが設定が単純になる。
Squidはyumやapt-get等パッケージマネージャで簡単にインストールできる。設定するファイルは/etc/squid/squid.conf。英語だが詳細なマニュアルが記述されており、最新の情報を得るにはこのファイルを読むのが良い。インストール直後はsquid.conf.defaultと同一であり、設定だけを施すのでsquid.confを一旦削除し、新たにsquid.confを作成する。
# rm /etc/squid/squid.conf # vi /etc/squid/squid.conf
### /etc/squid/squid.conf # Basic Option visible_hostname localhost acl all src 0.0.0.0/0.0.0.0 acl manager proto cache_object acl localhost src 127.0.0.1/255.255.255.255 acl localnet src 192.168.1.0/24 acl to_localhost dst 127.0.0.0/8 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT http_access allow manager localhost http_access deny manager http_access deny !Safe_ports http_access deny CONNECT !SSL_ports http_access allow localhost http_access allow localnet http_access deny all # Transparent-Proxy Option http_port 3128 transparent http_port 3128 vhost http_port 3128 vport=80 http_port 3128 protocol=http forwarded_for off header_access Via deny all header_access X-Forwarded-For deny all # Cache Option cache_mem 64 MB cache_dir ufs /var/spool/squid 256 16 256 cache_effective_user squid cache_effective_group squid
基本設定ではサーバのポート番号、アクセス制限等を記述している。LAN内のアクセスのみ有効とする。透過プロキシ設定はこの通りに設定する。キャッシュ設定は、キャッシュによるアクセス速度の向上を考えるならば多めにとったほうが良い。
squid 2.6 stable6のアップデート以降、httpd_accel系のオプションが使えず。http_portのオプションにアクセラレートモードがあるので、こちらに切り替わった?
設定が終了したら、キャッシュディレクトリを確保する。
# squid -z
次に透過プロキシとして動くように、iptablesを用いてhttpへの要求をプロキシサーバへ送る。ルータとプロキシサーバが別の場合、整合性をとるための設定を追加する必要がある。
LAN_IP="192.168.0.1" # ルータIP LAN_NET="192.168.0.0/24" LAN_IF="eth1" PROXY_IP="192.168.0.100" # プロキシサーバIP PROXY_PORT="3128" # ルータとプロキシサーバが同一 iptables -t nat -A PREROUTING -i $LAN_IF -p tcp --dport http -j REDIRECT --to-port $PROXY_PORT # ルータとプロキシサーバが別 iptables -t nat -A PREROUTING -i $LAN_IF -s ! $PROXY_IP -p tcp --dport http -j DNAT --to $PROXY_IP:$PROXY_PORT iptables -t nat -A POSTROUTING -o $LAN_IF -s $LAN_NET -d $PROXY_IP -j SNAT --to $LAN_IP iptables -A FORWARD -s $LAN_IP -d $PROXY_IP -i $LAN_IF -o $LAN_IF -p tcp --dport $PROXY_PORT -j ACCEPT
Squidをブート時に起動するように設定。サービスを開始する。
# chkconfig squid on # service squid start
参考サイト
PPPoE
概要
ADSLやFTTH等の回線を使ってインターネットに接続する場合、PPPoE(Point to Point Protocol:PPP over Ethernet)で接続するのが一般的。ここではLinuxにフリーで実装されているrp-pppoeを使用してインターネットへの接続を行う。
rp-pppoeの設定
rp-pppoeはパッケージとして提供されているものを使う。設定ファイルは/etc/ppp/pppoe.conf等に記述されるが、ここではコマンドラインから起動する対話式アプリを使って設定する。
# adsl-setup
上記コマンドを実行すると対話式での設定が行われる。ユーザID、使用するインターフェース、回線自動切断の可否、DNSサーバ、パスワード、ファイアウォール設定の順に設定していく。
Welcome to the Roaring Penguin ADSL client setup. First, I will run some checks on your system to make sure the PPPoE client is installed properly... Looks good! Now, please enter some information: USER NAME >>> Enter your PPPoE user name (default test@test.net):
プロバイダから指定されているユーザIDを入力する。形式はID@ホストドメインとなる。ここではユーザIDはtest、ホストドメインはtest.netとする。
INTERFACE >>> Enter the Ethernet interface connected to the ADSL modem For Solaris, this is likely to be something like /dev/hme0. For Linux, it will be ethn, where 'n' is a number. (default eth0):
PPPoE接続に使うインターフェースを指定する。Linuxであればeth0、eth1等。
Do you want the link to come up on demand, or stay up continuously? If you want it to come up on demand, enter the idle time in seconds after which the link should be dropped. If you want the link to stay up permanently, enter 'no' (two letters, lower-case.) NOTE: Demand-activated links do not interact well with dynamic IP addresses. You may have some problems with demand-activated links. >>> Enter the demand value (default no):
回線の自動切断までの時間を秒数で入力する。自動切断を行わないのであれば、noを入力。
DNS Please enter the IP address of your ISP's primary DNS server. If your ISP claims that 'the server will provide DNS addresses', enter 'server' (all lower-case) here. If you just press enter, I will assume you know what you are doing and not modify your DNS setup. >>> Enter the DNS information here:
DNSの設定を行う。プロバイダからDNSサーバの指定があればそれを、なければserverと入力する。
PASSWORD >>> Please enter your PPPoE password: >>> Please re-enter your PPPoE password:
プロバイダから指定されているパスワードを入力する。
FIREWALLING
Please choose the firewall rules to use. Note that these rules are
very basic. You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security. If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself. Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc. If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.
The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
>>> Choose a type of firewall (0-2):
ファイアウォールの設定を番号で指定する。自分でファイアウォールを構築する場合は0を、スタンドアロンで動かす標準ファイアウォールは1を、ネットワークのゲートウェイとして動かす場合は2を選択する。
最後に設定の間違いがないかどうかの確認が行われ、yを入力すれば設定が反映される。PPPoE接続はインターフェスが起動していると接続できないので、/etc/sysconfig/network-scripts/ifcfg-eth0等でブート時に起動しないようにする。
### exsample: /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=no
※ Vine 3.2での設定時、eth0とeth1がインストールされている時にeth0を自動起動しないようにすると、eth1がeth0として起動されてしまうというトラブルがあった。これを回避するためにeth0の設定もONBOOT=yesにしておき、それ以外は設定しないでおくことでPPPoE接続が可能となった。
また、/etc/sysconfig/networkにGATEWAYが記述されていれば、その項目を削除しておく。そうしないと接続できない場合がある。
これらの設定が完了したら、システムを再起動させる。再起動後、以下のコマンドを入力し、接続を確認する。
# adsl-start # adsl-stop
接続が成功すれば、成功メッセージを返す。他にadsl-statusで接続状態を確認できる。起動時に自動でPPPoE接続を行うにはサーバを起動するようにしておく。
# chkconfig adsl on
接続に成功したら、インターフェースはppp0として扱われる。iptables等を適宜設定しておくこと。
参考サイト
Root-tail
概要
Root-tailは、X root-windowにテキストを表示するプログラム。これを使うとデスクトップにログファイルの結果を表示させることなどができる。tailコマンドの応用と思えば良い。
RPMインストール
tarボールでソースをダウンロードできるが、後々の管理を考えてrpmにしておく。参考サイトからspecファイルをダウンロードし、rpm作成ディレクトリに配置。バージョン等々を確認しておく。
makefile作成時にxmkmfが必要となる。FC5ではimakeパッケージがこれを提供しているので、yumであらかじめインストールしておく。imakeパッケージがない等、提供されるパッケージが分からない時は次のコマンドで探す。
# yum provides xmkmf
fedora-extrasにroot-tailが取り込まれているようなので、yumでインストールできるみたい……。
# yum install root-tail
参考サイト
- Marc Lehmann's improved "root-tail"
- root-tail.spec(DAG:root-tail RPM packages for Red Hat/Fedora)
Samba
概要
Sambaは元々LinuxがWindowsドメインに参加するために必要なサーバだが、Windowsに限らずLinux同士のファイルサーバとしても使うことが出来る。つまりはNFSと同じような機能を持っているが、NFSではパスワードを用いずユーザIDのみの制限となるためネットワーク越しに接続するにはセキュリティ上の問題がある。Sambaは認証にユーザID、パスワードを用いるので、NFSよりは柔軟な運用が可能である。問題が多かった日本語対応についても、バージョンが3に上がって大部分が解決した。
Sambaサーバのインストール
たいていのLinuxディストリには標準でSambaが付属している。aptやyumなど、各OSの更新用フロントエンドで簡単にインストールできるだろう。
# yum install samba
設定は、/etc/samba以下のディレクトリで行う。メインの設定ファイルはsmb.confになる。以下、設定例。
[global]
unix charset = eucJP-ms
dos charset = cp932
display charset = eucJP-ms
workgroup = Workgroup
server string = Samba %v on %h
hosts allow = localhost, 192.168.0.
log file = /var/log/samba/%m.log
max log size = 50
security = user
encrypt passwords = Yes
username map = /etc/samba/smbusers
unix password sync = Yes
passwd program = /usr/bin/passwd %u
passwd chat = *New*password* %n¥n *ReType*new*password* %n¥n *passwd:*all*authentication*tokens*updated*successfully*
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
dns proxy = No
[public]
comment = Public Space for Everyone
path = /var/samba/public
public = Yes
read only = Yes
# allow people in the "staff" group to write
; write list = @staff
[sambadoc]
comment = Samba Documents
path = /var/samba/docs
guest ok = Yes
read only = Yes
[data]
comment = Data Directory
path = /export/data
browseable = Yes
writeable = No
[temp]
comment = Temporary Directory
path = /export/temp
public = Yes
browseable = Yes
writeable = Yes
各セクション名は[]で囲み、セクションの設定はその直下に記述される。globalは特殊セッション。他にも特殊セッション名はあるが、ここでは省略。詳しくは参考サイトを参照。global設定の内容は以下。
- 文字コードは、UNIX系がEUC-JP(Vine Linux)、DOS系がCP932(Windows)。UTF-8(Fedora Core等)を用いる場合はutf-8と記述。
- workgroupは、ワークグループ名としてWindowsドメインのネットワーク上に表示される。
- hosts allowは、Sambaサーバへの接続を許す範囲を与える。localhostで自分自身を含めないと一般ユーザがsmbpasswdなどを利用できない。
- セキュリティレベルはuserがデフォルト。利便性向上のため、ログインパスワードとSambaパスワードを同期させている。
各セクションでは個別に設定を行える。詳しいパラメータは参考サイトを参照。パラメータの中には同意味の項目もある(read only = No と writeable = Yes は同等の解釈がなされる。つまり、どちらも書き込み可能な権限を与える)。
サーバの設定が終了したら、次に利用できるSambaユーザを指定する。/etc/passwdをもとにSambaユーザのリストを作成する。
# mksmbpasswd.sh < /etc/passwd > /etc/samba/smbpasswd # chmod 600 /etc/samba/smbpasswd
Sambaユーザリストのファイル権限は必ず600にし、root以外のユーザが閲覧できないようにする。この状態ではまだパスワードが設定されていないため、Sambaを利用できない。smbpasswdを用い、パスワードを設定する。
# smbpasswd {USER_NAME}
smbpasswdは一般ユーザでも使用できる。その場合{USER_NAME}は必要ないが、OLD Passwordを訊かれる。
設定が終わったら、Sambaを再起動。またLinux起動時に自動で立ち上がるようにchkconfigなどを設定する。
# service smb restart # chkconfig smb on
Sambaクライアントのインストール
Sambaサーバが適切に設定されていれば、クライアントはクライアントソフトを用いてアクセスできる。WindowsではSambaを利用するのに追加プログラムは必要なく、ネットワーク上のSambaサーバにユーザIDとパスワードを用いてログインするだけである。Linuxではsamba-clientを導入する必要がある。
# yum install samba-client
導入が終了すれば、smbclientを用いてSambaサーバにアクセスできる。しかし通常利用する上でsmbclientを毎回使うのは不便に過ぎるので、Sambaサーバの共有ディレクトリをマウントしてしまうのが早い。以下、smbmountを用いたマウントの一例。
# mount -t smbfs -o uid=500,gid=500,iocharset=euc-jp,codepage=cp932,credentials=/etc/smbpass //{Samba_Server}/public /mnt/tmp
マウントの種類にsmbfsを使うことで、Sambaサーバへのマウントが可能になる。オプションを指定し、Samba_ServerにSambaサーバのIPアドレスもしくは名前解決可能な名前を設定し、マウント先を指定する。詳しいオプションは参考サイトを参照。
マウント時にユーザIDとパスワードが必要になるが、/etc/fstabなどに直接そのような情報を書き込むのはセキュリティ上好ましくない。この場合、credentialsオプションを用いて、別ファイルからユーザIDとパスワードを読み込む。
### /etc/smbpass
username={User_Name}
password={Password}
一例として/etc/smbpassというファイルを作成し、その中にユーザIDとパスワードを書き込んでいる。このファイルのアクセス権限は600にしておくのが良い。空パスワードの指定を許可されており、空パスワードを用いていたとしても、password行は必須である。その場合、{Password}には何も記入しないでおく。
また、Fedora Coreなどではsmbmountが廃止され、その後継となるCommon Internet File System (CIFS)に移行している。マウントの種類にcifsを用いる場合は幾つかオプション指定が異なる。以下、cifsを用いたマウントの一例。
# mount -t cifs -o iocharset=utf8,credentials=/etc/smbpass //{Server_Name}/public /mnt/tmp
CIFSではオプションのcodepageがなくなり、またUnix extensionが有効であるとuid/gidの設定が無視される。サーバとクライアントでuid/gidを統一してあれば問題ない。smbfsと比較して、cifsの方が処理速度が速く、またUTF-8のファイルが扱える。将来的にはcifsが主流になっていくと考えられる。ただし、CIFSに対応していない古いSambaサーバの場合は無論使用できない。
smbclient with autofs
Sambaの共有ディレクトリをマウントする際に/etc/fstabへそのマウント情報をひたすら書き込んでも問題はないが、autofsを用いた方がよりスマートに解決できる。Sambaの共有ディレクトリが増えた際にも、わざわざ/etc/fstabにその情報を書き込まなくても良い。
autofsがインストールされていれば、/etc/auto.masterなどがインストールされているはずである。Sambaのautofs用スクリプトが/etc/auto.smbとしてあるので、その情報を/etc/auto.masterに書き込む。
### /etc/auto.master ... /smb /etc/auto.smb
auto.smbの内容は以下の通りであり、存在しなければこのスクリプトを用いるのがよい。
#!/bin/bash
# $Id: auto.smb,v 1.3 2005/04/05 13:02:09 raven Exp $
# This file must be executable to work! chmod 755!
key="$1"
opts="-fstype=cifs,rw,iocharset=euc-jp,credentials=/etc/smbpass"
for P in /bin /sbin /usr/bin /usr/sbin
do
if [ -x $P/smbclient ]
then
SMBCLIENT=$P/smbclient
break
fi
done
[ -x $SMBCLIENT ] || exit 1
$SMBCLIENT -gNL $key 2>/dev/null| awk -v key="$key" -v opts="$opts" -F'|' -- '
BEGIN { ORS=""; first=1 }
/Disk/ { if (first) { print opts; first=0 }; print " ¥¥¥n¥t /" $2, "://" key "/" $2 }
END { if (!first) print "¥n"; else exit 1 }
'
chmodでファイル権限を755にし、スクリプトが実行可能なようにしておく。基本的な変更点はopts変数で指定される、オプションである。
### /etc/auto.smb opts="-fstype=cifs,rw,iocharset=euc-jp,credentials=/etc/smbpass"
mountのオプションで指定されるものとほぼ変わらない。この設定後、autofsを再起動し、/smb/{Server_Name}にアクセスすれば共有ディレクトリの一覧が見られる。{Server_Name}はIPアドレスかもしくは名前解決可能なサーバ名である。
# service autofs restart
# ls /smb/{Server_Name}
参考サイト
Trackback
機械的スパムを防止するための検証です。以下の画像に書かれている文字列(半角英数字)をトラックバックURL末尾に追加して送信してください。
トラックバックURL:
Comment