今日も元気にテクニカル

技術情報書きたいけど本ブログに書きたくないからこんな名前になりました。

シェルの変更

chshコマンドあるいはusermod -sでシェルの変更ができる。

chsh ←自分のログインシェルを変更
chsh -l ←ログインシェルに指定可能なリストを確認(Redhat系)

指定可能なシェル一覧は/etc/shellsファイルに記載してある。これ以外のシェルも指定可能だが、パスを待ちがうと次回ログイン時にシェルを起動できなくなるので注意。

ユーザー管理

  • 新規ユーザーの追加はuseraddコマンドで行う
  • Debian系(Ubuntu)ではadduserで対話的に詳細情報を入力できる
  • Redhat系ではadduserはuseraddへのシンボリックリンクとなっている
  • userdel -r [ユーザーID]で削除するユーザーのホームディレクトリも消す
  • usermodでユーザー情報の変更。オプションはいろいろ
  • パスワードはpasswdコマンドで設定
  • /etc/passwdにユーザー一覧、/etc/shadowにパスワード一覧(暗号化済み)

sambaの設定(ユーザー・共有管理)

sambaを使うにはOSのユーザーと別途ユーザー登録をする必要がある。コマンドは"smbpasswd"を使う。passwdのsamba版みたいなもん。ここでWindows(というかアクセス元PC)と同じユーザー名・パスワードを設定すると、samba共有にアクセスするときいちいちユーザー名・パスワードを入力しなくて良いので便利。

samba自体の詳しい設定は/etc/samba/smb.confをいじる。まぁここらへんは詳しく追い出すときりがないので省略。文法ミスがないかのチェックにtestparmを使う。

# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[public]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

LinuxからWindowsの共有ファイルをマウント

Windows上のファイルにLinuxからアクセスするには
Windows上のファイルにLinuxからアクセスするには(mount.cifs編) − @IT

LinuxからWindows共有がかかっているディレクトリをマウントするにはsmbmountかcifsを使用する。ちなみにファイルシステム"smbfs"としてマウントする時は、smbmountコマンドとmount -t smbfsの2つが使えるが、cifsはmountコマンドのみである。といってもmountに統一してくれた方がやりやすくていい。

smbmount //192.168.1.101/share/ /home/user01/tmp
mount -t smbfs (-o user=user01) //192.168.1.101/share /home/user01/tmp
mount -t cifs (-o user=user01) //192.168.1.101/share /home/user01/tmp

※括弧でくくってあるが、userは実質必須。

CentOS5ではsmbfsが廃止されcifsを使うようになっているので、smbfsは今後なくなっていくんじゃないかなぁ。

SMBとCIFSの違いはこちら。

基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT

SMBの方がNetBIOSを使用した比較的古い共有プロトコル。CIFSはTCP/IPオンリーの新しめの共有プロトコル

ちなみにnfs

LINUXの伝統的なファイル共有にNFSというのがあるのだが、さまざまなOSが混在する今では今ではあまり使われなくなったらしい。ただし試験には出る。

忘れっぽいのでもう一度各種設定確認ファイル

CPU/ディスク情報確認 /proc/cpuinfo /proc/devices
ディスク容量確認 df -h du-sm
ネットワーク全般 /etc/sysconfig/network
IPアドレス設定 /etc/sysconfig/network-scripts
サービス設定確認(各ランレベルでの設定) chkconfig --list
サービス設定確認(現在の状況) service --status-all
サービス設定 chkconfig [サービス名] on/off/reset
サービスONOFF service [サービス名] start/stop/restart

sambaについて(プロセス管理)

sambaとはLINUXのファイル共有プログラムである。windowsで言うところのsmbってところかな…。ありゃプロトコルだけど。

基礎から学ぶWindowsネットワーク:第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3) - @IT

LINUXsambaの実行プログラムはnmbd(NetBIOSのネームサーバーデーモン)とsmbd(sambaサーバのデーモン)である。

# whereis nmbd
nmbd: /usr/sbin/nmbd /usr/share/man/man8/nmbd.8.gz
# whereis smbd
smbd: /usr/sbin/smbd /usr/share/man/man8/smbd.8.gz

こいつらを常時起動でアクセス待ち受けでも良いのだが、ポートを監視してアクセスがあったときだけサービスを起動する、インターネット系スーパーサーバ"xinetd"を使うとメモリが節約できる。

xinetdの使い方

1./etc/servicesファイルの設定

これはxinetd用インデックスファイルみたいなもの。どのポートがどのサービスを受け持っているか定義する。といってもsambaインストール時に追記されている事がほとんどなので編集の必要はないことが多い。

netbios-ns 137/udp
netbios-ssn 139/tcp

2./etc/xinetd.d以下にファイル作成

先ほどのインデックスファイルから参照されるファイルを作成。

$ cat /etc/xinetd.d/netbios-ns
service netbios-ns
{
        disable = no
        socket_type = dgram
        protocol = udp
        wait = yes
        user = root
        server = /usr/sbin/nmbd
        only_from = 192.168.0
}

$ cat /etc/xinetd.d/netbios-ssn
service netbios-ssn
{
        disable = no
        socket_type = stream
        protocol = tcp
        wait = no
        user = root
        server = /usr/sbin/smbd
        only_from = 192.168.0
}

3.xinetdの再起動

スーパーサーバの再起動。

/etc/init.d/xinetd restart

ちなみにこの時点では普通に起動したsambaのプロセスが残ったままである。ので、killするかPC再起動。何もしていないときはsambaのプロセスは起動していないが…

$ ps -aux | grep smb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
user01   3322  0.0  0.2   4976   740 pts/1    R+   13:17   0:00 grep smb

手元のwindowsPCからアクセスに行くとsmbdプロセスが起動される。

[keisuke@eeco init.d]$ ps -aux | grep smb
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ
user01   3354  2.1  1.3  14872  4444 ?        Ss   13:19   0:00 smbd
user01   3359  0.0  0.2   4980   752 pts/1    R+   13:19   0:00 grep smb

余談:chkconfig smb offするとどうなるか?

普通にxinetdで機能します。chkconfigで操作できるのは起動時にどうするかの設定であって、起動してからxinetd経由で起動するsmbにはノータッチ。

killとkillallについて

killは引数としてプロセスIDを取り、killallは引数としてプロセス名やデーモンの名前を取る。killは1つのプロセスのみを殺すが、killallは名前どおり合致したプロセス名全てを殺す。

http://yang.amp.i.kyoto-u.ac.jp/~yyama/FreeBSD/unix/kill-j.html

例えばテンポラリの対応でPC起動時に起動するプロセスをログオンしたタイミングで殺したい。こういう場合、殺すプロセス名は分かっていてもPIDは毎回変わるので指定できない。こういう時はkillallを使う。

引数がPIDか名前かでコマンド名が違うのが使い辛い。WINDOWSみたいにコマンド同じでオプションで変更できればいいのに。

tmpfsってなんですか?

デバイスの話に関連して、tmpfsという面白い機能を勉強。

tmpfsというのは物理メモリ上に一定量のブロックファイルを作成し(デフォルトで物理メモリの半分)、それを任意のディレクトリにマウントしてRAMディスクとして使用できる機能である。

例えば、メモリを3GB積んでるが普段はそんなに使わない。じゃあ、2GBをtmpfsとして/home/user01/chash/とかにマウントして、そこにキャッシュファイルや作業用ファイルなどを置こう。PCを落とすとデータが消えるので必要なら物理ディスク上にコピーしよう、って感じ。

tmpfsが/dev/shmをマウントしている件 - サーバー技術メモ
RAMディスクを作成しHDDへのアクセスを抑制する - ちりあくた

tmpfsってのはファイル名やディレクトリ名ではなくNTFSやFAT32のようなファイルシステム=「機能」として認識するのが正しい。

デフォルト設定

上記で書いたとおり、デフォルトでも物理メモリの半分は/dev/shmにtmpfsとして割り振られる。まぁ/dev以下にわざわざ作業ファイルを保管するのも不自然なので、/dev/shmへのマウントを解除して/tmpやら/home/user01/tmpやら/var/logやらにマウントし直す方が分かりやすいと思われる。それには/etc/fstabを編集し、PC起動時に自動的にtmpfsが働くようにしてやればよい。

tmpfs使うと物理メモリ削るの?

物理メモリの余りを利用して高速のRAMディスクを作る機能なので削ります。ただし削られるのはtmpfsとしてマウントされたディレクトリにファイルを置いたタイミングなので、マウントするだけならタダ。

tmpfs は本当に容量が動的なのか - naoyaのはてなダイアリー

CentOSUbuntuの設定の違い

CentOSは/etc/fstabにtmpfsをマウントする一文が書かれ、/etc/default/tmpfsに書かれている分だけ/dev/shmにマウントするみたいです。まぁデフォルト設定消さなくてもそこにファイルを置かない限りマウントしてないも同然なので気にしなくても問題ないと思いますが。