Linuxメモ集
このページはVineLinux2.1を元に書いています。他のディストリビューションではファイルの場所などが違う可能性があるので気をつけてください。また同じ環境だとしても、私はすべてを動作確認したわけではないので、この通りにやってもうまくいくかどうか保証はできません。自己責任でお願いします。
セキュリティに対するポリシーなどは、ネットワーク形態などにより変化するでしょう。ここに載せた設定は私の一例です。みなさんは設定する際、これをそのままコピーするのではなく十分に勉強し理解した上で行ってください。
私は基本的にコマンドベースによる管理を原則としています。グラフィカルなツールで管理したい人は他のサイトを参照してください。
ここに載っている設定に問題がある、または間違えがある、動かないなど気づかれた方は掲示板で知らせてください。お願いします。
VineLinux2.1固有の問題はこちらのページを参照してください。
Vine ホームページ http://vinelinux.org/
VineLinuxユーザメーリングリスト過去ログ検索 http://vine.ic.sci.yamaguchi-u.ac.jp/
注意)文中の[¥](円マーク)と[\](逆スラッシュ)の表示が端末によって変わるかもしれません。適宜読み替えてください。
また環境により複数行にわたって表示される場合でも、1行で入力しなければならないものもあります。気をつけてください。
現在は私Vineサーバを管理していないので、最新情報から疎くなっています。今後も更新はあまりないかと思いますが、備忘録として残しておきます。
管理用
○ユーザアカウント作成・設定
インストール時にユーザアカウントを作成することもできますが、デフォルト設定やユーザID/グループなど細かく設定するためにも慎重にしたほうがいいでしょう
・一般ユーザアカウント作成 [root]
# /usr/sbin/useradd -c '名前 ' -g グループ名 アカウント名
※ /home/アカウント名/ のデフォルト構成
→ /etc/skel/ と同じ内容がコピーされ、ファイル所有者が変更される
※ グループ名を指定しないと自動的に処理される(userグループになるか新しくグループが作成されるかはディストリビューションによる(?))
・管理用スーパーユーザアカウント作成(rootと同じ権限を持つ) [root]
# /usr/sbin/useradd -c '名前 ' -u 0 -o -g root アカウント名
※ ユーザID:0(root) ユーザグループ:rootを指定。同じユーザIDのユーザを複数作成
・ユーザアカウント作成 その2 [root]
/etc/passwd を編集する → /usr/sbin/vipw (ファイルロック・構文チェックなどを自動で行う)
構文(shadow password導入されている場合)
→ ユーザ名:*:ユーザID:グループID:本名など:ホームディレクトリ
・別のユーザのパスワード変更 [自分以外の変更は要root権限]
# /usr/bin/passwd アカウント名
・新規グループ作成 [root]
# /usr/sbin/groupadd グループ名
または /etc/group を直接編集する → /usr/sbin/vigr
構文 (グループパスワードはあまり使われないので省略)
→ グループ名:x:グループID:ユーザリスト
・ユーザの個人情報 (リアルネームなど) 変更 [自分以外の変更はroot権限]
# /usr/bin/chfn アカウント名
○起動・停止
・Linuxのシャットダウン
# /sbin/shutdown -h now
・ランレベル(RunLevel)
0:システム停止
1:シングルユーザモード → カーネルアップデートするときなど
2:マルチユーザモード(NFCマウントなし)
3:マルチユーザモード(コンソールログイン)
4:(未使用)
5:マルチユーザモード(ディスプレイマネージャ)
6:システム再起動(リブート)
→ Linux起動時の状態は /etc/inittab の中に記述されている
id:3:initdefault: (ランレベル3で起動する)
・起動スクリプト(Redhat系) → /sbin/chkconfig で設定
/etc/rc.d/rc3.d/S10network
3:ランレベル S:スタート/K:ストップ 10:優先順位(小さい順に実行される)
network:実行スクリプト → /etc/rc.d/init.d/network
○その他
・別のユーザの権限に変更して、シェルを実行する
(telnetでログインする際、直接rootでログインせずに一般ユーザからsuするのが好ましい)
$ su - アカウント名
※ suコマンドを制限する(例:wheelグループのみ許可する)
→ /etc/pam.d/su の中に以下の行を追記する
auth required /lib/security/pam_wheel.so debug group=wheel
・IPアドレス[root?]
$ ifconfig
eth0 … LAN
lo … ローカルループバック(127.0.0.1,localhost)
・hostnameの設定ファイル
/etc/sysconfig/network
※Vine2.5ではバグ有り?(参照 vine-users:041131)
設定を調べる・変更する
現在のディレクトリを調べる → $ pwd
パス(path)
パスを調べる → $ echo $PATH
パスを追加する → $ setenv PATH $PATH:追加するパス (cshの場合)
$ export PATH=$PATH:追加するパス (bashの場合)
シェル(shell)
現在のシェルを調べる → $ echo $SHELL
ログインシェル変更 → $ /usr/bin/chsh
プロンプト(prompt)
現在の表示について調べる → $ echo $PS1
プロンプト表示を変更する → $ PS1 = '[\u@\h \W]\$'
※ \u ユーザ名 \h ホスト名 \W 現在のディレクトリ \! ヒストリ番号
・ユーザアカウントの個人情報 (リアルネームなど) 変更
$ /usr/bin/chfn
・パスワード変更
$ /usr/bin/passwd
・コマンドの場所を調べる(PATHに含まれていて普段はフルパスを入れる必要のないもの)
$ which bash ……例:bashがどこにあるかを知りたい場合
/bin/bash
シェル(shell)
現在のシェルを調べる → $ echo $SHELL
ログインシェル変更 → $ /usr/bin/chsh
bashをログインシェルとして起動した場合、以下のファイルが実行される
1. /etc/profile
2. ~/.bash_profile , ~/.bash_login , ~/.profile
の順で最初に見つかった読み込み可能なファイル1つ
バックグラウンドでジョブの実行
→ コマンドの最後に&をつける
コンソールの画面表示
Linuxを手元のキーボード・画面で操作するときは、6個のコマンド画面と1個のX-Window画面を同時に用意されています。これにより、わざわざexitしなくても画面を切り替えるだけで効率的に処理できます。またX-Windowがフリーズした場合、コマンド画面からフリーズしたアプリケーションをkillすることで終了させることができます。
・コマンド画面から切り替え
→ ALT+F1〜6 ただしX-Windowは ALT+F7
・X-Window画面から切り替え
→ SHIFT+ALT+F1〜6
ファイル操作
・ファイルコピー
$ cp ファイル名 移動先ディレクトリ
・ファイル移動
$ mv ファイル名 移動先ディレクトリ
・ファイル名変更(リネーム)
$ mv 元ファイル名 新しいファイル名
・ディレクトリをファイルごとまとめて削除
$ rm -r ディレクトリ名
・ファイル検索
$ locate ファイル名
※ データベースを利用するために高速な検索が可能。ただし最新状態でないことも
・データベースを更新 → $ /usr/bin/updatedb
$ find / -name ファイル名
※ 実際に検索を行う。その他多くの検索条件を指定可能 参考
トラブル FAQ
様々なトラブルに共通して原因となりうる問題のため、確認すべきこと
・iノード(i-node)を使い切っているため新規ファイルが作れない
→ 代表的なエラーメッセージ[No space left on device]
$ df -i … 使用率% が100%になっていないか確認する
ログの確認・解析
1. アクセスログ・エラーログファイルを指定
$ tail -f hogehoge.log
2. ログが追加されると、自動的に表示される
●初めてプログラムをmakeしてインストールしようとしているがエラーになる
→ 開発環境がインストールされていないと、rpmのインストールしかできない。次のうちのどれかを実行する
a)Linuxを再インストールして、開発環境(Development Tools)パッケージを入れる
b)下記のパッケージをインストール
(※調査中)
●サーバとして運営しているLinuxに外部からtelnetなどを利用しようとすると、最初の反応があるまで長時間(1〜2分)かかる
→ IPとDNSやhostsの連携がとれていないため。次のうちのどれかを実行する
a)サーバ側のhostsにクライアントマシンのIPを追加する
b)DNSに登録する
●apacheからホームページ(Webページ)が見られない
→ さまざまな要因が考えられますが、TCP/IP通信はできている&基本的な知識はあることを前提としてFAQをあげておきます
1. apacheが動いていることを確認する
$ ps -aux | grep httpd
2. 次の2つのディレクトリのパーミッションを設定する(デフォルト設定の場合)
/home/ユーザ名 drwxr-xr-x(755)
/home/ユーザ名/public_html drwxr-xr-x(755)
※パーミッションはdrwxr-xr-x(755)でもdrwx--x--x(711)でもよい。どちらを選ぶかは運営ポリシー次第
apacheがどのユーザ権限で動くのか確認しておくとよい。通常はnobodyなのでother(最後の数字)だけ変更すればよい。
●apacheでCGIが動かない
1.説明書をちゃんと読むこと(誰かが作ったプログラムを利用する場合)
2.必要なファイルが不足していないか確認する(jcode.plなど)
3.先頭行のPerlのパスを直す → 調べ方 … $ which perl
#!/usr/bin/perl (VineLinuxの標準パス)
4.[Content-type: text/html\n\n] を最初に出力しているか確認
5.Perlの文法チェック
$ perl -wc hogehoge.cgi
6.コマンドライン上で
$ head -1 hogehoge.cgi | cat -v
→ 行の最後に^Mがある場合は、改行コードがCR+LFになっているのでLFのみに変換する
(変換コマンド) $ tr -d "\15" <hogehoge.cgi >hogehoge2.cgi
7.コマンドライン上で実行して出力結果を確認(ただし引数を与えるのは難しい)
$ ./hogehoge.cgi | more
8.それでもうまく動かない場合は、apacheが動くユーザ権限にRootでsuすることで問題を探す…通常ユーザとはパスの設定が異なっているため
# su - nobody
●時刻がおかしい・時計が大幅にずれている(数分以内の誤差の場合はこちら)
→ Linuxでは2つの時計があります。以下のコマンドでどの時計がずれているのか確認する
$ date システムクロック(日本時間)
2001年 9月11日(火) 01時17分35秒 JST
$ date -u システムクロック(標準時間)
2001年 9月10日(月) 16時17分37秒 UTC
# hwclock ハードウェアクロック
1.タイムゾーン(TimeZone)の設定を確認
# mv /etc/localtime /etc/localtime.bak 現在のタイムゾーン情報をバックアップ
# ln -s /usr/share/zoneinfo/Japan /etc/localtime 日本標準時で時刻を表示する場合
※このあたりは # /usr/sbin/timeconfig でも設定可能か?
2.NTPによる時刻修正
# /usr/sbin/ntpdate -b 日本のNTPサーバ 例:clock.nc.fukuoka-u.ac.jp
システムクロック修正(-b:強制的に) ntpdateはxntpパッケージに含まれている
# /sbin/hwclock --systohc ハードウェアクロックをシステムクロックに合わせます。
●時計が少しづつずれる(大幅に狂っている場合はこちら)
→ makeなどの重い処理を行うと、時間が少し狂うそうです
1.NTPによる時刻修正
# /usr/sbin/ntpdate 日本のNTPサーバ 例:clock.nc.fukuoka-u.ac.jp
システムクロック修正 ntpdateはxntpパッケージに含まれている
# /sbin/hwclock --systohc ハードウェアクロックをシステムクロックに合わせます。
●JAVA2 SDK(jdk)が動作しない
→ glibc との相性の問題の可能性が高い。まずglibcを最新版にアップデートをしてみること
例)[JDK1.3]と[glibc-2.1.3-19]
ネットワークからの利用
・ユーザにリモートログインさせないで、FTPサービスだけを提供する(proftpd)
1) /etc/shells に /etc/ftponly を追加
2) /etc/proftpd.conf に次の行を追加
RequireValidShell no
3) 対象のユーザのログインシェル指定( /etc/passwd )を /etc/ftponly に変更
httpデーモン(Apache)の基本設定
1) /etc/httpd/conf/httpd.conf を編集
ServerName サーバのホスト名
ServerAdmin サーバ管理者のメールアドレス
2) apache再起動
# /etc/rc.d/init.d/httpd restart
FTPデーモン(proftpd)の基本設定 ※VineLinux2.1の場合はこちらのページも参照
1) /etc/proftpd.conf を編集
ServerName "サーバのホスト名など "
ServerAdmin "サーバ管理者のメールアドレス "
DenyFilter \*.*/
→ DoSアタックの防止
Persistent Passwd off
→ 新しく登録したユーザがログインできない場合に
LsDefaultOptions "-a"
→ ドットファイル(隠しファイル)を常に表示
2) proftpd再起動
# /etc/rc.d/init.d/proftpd restart
STMPデーモン(postfix)の基本設定
1) /etc/postfix/main.cf を編集(ドメインを代表するメールサーバの場合は適宜変更が必要)
myhostname = サーバのFQDN
mydomain = ドメイン名
myorigin = $myhostname ……サーバが直接メールを送信する場合のメールドメインを記述
mynetwork = IPアドレス/プリフィックス値, 127.0.0.0/8
inet_interface = all
mydestination = $myhostname, localhost.$mydomain
alias_maps = hash:/etc/postfix/aliases
allow_mail_to_commands = alias,forward,include ……[:include:]を使えるようにする(メーリングリストを運営する場合など)
smtpd_recipient_restricitions =
regexp:/etc/postfix/regexp_access ……2)のルールを適用
permit_mynetworks ……$mynetworkに含まれていればOK
permit_relay_domains
reject
2) /etc/postfix/regexp_access を新規作成 → user@domain形式以外の%や!を利用したリレー禁止
/[%!@].*[%!@]/ 505 Sender specified routing is not supported here.
※ デフォルトでも「受け取ったあとに拒否する」ので実質は問題はないらしい
3) /etc/aliases を編集 → root宛のメールを一般ユーザに転送させる
※ セキュリティ面の配慮からroot権限でファイル書き込みをすると危険なため
4) aliasデータベース作成
# sendmail -bi または # newaliases
5) Postfix起動
# postfix start
6) 正しくメール配送・スパム(spam)メール排除ができていることを確認したら、 /sbin/chkconfig で自動起動する
http://www.nanet.co.jp/rlytest/relaytest.htmlやhttp://www.paladincorp.com.au/unix/spam/spamlart/などで不正な第三者中継を行っていないか自動で調査できる