スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
[Ubuntu] smbclient使用詳細メモ
投稿日時 : 2007-12-04 13:43
smbclientの使い方自体は難しいわけではないけどWindowsがおかしな挙動をするおかげでちょっとはまったのでそのあたりを使い方と合わせてメモ。
 
■環境
以下の環境で実行している。
環境
[ネットワーク環境]
mv1c3e(Ubuntu Linux)    192.168.0.3/24
c610(WindowsXP)         192.168.0.2/24

[Windowsのユーザ]
itmst  パスワード設定なし
itmst2 パスワード設定あり

[Windowsのワークグループ名]
WORKGROUP

[Windowsの共有フォルダ]
D:\desktop
D:\
Z:\

[共有フォルダのアクセス制限]
デフォルトで許可ユーザとして「Everyone」が指定されている。
 
Ubuntu7.10に標準インストールされているSamba関連パッケージ
samba-common   サーバ・クライアントともに必要とする基本パッケージ
smbclient       CUIクライアント
libsmbclient    他のアプリケーション用共有ライブラリ
これだけ入っていればとりあえずsmbclientでWindowsの共有フォルダにはアクセスできる。
 
■設定
Windowsのワークグループの設定をする。Windows側に合わせて「WORKGROUP」というワークグループ名に変更。
/etc/samba/smb.conf
[global]
workgroup = WORKGROUP
 
■Windows側で公開されている共有フォルダを確認
以下のコマンドで公開されているフォルダを確認する。
書式
$ smbclient -L <コンピュータ名 or IPアドレス> -U <ユーザ名>
 
共有フォルダを確認
itmst@mv1c3e:~$ smbclient -L c610 -U itmst
Password: 
Domain=[C610] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

        Sharename       Type      Comment
        ---------       ----      -------
        IPC$            IPC       Remote IPC
        D$              Disk      Default share
        D               Disk      
        Z$              Disk      Default share
        Z               Disk      
        desktop         Disk      
        ADMIN$          Disk      Remote Admin
        C$              Disk      Default share
Domain=[C610] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
-Lオプションで公開フォルダの一覧を取得、-UオプションでWindowsのユーザ名を指定。 パスワードを求められるが、Windows側のitmstにはパスワードが設定されていないので何も入力せずにEnterでOK。ユーザ名を指定しなかった場合は、
smbclientコマンド:ITpro
このオプションを指定しない場合は環境変数「USER」と「LOGNAME」を順番に調べて,その設定をユーザー名として指定する。環境変数もない場合はユーザー名としてGUESTを使う。
ということなので、Linux側のユーザ名とWindows側のユーザ名を統一しておけば楽だしわかりやすい。
 
Default share
Sharenameが「desktop」「D」「Z」となっているものがWindows側で手動で共有設定したフォルダ。「C$」「D$」「Z$」はコメントにある通り「Default share」でドライブのルートが自動的に公開されているもの。このフォルダにアクセスするには、Windows側でユーザとして登録されており、かつパスワードが設定されていなければならない。これを知らなくて少しはまった。

 
謎の仕様1
もしここで-Uオプションでパスワード設定がされているitmst2を指定した場合は、正しいパスワードを入力しなければログオンに失敗する。 ここまでは当たり前のことだが、適当なユーザ名、例えばhogeを指定した場合、パスワードは入力しなくても、適当に入力してもログオンできてしまう。つまり正規ユーザであってもパスワードを忘れると不正規ユーザよりもログオンが難しくなってしまう。なんだ?この仕様。
 
■Windowsの共有フォルダにsmbclientで接続する
書式
$ smbclient //<コンピュータ名 or IPアドレス>/<共有名> -U <ユーザ名>
 
itmst@mv1c3e:~$ smbclient //c610/D -U itmst
Password: 
Domain=[C610] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> ls
  desktop                         D        0  Tue Dec  4 12:25:28 2007
  down                            D        0  Mon Nov 26 13:14:33 2007
  md5.bak.js                      A    10353  Wed Oct 31 12:01:44 2007
  md5_cscript.js                  A    10794  Wed Oct 31 13:32:44 2007
  MyProgram                       D        0  Mon Sep 17 14:09:40 2007
  VMware                          D        0  Sat Nov 17 12:18:43 2007
  wallpaper                       D        0  Sat Nov 10 10:15:02 2007

                46186 blocks of size 524288. 16414 blocks available
謎の仕様2
やはりここでもUオプションでパスワード設定がされているitmst2を指定した場合は正しいパスワードを入力しなければログオンに失敗する。
itmst@mv1c3e:~$ smbclient //c610/D -U itmst2
Password: ←わざと間違ったパスワードを入力
session setup failed: NT_STATUS_LOGON_FAILURE
にもかかわらず、適当なユーザ名とパスワードを入力するとログオンできる。
itmst@mv1c3e:~$ smbclient //c610/D -U hoge
Password: ←適当なパスワードを入力
Domain=[C610] OS=[Windows 5.1] Server=[Windows 2000 LAN Manager]
smb: \> ls
  desktop                      D        0  Tue Dec  4 12:25:28 2007
  down                         D        0  Mon Nov 26 13:14:33 2007
(省略)
別にセキュリティホールとかなわけじゃないけどなんか気持ち悪い。
 
■ログオン後の操作
ログオンした後の操作はlsで一覧、cdでディレクトリ移動、getでファイルダウンロード、putでアップロードなどFTPコマンドとほぼ同じ。スペースを含むパスの場合は「"」(ダブルクォーテーション)で囲む必要がある。
 
smbclientコマンド:ITproの「対話型モードでの利用」の項を参照。
 
 
[参考]
Sambaの設定 | LIVE FREE OR DIE.
 
スポンサーサイト
2007-12-04 13:43 | Linux | Comment(0) | Trackback(0)
ランレベルとサービス起動プロセスのまとめ
投稿日時 : 2007-12-04 03:07
現在勉強用に使っているUbuntu7.10には一般的なLinuxの起動プロセスで重要な役割を果たす/etc/inittabが存在しないことが分かった。起動を高速化するためにupstartという新しい仕組みを導入したらしく、各種設定ファイルは/etc/event.dディレクトリに移動している。
2007年12月現在、upstartを採用しているディストリビューションはUbuntu以外には皆無なようでネット上の情報が極端に少ない。
Linux初心者がいきなり特殊な仕組みを少ない情報で理解するのは難しい気がしたので、とりあえず一般的なディストリビューションで採用されている/etc/inittab系の仕組みをまとめることにする。
 
■RedHat系とDebian系での/etc以下のディレクトリ構造の違い
RedHat系とDebian系では/etc以下のディレクトリ構造が微妙に違っている。 RedHat系では「/etc/rc.d」配下に「rc0.d」や「rc1.d」、「init.d」、「rc」、「rc.sysinit」などがあるのに対して、Debian系では「/etc」直下にそれらのファイル、ディレクトリが存在している。以下の説明ではRedHat系でのディレクトリ構造で説明している。
 
■/etc/inittabの役割
システムが起動すると、まずinitというプロセスが立ち上がる。initは/etc/inittabの設定を元にシステムを初期化する。
 
■/etc/inittabの書式
<id>:<ランレベル>:<アクション>:<プロセス>
 
「:」(コロン)区切りの各フィールドの意味
id          inittab内のエントリーを識別する名前(2~4文字)
ランレベル  エントリが実行されるランレベル(省略で全レベルで実行)
アクション  動作の種類
プロセス    実行するプロセスのパス
アクションの種類
initdefault  デフォルトのランレベル
sysinit      起動時にすべてのランレベルで実行
boot        sysinit実行後にすべてのランレベルで実行
bootwait    sysinit実行後すべてのランレベルで実行、initはその終了まで待機
ctrlaltdel  Ctrlキー、Altキー、Deleteキーを同時に押したときに実行
wait        一度だけ実行され、initはこの処理が終了するまで待機
respawn     指定したプロセスが終了した場合に再起動
 
■デフォルトランレベル
/etc/inittab
id:5:initdefault:
の行でデフォルトのランレベルが決定されている。書式に照らし合わせるとidが「id」、ランレベルが「5」、アクションが「initdefault」、プロセスが「空白」になっている。この設定だとランレベル5で起動される。ランレベルは0~6まで。各ランレベルは次のような意味になる。
ランレベル一覧
0      停止
1      シングルユーザモード
2      NFSなしのマルチユーザモード(NFS以外は3と同じ)
3      テキストログインのマルチユーザモード
4      未使用(ユーザ定義用)
5      グラフィカルログインのマルチユーザモード
6      再起動
デフォルトランレベルを0や6にすると起動できなくなるので注意。
UbuntuやFedoraではデフォルトでGUIが起動するのでランレベル5で起動していることになる。
 
■ハードウェアの設定など
/etc/inittab
si::sysinit:/etc/rc.d/rc.sysinit
第二フィールドのランレベルが空白だがこれはランレベルとは無関係にシステムのブート時に/etc/rc.d/rc.sysinitが実行されることを意味する。
/etc/rc.d/rc.sysinitは日付時刻やキーマップの設定、基本的なファイルシステムのマウントなどのシステムの初期化を担当。
 
■ランレベルに応じたサービスの制御
ランレベルごとに起動するサービス、終了するサービスを以下の設定で制御している。
/etc/inittab
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
書式に照らし合わせると、例えば1行目だとエントリID「l0」はランレベル「0」のときに「etc/rc.d/rc」プロセスを引数「0」を与えて呼び出す、という意味になる。
 
□/etc/rc.d/rcの役割
/etc/rc.d/rcはbashスクリプトで、受け取った引数(ランレベル)に応じて、「/etc/rc.d/rc0.d」や「/etc/rc.d/rc1.d」のようにランレベルごとにディレクトリ分けされたサービス制御スクリプトの一覧を取得し、それらに適切な引数を与えて実行することで、サービスの終了/開始を一元的に管理している。
ここで/etc/rc.dディレクトリのファイル一覧を確認しておく。
/etc/rc.dのファイル一覧
$ ls -l /etc/rc.d
合計 112
drwxr-xr-x 2 root root  4096 2007-12-04 01:03 init.d
-rwxr-xr-x 1 root root  2464 2007-07-18 00:14 rc
-rwxr-xr-x 1 root root   220 2003-06-24 05:02 rc.local
-rwxr-xr-x 1 root root 25880 2007-10-09 23:55 rc.sysinit
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc0.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc1.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc2.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc3.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc4.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc5.d
drwxr-xr-x 2 root root  4096 2007-11-30 10:33 rc6.d
/etc/rc.d/rc<ランレベル>.dに収められているファイルは特殊な命名規則を持っている。/etc/rc.d/rc5.dディレクトリを例に見てみる。
/etc/rc.d/rc5.dのファイル一覧
$ ls /etc/rc.d/rc5.d
K01smartd                    K89pand           S26udev-post
K02NetworkManager            K89rdisc          S27messagebus
K02NetworkManagerDispatcher  K91capi           S27setroubleshoot
K05saslauthd                 S00microcode_ctl  S28autofs
K10psacct                    S05kudzu          S44acpid
K15gpm                       S06cpuspeed       S50bluetooth
K15httpd                     S08ip6tables      S55sshd
K20nfs                       S08iptables       S58ntpd
K24irda                      S09isdn           S80sendmail
(省略)
/etc/rc.d/rc<ランレベル>.dの命名規則
K<番号><スクリプト名>
S<番号><スクリプト名>
「K」で始まるファイルは終了するサービス、「S」で始まるファイルは開始するサービス。「番号」は処理の優先度。小さな番号であるほど先に処理される。その後に続く「スクリプト名」は呼び出されるスクリプト名。
ここで重要な点はこれらのファイルはすべて/etc/rc.d/init.d内のファイルへのシンボリックリンクだということ。
/etc/rc.d/rc<ランレベル>.d内のファイルはシンボリックリンク
$ ls -l /etc/rc.d/rc5.d
lrwxrwxrwx 1 root root 13 2007-11-22 22:57 K15gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 15 2007-11-22 23:12 K15httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 13 2007-11-22 23:14 K20nfs -> ../init.d/nfs
lrwxrwxrwx 1 root root 14 2007-11-22 23:02 K24irda -> ../init.d/irda
lrwxrwxrwx 1 root root 14 2007-11-22 23:11 S98cups -> ../init.d/cups
lrwxrwxrwx 1 root root 15 2007-11-22 23:02 S90crond -> ../init.d/crond
lrwxrwxrwx 1 root root 15 2007-11-22 14:54 S90smolt -> ../init.d/smolt
lrwxrwxrwx 1 root root 13 2007-11-22 23:02 S95atd -> ../init.d/atd
(一部抜粋)
実際に/etc/rc.d/init.dを見てみると以下のようにサービスを制御するスクリプトの実体が格納されている。
/etc/rc.d/init.d内にある個々のサービス制御スクリプト
$ ls /etc/rc.d/init.d
ConsoleKit                dund        mdmonitor      rpcbind
NetworkManager            firstboot   messagebus     rpcgssd
NetworkManagerDispatcher  functions   microcode_ctl  rpcidmapd
acpid                     fuse        multipathd     rpcsvcgssd
anacron                   gpm         netconsole     rsyslog
atd                       haldaemon   netfs          saslauthd
auditd                    halt        netplugd       sendmail
autofs                    hsqldb      network        setroubleshoot
avahi-daemon              httpd       nfs            single
bluetooth                 ip6tables   nfslock        smartd
btseed                    iptables    nscd           smolt
bttrack                   irda        ntpd           sshd
capi                      irqbalance  pand           udev-post
cpuspeed                  isdn        pcscd          winbind
crond                     killall     psacct         wpa_supplicant
cups                      kudzu       rdisc          ypbind
cups-config-daemon        lm_sensors  restorecond    yum-updatesd
これらのファイル名の頭に「K」か「S」、続いて優先度番号をつけたファイル名で/etc/rc.d/r c5.d以下にシンボリックリンクとして格納されているということになる。
 
□/etc/rc.d/rcの実際の処理
では/etc/rc.d/rcが実際どのように振る舞うかを見ていく。
/etc/rc.d/rcは/etc/inittabで設定された通り、ランレベルが変更された時に変更後のランレベルを引数に呼び出され、その引数をもとに、「/etc/rc.d/rc<ランレベル>.d」のうちどのディレクトリのファイル一覧を取得するか決定する。一覧が取得できたら、そのファイル名を解析し、上記の説明の通り、終了するのか開始するのか、優先度はいくつで制御スクリプトの名前は何かを判定する。
 
例えば「/etc/rc.d/rc5.d/S98cups」の場合なら、ランレベルが5になったとき、ファイル名の先頭が「S」ということから開始、優先度は「98」、スクリプト名は「cups」なので、優先度97以下のスクリプトが実行された後、
/etc/rc.d/init.d/cups start
が実行される。
「/etc/rc.d/rc5.d/K15httpd」の場合なら、ランレベルが5になったとき、ファイル名の先頭が「K」ということから終了、優先度は「15」、スクリプト名は「httpd」なので、優先度が14以下のスクリプトが実行された後、
/etc/rc.d/init.d/httpd stop
が実行されることになる。
 
これらは手動で
# /etc/rc.d/init.d/cups start
# /etc/rc.d/init.d/httpd stop
としたり、
# service cups start
# service httpd stop
などと実行したのとまったく同じこと。
 
このようにランレベルの変更イベントを受けて自動的にサービスの開始/終了を実行する仕組みになっている。
 
■ランレベルを手動で変更する
起動後にランレベルを手動で変更することもできる。ランレベル5でGUI環境も起動した状態から、NFSありのCUIモードであるランレベル3に変更するには以下のコマンドを実行する。
# telinit 3
 
2007-12-04 03:07 | Linux | Comment(0) | Trackback(0)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。