その他

提供: Wikinote
2009年1月19日 (月) 11:01時点における210.143.35.22 (トーク)による版 (ネットワーク起動の流れ)

移動: 案内検索

居候していた部屋の荷物を自宅に持ち込みました。

やるべきことは、遠くにぼんやり見えるものを見ることではなく、
手近にはっきり見えるものを行うことである。-- トーマス・カーライル

覚え書き

Apache

  • /etc/httpd/conf/httpd.conf

とりあえず編集したとこ

ServerName hagio.org:80
DocumentRoot "/home/hagio/public_html"
<Directory "/home/hagio/public_html">
...
DirectoryIndex intex.html index.html.var index.php
$ chmod 711 /home/hagio
$ chmod 755 /home/hagio/public_html
  • 方針
    • エンコーディング:UTF-8

awk

  • 基本構文
awk [-F sep] 'command' [file ...]
  • 組み込み変数
    • FS - フィールドセパレータ
    • NR - 現レコード数
    • NF - フィールド数
    • OFS - 出力フィールドセパレータ (print のカンマ区切りのセパレータ)
    • ORS - 出力レコードセパレータ
  • 演算子
    • ~ - マッチしたら真 ($0 ~ /re/)
    • 他はほぼ C と同じ
  • 制御構文
    • break, continue - for や while の中で使う
    • next - 次のレコードへ処理を移す
    • exit - 残りのレコードは見ないで処理を中断
  • 配列
    • array[i] - 一次元配列
    • array[i,j,k] - 三次元配列
    • array[str] - 連想配列
      • for (x in array) ... ですべてのキーを取り出し可能
      • if (str in array) ... でキー str があるかどうか
      • array[str] = array[str] "hoge" で連結可能
  • その他
    • 変数の初期化は不要
    • print $1 $2 で連結出力、カンマ区切りでスペース
    • { print $0; } = { print; } =
    • 配列は参照渡し
    • -f program で自作ライブラリを複数取り込める
    • $n (n > 0) を書き換えると、$0 も書き換わる

sed

  • 基本構文
sed [-n] [-e command] [-f command_file] [file ...]
-n
マッチしなかったら表示しない
  • アドレス
    • n - n 行目のみ (最終行 : $)
    • m,n - m 行目から n 行目まで
    • n,/str/ - n 行目から str がマッチする行まで
    ※ アドレスの後に ! を付けると否定
  • コマンド
    • p - 出力
    • d - 削除
    • y - 一文字置換 (tr コマンドと一緒)
    • s - 置換
    • q - 終了
  • フラグ
    • g - 同一行中のマッチをすべて置換


make

  • コマンドの前に '-' をつけると、エラーが発生しても make を続ける
  • コマンドの前に '@' をつけると、コマンドを標準出力に表示しない

bash

  • export は、その変数を子プロセスに引き継ぐ場合に用いる。
  • Meta キーは ESC キーで代用可。(Poderosa では有用)

起動時の設定ファイルの読み込み順序

  • ログインシェルの場合 (ログイン時、su - user 時など)
    1. /etc/profile
    2. /etc/profile.d/*.sh
    3. ~/.bash_profile
    4. ~/.bashrc
    5. /etc/bashrc
  • ログインシェルでない場合 (bash 実行時、su user 時など)
    1. ~/.bashrc
    2. /etc/bashrc
    3. /etc/profile.d/*.sh

以下のコマンドで確認できる。

# strace -f -e trace=open -o su-bash.strace su - hagio

シェルスクリプト

コマンド

  • 行末までキル:C-k
  • 行頭までキル:C-u
  • 前単語をキル:C-w
  • ヤンク:C-y
  • 直前のコマンドの最後の引き数を挿入:M-. (これは便利)
  • キャンセル:C-g
  • 後方検索:C-r (これらは使い方が難しい)
  • 前方検索:C-s
  • 最終行へ:M-> (Poderosa では打ちにくい…)

.bashrc

カスタマイズしたものに慣れてしまうと、素の状態にすぐに適応できなくなってしまうので良くないが、 それでも背に腹は代えられないモノたち。

alias ..='cd ..'
alias la='ls -a'
alias ll='ls -l' # Red Hat では標準
alias lla='ls -la'
alias llh='ls -lh'
alias s='screen'
alias grep='grep -i --color=auto'

# 自動 ls
function cd { builtin cd $@; ls }
# Ctrl-s でのストップ機能を止める
stty stop undef

grep

  • or をとりたい場合:-e オプションで羅列

例)

$ ifconfig | grep -e "^\w" -e inet
  • 検索文字列をハイライト表示

.bashrc に以下を追加しておく。

export GREP_COLOR='1;37;41'
alias grep='grep --color=auto'


ネットワーク

ソースより厳密な説明書はない。

ネットワーク起動の流れ

network rc スクリプトの動作を追う。

  1. /etc/init.d/functions を実行 (主に関数定義)
    内容はそのうち読む。
  2. /etc/sysconfig/network を読む (設定ファイル)
  3. NETWORKING が no でなければ、以下に進む
  4. カレントディレクトリを /etc/sysconfig/network-scripts に変更
  5. ./network-functions を実行 (関数定義)
    ネットワーク関係の関数定義。これもそのうち読む。
  6. 処理すべきインターフェースを取得
    こちらで少し詳しく解説。

/etc/sysconfig/network

参考:15.1.22. /etc/sysconfig/network

  • NETWORKING=yes|no
/etc/rc.d/init.d/network を見ると以下のようになっているため、NETWORKING=no 以外はすべて yes とみなされるようだ。よって、必須ではないと思われる。
# Check that networking is up.
[ "${NETWORKING}" = "no" ] && exit 0
  • HOSTNAME=ホスト名
FQDN を記述する。/etc/sysconfig/network-scripts/ifup-post で設定される。
  • GATEWAY=デフォルトゲートウェイの IP アドレス
  • GATEWAYDEV=ゲートウェイデバイス (eth0 等)
/etc/sysconfig/network-scripts/ifup-eth0 で設定されているようだが、詳細がよくわからない。
  • NISDOMAIN=NISドメイン名
NIS は、Network Information Service の略。/etc/rc.d/init.d/ypbind で用いられる。

/etc/sysconfig/network-scripts/ifcfg-<if>

参考:14.2.1. Ethernet Interfaces

  • ONBOOT=yes|no
network スクリプトによると、やはり no でなければ yes と言ったことと同じであるようだ。嫌なら嫌とはっきり言いましょう。ちなみに、grep はパターンが出現しなければ 1 となる。-L オプションは、パタンが出現しないときにファイル名を出力するものだが、単に 1 個見つかったらそれ以上検索しないようにしているだけだと思われる。
       if LANG=C egrep -L "^ONBOOT=['\"]?[Nn][Oo]['\"]?" ifcfg-$i > /dev/null ; then
               # this loads the module, to preserve ordering
           is_available $i
           continue
       fi
  • DEVICE=デバイス名
設定がない場合、ifcfg-* の * の部分がデバイス名となる。そのため、ifcfg ファイルは適当な名前を付けるとネットワークに支障をきたす恐れがあるので注意。ifcfg ファイルのバックアップは、別ディレクトリに置くかまたは拡張子を必ず .bak か .orig で行うこと。なぜなら、/etc/rc.d/init.d/network では以下の部分で読むべきコンフィグファイルを探しているが、ls をフィルタにかけているだけの原始的設計のため。
# find all the interfaces besides loopback.
# ignore aliases, alternative configurations, and editor backup files
interfaces=$(ls ifcfg* | \                               ★ ifcfg で始まるファイル名
        LANG=C sed -e "$__sed_discard_ignored_files" \   ★ 無視するファイル名を削除
               -e '/\(ifcfg-lo\|:\|ifcfg-.*-range\)/d' \ ★ lo 及び仮想 IP を削除
               -e '/ifcfg-[A-Za-z0-9\._-]\+$/ { s/^ifcfg-//g;s/[0-9]/ &/}' | \
                                     ★ ifcfg- 部分を削除し、数字部分を分離
        LANG=C sort -k 1,1 -k 2n | \ ★インターフェース名でソート? -k 2n ってなんだ?
        LANG=C sed 's/ //')          ★分離していた数字部分を再び結合
$__sed_discard_ignored_files/etc/rc.d/init.d/functions で定義されている。拡張子が .bak か .orig でなければならない理由。あ、~ (チルダ) でも良いのね。
# A sed expression to filter out the files that is_ignored_file recognizes
__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d'
どういう出力になるか、メモしておこう。
[hagio@k-hagio-ab2 lab]$ ll
total 0
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-bond0
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-eth0
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth0:0      ★IP エイリアス
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth0~       ★バックアップ
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-eth1
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth1.backup ★バックアップ
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:13 ifcfg-eth1.bak    ★バックアップ
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:16 ifcfg-hage        ★ハゲ☆インターフェース
-rw-rw-r-- 1 hagio hagio 0 Jan 16 15:12 ifcfg-lo
[hagio@k-hagio-ab2 lab]$ ls ifcfg* | LANG=C sed - "...
bond0
eth0
eth1
eth1.backup ★アウトー!!
hage        ★DEVICE=デバイス名 が正しく設定されていればセーフ
  • HWADDR=MACアドレス
ifup-eth でチェックされる。
  • BOOTPROTO=none|dhcp|bootp
static などというものはない!(dhcp と bootp 以外は意味を持たない)
  • IPADDR=IPアドレス
    • NETMASK=ネットマスク
    • NETWORK=ネットワークアドレス
    • BROADCAST=ブロードキャストアドレス
これらは IP アドレスさえ設定すれば、ipcalc コマンドで自動的に計算される。
  • DHCP_HOSTNAME=DHCPホスト名
DHCP サーバに送るホスト名。/etc/dhclient-<if>.conf に以下のように追記される。
$ cat /etc/dhclient-eth0.conf 
send host-name "k-hagio-ab2";  # temporary RHL ifup addition
  • MASTER=bonding インターフェース名
bonding で使用する。SLAVE も設定が必要。
  • SLAVE=yes|no
bonding で利用する。MASTER によって制御されるかどうかを示す。興味深いことに、こちらの設定は yes 以外はすべて意味がない。MASTER にとって、yes と言わない SLAVE は存在価値がないのだ。
  • BONDING_OPTS=オプション
bonding で利用するオプション。ifup-eth によって、/sys/class/net/デバイス名/bonding/ 配下にファイルが作られる。
  • SRCADDR=IPアドレス
送信パケットの IP アドレス
  • USRCTL=yes|no
ルートユーザ以外がこのインターフェースを制御できるかどうか
  • ETHTOOL_OPTS=オプション
ethtool に渡されるパラメタ
   if [ -n "$ETHTOOL_OPTS" ] ; then
       /sbin/ethtool -s ${REALDEVICE} $ETHTOOL_OPTS
   fi

/etc/sysconfig/static-routes

ルーティング (行頭の any より後ろが route add にそのまま渡される。)

netfilter

カーネルの高機能なパケットフィルタリングシステム。

私は真にわかりやすい説明を思いついたが、この余白はそれを書くには狭すぎる。-- hagio

Google 先生

tcp_wrappers

/etc/hosts.* を用いたアクセス制御を提供する。

基本的な構文

daemon_list: client_list[:options]
  • daemon_list
    • コンマ区切りの実行ファイル名リスト (サービス名ではない)
    • ワイルドカードである ALL, EXCEPT も利用可能
  • client_list
    • コンマ区切りの以下の要素からなるリスト
      • IP アドレス
      • ホスト名
      • ドットで終わるネットワーク (例:10.34.125.)
      • ドットで始まるドメイン名 (例:.hoge.org)
      • ネットワーク/ネットマスク (例:192.168.1.0/255.255.255.0) ※/24 ぢゃダメ
    • ワイルドカード
      • ALL - すべてにマッチ
      • EXCEPT - 除外リストを指定できる
例)
sshd: ALL EXCEPT .hoge.org

他にもあるけどマニアックすぎる... (LOCAL, UNKNOWN, KNOWN, PARANOID)

サービスが tcp_wrappers に対応しているかどうかの判別には、 ldd を使って libwrap がリンクされているか確認すればよい。

[root@localhost root]# ldd /usr/sbin/httpd | grep libwrap
[root@localhost root]# ldd /usr/sbin/sshd | grep libwrap
       libwrap.so.0 => /usr/lib/libwrap.so.0 (0x00b2e000)

ということで、httpd (Apache) は /etc/hosts.* ではアクセス制御ができない。

Excel

  • 時刻などの書式のデータを文字列に変換するには
  1. Excel で変換したいデータをコピーする
  2. テキストエディタにペーストする
  3. Excel にペーストする


PowerPoint

  • ファイルサイズを小さくする
  1. 保存オプションの「高速保存」をオフにする
  2. あらびっくり


VMware

# vmware-vim-cmd vmsvc/power.on 16

教訓

  • 自分が納得しなければ、相手を納得させることはできない。


リンク


Linux ルータ構築手順メモ

マシン:Express5800/110Ge どノーマル

  1. Ethernet ポートが 1 つしかないので、NIC を買ってぶっ挿す (Realtek RTL-8169 チップだった)
  2. 起動時 F2 で BIOS 設定に移行し、"Advanced" で "Reset Configuration Data" を [Yes] にする
  3. 起動すると、kudzu により各種設定が行われる。
[root@localhost ~]# cat /etc/modprobe.conf
alias eth0 e1000e
alias scsi_hostadapter ahci
alias eth1 r8169 ★
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
# Realtek Semiconductor Co., Ltd. RTL-8169 Gigabit Ethernet
DEVICE=eth1
ONBOOT=no ★デフォルトは yes
#BOOTPROTO=dhcp ★コメントアウトする
HWADDR=00:0a:79:98:df:13
  1. PPPoE の設定を行う
[root@localhost ~]# adsl-setup 

Welcome to the ADSL client setup.  First, I will run some checks on
your system to make sure the PPPoE client is installed properly...


LOGIN NAME

Enter your Login Name (default root): xxxxx@yyyy

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 ethX, where 'X' is a number.
(default 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 dynamic 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: server

PASSWORD

Please enter your Password: 
Please re-enter your Password: 

USERCTRL

Please enter 'yes' (three letters, lower-case.) if you want to allow
normal user to start or stop DSL connection (default yes): yes

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): 2

Start this connection at boot time

Do you want to start this connection at boot time?
Please enter no or yes (default no):yes

** Summary of what you entered **

Ethernet Interface: eth1
User name:          xxxxx@yyyy
Activate-on-demand: No
DNS addresses:      Supplied by ISP's server
Firewalling:        MASQUERADE
User Control:       yes
Accept these settings and adjust configuration files (y/n)? y
Adjusting /etc/sysconfig/network-scripts/ifcfg-ppp0
Adjusting /etc/ppp/chap-secrets and /etc/ppp/pap-secrets
  (But first backing it up to /etc/ppp/chap-secrets.bak)
  (But first backing it up to /etc/ppp/pap-secrets.bak)



Congratulations, it should be all set up!

Type '/sbin/ifup ppp0' to bring up your xDSL link and '/sbin/ifdown ppp0'
to bring it down.
Type '/sbin/adsl-status /etc/sysconfig/network-scripts/ifcfg-ppp0'
to see the link status.
  1. セキュリティ向上のため、不要なサービスを停止する
  • apmd, atd, cups, sendmail など。まだありそう
  1. ip_forward を許可する
# vi /etc/sysctl.conf
 :
# Controls IP packet forwarding
net.ipv4.ip_forward = 1 ★
 :
  1. iptables 設定用のシェルスクリプトを書く (参考)
#!/bin/sh

IPTABLES='/sbin/iptables'

# リセット
$IPTABLES -F
$IPTABLES -t nat -F

# ポリシーの設定
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

# INPUT チェイン
$IPTABLES -A INPUT -p icmp -j ACCEPT
#$IPTABLES -A INPUT -p tcp --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A INPUT -i eth0 -s 192.168.1.0/24 -j ACCEPT
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# FORWARD チェイン
$IPTABLES -A FORWARD -i eth0 -o ppp0 -s 192.168.1.0/24 -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# POSTROUTING チェイン
$IPTABLES -t nat -A POSTROUTING -o ppp0 -s 192.168.1.0/24 -j MASQUERADE

# 設定の確認
$IPTABLES -L
$IPTABLES -t nat -L
  1. Linux をルータとして使うための Mac の設定
  • システム環境設定 → Ethernet
構成:手入力
IP アドレス:192.168.1.11
サブネットマスク:255.255.255.0
ルーター:192.168.1.10 (Linux の IP アドレス)
DNS サーバ:xxx.xxx.xx.xx (Linux 上での dig の結果) ★固定でいいのか?
検索ドメイン:


ここまで完了。Mac からネットが使えるようになった。

トド (To Do)

  • サーバ名を考える
  • iptables をマスターする
  • Apache + PHP を動かす (日記システムを作り直すか?)
  • DHCP を立てた方がいいのか?
  • DNS はどうするか?
  • 固定 IP オプションを申し込むか?