トップ  > サーバ設定:運用  > 各アプリケーションのインストール  > Webフォルダサーバ構築(WebDAV)+samba

Webフォルダサーバ構築(WebDAV)+samba  (最終更新日:2010/03/29)

内部・外部で共通のファイルサーバを構築します。

外部にはWebサーバのWebDAV機能を利用してWebフォルダでファイル共有をし、内部にはSambaで共有します。

BASIC認証によるアクセス制御をかけ、SSLによる暗号化通信のみ許可します。

Webサーバ構築(Apache)Webサーバ間通信内容暗号化(mod_ssl)Windowsファイルサーバ構築(Samba)が導入されていること。

ACLアクセス制御の有効化

Sambaではホームディレクトリのユーザ権限でアクセスするが、WebDAVではApacheの実行ユーザ権限でアクセスする為、Sambaで作成したファイルの読み取り・書き込みがWebDAV経由で出来ない。逆もまた然り。

そこで、ACLアクセス制御を利用して、WebDAVでアクセスするディレクトリのみ、Apache権限での読み取り・書き込みが出来るようにします。

1.「/home」ディレクトリを別パーティションにしている場合。
[root@sv ~]# vi /etc/fstab ← fstab編集
LABEL=/home             /home                   ext3    defaults        1 2
↓
LABEL=/home             /home                   ext3    defaults,acl    1 2 ← /homeディレクトリのACLアクセス制御を有効化

[root@sv ~]# mount -o remount /home ← ACLアクセス制御を即時有効化
2.「/home」ディレクトリを別パーティションにしていない場合。
[root@sv ~]# vi /etc/fstab ← fstab編集
/dev/VolGroup00/LogVol00 /                       ext3    defaults       1 1
↓
/dev/VolGroup00/LogVol00 /                       ext3    defaults,acl   1 1 ← /(ルート)ディレクトリのACLアクセス制御を有効化※

[root@sv ~]# mount -o remount / ← ACLアクセス制御を即時有効化

共有ディレクトリ作成

[root@sv ~]# useradd -s /sbin/nologin user_m ← user_mユーザ登録

[root@sv ~]# passwd user_m ← user_mのパスワード設定
Changing password for user user_m.
New UNIX password: ← user_mのパスワード入力(非表示)
Retype new UNIX password: ← user_mのパスワード入力確認(非表示)
passwd: all authentication tokens updated successfully.

[root@sv ~]# chmod 711 /home/user_m/ ← ホームディレクトリのパーミッションを変更

[root@sv ~]# mkdir /home/user_m/webdav/ ← 共有ディレクトリを作成

[root@sv ~]# chown user_m. /home/user_m/webdav/ ← 共有ディレクトリの所有者を変更

[root@sv ~]# setfacl -m g:apache:rwx,g:apache:rwx /home/user_m/webdav/ ← 共有ディレクトリへapacheグループ権限で参照・更新・実行を許可

[root@sv ~]# setfacl -m d:g:apache:rwx,g:apache:rwx /home/user_m/webdav/ ← 共有ディレクトリへ新規作成するファイルへapacheグループ権限で参照・更新・実行を許可

[root@sv ~]# setfacl -m g:user_m:rwx,g:user_m:rwx /home/user_m/webdav/ ← 共有ディレクトリへuser_mグループ権限で参照・更新・実行を許可

[root@sv ~]# setfacl -m d:g:user_m:rwx,g:user_m:rwx /home/user_m/webdav/ ← 共有ディレクトリへ新規作成するファイルへuser_mグループ権限で参照・更新・実行を許可

[root@sv ~]# ll /home/user_m/ ← ACLアクセス設定確認
合計 3
drwxrwxr-x+ 2 user_m user_m 1024 11月 28 17:00 dav ← パーミッションの後ろに+が付いていること

[root@sv ~]# getfacl /home/user_m/webdav/ ← 共有ディレクトリのACL設定確認
getfacl: Removing leading '/' from absolute path names
# file: home/user_m/dav
# owner: user_m
# group: user_m
user::rwx
group::r-x
group:apache:rwx ← apacheグループによる参照・更新・実行が許可されている
group:user_m:rwx ← user_mグループによる参照・更新・実行が許可されている
mask::rwx
other::r-x
default:user::rwx
default:group::r-x
default:group:apache:rwx ← 新規作成するファイルにapacheグループによる参照・更新・実行が許可されている
default:group:user_m:rwx ← 新規作成するファイルにuser_mグループによる参照・更新・実行が許可されている
default:mask::rwx
default:other::r-x

ACL設定をクリアする場合
[root@sv ~]# setfacl -b /home/user_m/webdav/ ← ディレクトリのACL設定クリア

WebDAV設定

1.mod_encodingインストール

WindowsでWebDAVサーバに送る文字列符号化形式Shift_JISに対し、WebDAVサーバから送る文字列符号化形式はUTF-8の為、日本語に文字化けが発生します。これを解決する為、mod_encodingをインストールします。

mod_encodingの導入により文字化けはしなくなるが、サーバ上の文字コードがUTF-8の為、コンソール上では文字化けしてしまうので注意。

[root@sv ~]# yum install httpd-devel ← mod_encodingのインストールに必要なhttpd-develをインストール

[root@sv ~]# wget http://webdav.todo.gr.jp/download/mod_encoding-20021209.tar.gz ← mod_encodingダウンロード
※最新版はこちらで確認。(2010/03/29時点。mod_encoding-20021209.tar.gz)

[root@sv ~]# wget http://webdav.todo.gr.jp/download/experimental/mod_encoding.c.apache2.20040616 ← Apache2版mod_encodingダウンロード
※最新版はこちらで確認。(2010/03/29時点。mod_encoding.c.apache2.20040616)

[root@sv ~]# tar zxvf mod_encoding-20021209.tar.gz ← mod_encoding展開

[root@sv ~]# /bin/mv mod_encoding.c.apache2.20040616 mod_encoding-20021209/mod_encoding.c ← Apache2版mod_encodingに差し替え

[root@sv ~]# cd mod_encoding-20021209/lib/ ← ディレクトリ移動

[root@sv lib]# ./configure ← 環境に応じたMakefile作成

[root@sv lib]# make ← Makefileを基にソースコードをコンパイル

[root@sv lib]# make install ← makeで生成されたファイルなどをディレクトリにコピー(インストール)

[root@sv lib]# cd .. ← 一つ上の階層へ移動

他のソフトの日本語環境へ影響を及ぼすことへの対処
[root@sv mod_encoding-20021209]# wget http://www.aconus.com/~oyaji/faq/mod_encoding.c-apache2.2-20060520.patch ← mod_encodingパッチダウンロード

[root@sv mod_encoding-20021209]# patch -p0 < mod_encoding.c-apache2.2-20060520.patch ← mod_encodingパッチ適用
patching file mod_encoding.c

[root@sv mod_encoding-20021209]# ./configure --with-apxs=/usr/sbin/apxs --with-iconv-hook ← Makefile作成

[root@sv mod_encoding-20021209]# vi Makefile ← Makefile編集
LIBS =  -liconv_hook
↓
LIBS = -L/usr/local/lib -liconv_hook ← 追加

install-exec-local:
        $(APXS) -i mod_encoding.so
        ↓
        $(APXS) -i -a -n encoding mod_encoding.la ← 変更

[root@sv mod_encoding-20021209]# make ← Makefileを基にソースコードをコンパイル
make中に「mod_encoding.c:362: warning: initialization from incompatible pointer type」等の表示が出る場合、最終的にエラーにならなければ無視してOK

[root@sv mod_encoding-20021209]# make install ← makeで生成されたファイルなどをディレクトリにコピー(インストール)
make install中に「mod_encoding.c:362: warning: initialization from incompatible pointer type」等の表示が出る場合、最終的にエラーにならなければ無視してOK

[root@sv mod_encoding-20021209]# cd ← カレントディレクトリへ戻る

[root@sv ~]# rm -rf mod_encoding-20021209 ← mod_encoding展開先ディレクトリを削除

[root@sv ~]# rm -f mod_encoding-20021209.tar.gz ← ダウンロードしたファイルを削除
2.mod_encoding設定
[root@sv ~]# vi /etc/httpd/conf.d/mod_encoding.conf ← mod_encoding設定ファイル作成
EncodingEngine        on

SetServerEncoding     UTF-8

DefaultClientEncoding UTF-8 CP932 EUCJP-MS

AddClientEncoding "Microsoft .* DAV 1.1" ASCII CP932 UTF-8
AddClientEncoding "Microsoft .* DAV" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV $)" UTF-8 CP932
AddClientEncoding "(Microsoft .* DAV 1.1)" CP932 UTF-8
AddClientEncoding "Microsoft-WebDAV*" UTF-8 CP932
AddClientEncoding "RMA/*" CP932
AddClientEncoding "xdwin9x/" CP932
AddClientEncoding "cadaver/" UTF-8 EUCJP-MS
AddClientEncoding "Mozilla/" EUCJP-MS

[root@sv ~]# /etc/rc.d/init.d/httpd restart ← Apache再起動
httpd を停止中:                                            [  OK  ]
httpd を起動中:                                            [  OK  ]
3.WebDAV設定
[root@sv ~]# vi /etc/httpd/conf.d/webdav.conf ← WebDAV設定ファイル作成
Alias /webdav/user_m /home/user_m/webdav
<Location "/webdav/user_m">
    DAV On
    SSLRequireSSL
    AllowOverride None
    Options None
    AuthType Basic
    AuthName WebDAV
    AuthUserFile /etc/httpd/conf/.htpasswd
    Require valid-user
    アクセス元ホストを制限する場合(ここから)
    Order deny,allow
    Deny from all
    Allow from 192.168.0 ← 内部(例:192.168.0.)からのアクセスを許可
    アクセス元ホストを制限する場合(ここまで)
</Location>

[root@sv ~]# /etc/rc.d/init.d/httpd reload ← Apache設定反映
httpd を再読み込み中:                                      [  OK  ]
4.BASIC認証用ユーザ登録

(1).htpasswdファイルを新規作成する場合

[root@sv ~]# htpasswd -b -c /etc/httpd/conf/.htpasswd user_m パスワード ← .htpasswdを作成してユーザuser_mを登録する
Adding password for user user_m

(2)既存の.htpasswdファイルへユーザを追加する場合

[root@sv ~]# htpasswd -b /etc/httpd/conf/.htpasswd user_m パスワード ← 既存の.htpasswdへユーザuser_mを登録する
Adding password for user user_m

Samba設定

smb.confへWebdav用の設定を追加します。

[root@sv ~]# vi /etc/samba/smb.conf ← Samba設定ファイル編集
最終行へ追加
[webdav]
        comment = WebDAV
        path = /home/user_m/webdav
        public = yes
        writable = yes
        only guest = yes
        force user = user_m
        共有ディレクトリのごみ箱機能追加(ここから)
        ※ファイル削除時に自動的にごみ箱へ移動されるようにする
        vfs objects = recycle ← ごみ箱の有効化
        recycle:repository = .recycle ← ごみ箱のディレクトリ名(/home/ユーザ名/.recycle)
        recycle:keeptree = no ← ごみ箱へ移動時にディレクトリ構造を維持しない
        recycle:versions = yes ← 同名のファイルがごみ箱にある場合に別名で移動
        recycle:touch = no ← ごみ箱へ移動時にタイムスタンプを更新しない
        recycle:maxsize = 0 ← ごみ箱へ移動するファイルのサイズ上限(0:無制限)
        recycle:exclude = *.tmp ~$* ← ここで指定したファイルはごみ箱へ移動せずに即削除する
        共有ディレクトリのごみ箱機能追加(ここまで)

[root@sv ~]# testparm ← 設定内容に誤りが無いか確認
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[public]"
Processing section "[webdav]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions

[root@sv ~]# /etc/rc.d/init.d/smb restart ← Samba設定反映
SMB サービスを停止中:                                      [  OK  ]
NMB サービスを停止中:                                      [  OK  ]
SMB サービスを起動中:                                      [  OK  ]
NMB サービスを起動中:                                      [  OK  ]

WebDAV動作確認

1.WindowsでのWebフォルダの設定

「マイコンピューター」を開き、メニューの「ファイル」・左側のコンピューターを右クリック・右側の空白部分を右クリックのいずれかより、「ネットワークの場所を追加する」を選択

ウィザードが開始されるので「次へ」を選択

「カスタムのネットワークの場所を選択」を選択し「次へ」を選択

インターネットまたはネットワークのアドレス欄に、「https://サーバ名/webdav/user_m」を入力し「次へ」を選択

自分で証明書を作成している場合、警告が出るので「はい」を選択

「.htpasswd」に登録した、「ユーザ名」と「パスワード」を入力し「OK」

「名前」欄を任意で入力し、「次へ」を選択

「完了」を選択

完了

自分の環境では現在、出来たフォルダを開くことができません。ファイルやフォルダを追加したり、ほかで追加しものをローカルにコピーすることは可能です。

WindowsXPでは問題なく動作するのは確認済みです。

2.動作確認

Samba経由で/home/user_m/webdav/ディレクトリに作成したファイルをWebDAV経由で参照(※1)できること

Samba経由で/home/user_m/webdav/ディレクトリに作成したファイルをWebDAV経由で更新(※1)できること

WebDAV経由で/home/user_m/webdav/ディレクトリに作成(※2)したファイルをSamba経由で参照できること

WebDAV経由で/home/user_m/webdav/ディレクトリに作成(※2)したファイルをSamba経由で更新できること

※1 Webフォルダ上でファイルを参照することができるが、更新する場合はいったんローカルにコピーし、更新が終わったファイルをWebフォルダ上に上書きコピーする形で使用する。

※2 Webフォルダ上でファイルを新規作成することが出来ないので、ローカルで作成し終わったらWebフォルダ上にコピーする。