# on debian squeeze ## Apache WebDAV 調子芳しくなく... ## 素直な設定のままでいろいろイジらん方が良さげ また唐突、絶対に覚えられないのでメモ。地味に必要なヒトいるかも。KVM と言 うか QEMU の話で、-usbdevice オプションは古いから -device オプションを使 おう。調べたところ本家? に指定方法アリ。ドキュメント眺めたり debian git のソース取ってきたりしたところ -drive 側で -drive id=usbmem,file=thinstick.img,serial=01234567890ABCDEF でイケると思いきや、常に "1" に。また調べると、こんなパッチ があったけど debian のソース - git://git.debian.org/git/collab-maint/qemu-kvm.git ではバージョン 0.14.0+dfsg-1~tl からで squeeze にバックポートもないし、 このバージョンでバイナリパッケージ作るも依存関係、他パッケージのバージョ ン合わずインストールできず。で、いつものよぉおーに...ムリヤリ --- hw/usb-msd.c.dpkg-dist 2011-05-19 22:52:54.000000000 +0900 +++ hw/usb-msd.c 2011-05-19 22:53:00.000000000 +0900 @@ -296,7 +296,11 @@ break; case 3: /* serial number */ + if (s->dinfo && s->dinfo->serial) { + ret = set_usb_string(data, s->dinfo->serial); + } else { ret = set_usb_string(data, "1"); + } break; default: goto fail; 多分モニタからは指定できず、起動時のオプション指定のみしか有効にならない。 でもまぁ kvm -m 512M -net tap -net nic,model=e1000 \ -device piix3-usb-uhci -device usb-storage,drive=usbmem \ -drive id=usbmem,file=memstick.img,serial=0123456789ABCDEF で動くことは動いてる。根性ナシで手抜き、こっちも忘れそうだけど $ dpkg-buildpackage -b -rfakeroot -us -uc ... $ su ... # mv /usr/bin/kvm /usr/bin/kvm.dpkg-dist # cp debian/qemu-kvm/usr/bin/kvm /usr/bin でゴマカシ。
2011年5月19日木曜日
USB Storage iSerial for KVM
2011年5月3日火曜日
WebDAV quota on linux
あまり apache に限った話ではなく、いくつか方法があると思うのだけど、思い 付いたところ。ユーザ WebDAV 用のローカル側にてディレクトリを 1. オーナーをユーザ、グループを www-data。合わせて SUID して user quota chmod 4770 $HOME/public_html/webdavdir でもディレクトリの SUID は意味がないと言うか、許されちゃいない。ここで も少し触れられているし、じゃったら FreeBSD をつかえぇ。位の話らしい。 できる、できないではなくパッチもあり、そんなに難しいことではなさそうな ので、セキュリティの問題で、やらないっぽい。あるいは GFS2 なら mount オプションにあるらしいけど、そこまでやる元気もなし 2. オーナーを www-data として SGID & group quota グループを各ユーザ毎に --- chamaken ユーザに chamaken グループなど作 成してグループで group quota は umask を変更すれば可能。 変更しないとディレクトリ掘られた場合に削除できなくなってしまう。 Dealing With Dashcode, Part 2: Apache, WebDAV, and umasks と同じ事かな umask を 022 から 002 に変更するには、シェルユーザとしては /etc/profile や $HOME/.profile あるいは /etc/login.defs の UMASK など。 apache の場合は /etc/apache2/envvars に umask 002 を追記してあげれば ば良い ``らしい'' 3. POSIX ACL & group quota 上の ``Dealing With Dashcode'' 眺めていて、何とかならんのかい。と試し ていたらできちゃった程度なので見識ある方ご意見いただけると、とっても ありがたいです。 先日の /etc/fstab に acl オプション追加 # diff -uw fstab.old fs --- fstab.old 2011-05-03 08:08:59.000000000 +0900 +++ fstab 2011-05-03 08:39:53.000000000 +0900 @@ -7,7 +7,9 @@ # proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation -/dev/sda1 / ext3 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 +/dev/sda1 / ext3 errors=remount-ro,acl,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation acl パッケージのインストール # aptitude install acl の後に root 権限不要。一般ユーザで $ mkdir g+ws $HOME/public_html/webdavdir $ chmod g+ws $HOME/public_html/webdavdir $ setfacl -m user:www-data:rwx $HOME/public_html/webdavdir $ setfacl -d -m user:www-data:rwx $HOME/public_html/webdavdir 実際に group quota が効くかまでは試してないです...
長いけど umask を変更しなかった場合のお試し chamaken$ cd ~/public_html chamaken$ mkdir davtest chamaken$ ls -ld davtest drwxr-xr-x 2 chamaken chamaken 4096 May 3 18:05 davtest この配下のファイルはオーナを chamaken グループとしたいので、ディレクト リに SGID して group writable に chamaken$ chmod g+ws davtest chamaken$ ls -ld davtest drwxr-sr-x 2 chamaken chamaken 4096 May 3 18:05 davtest WebDAV でアクセスするためにオーナユーザを www-data に # root がユーザホームに手を入れるのは今一つ root# chown www-data davtest root# ls -ld davtest drwxr-sr-x 2 www-data chamaken 4096 May 3 18:05 davtest www-data になってお試し www-data$ cd /home/chamaken/public_html/davtest www-data$ touch www_file www-data$ ls -l www_file -rw-r--r-- 1 www-data chamaken 0 May 3 18:11 www_file www-data$ mkdir www_dir www-data$ ls -ld www_dir drwxr-sr-x 2 www-data chamaken 4096 May 3 18:11 www_dir www-data$ cd www_dir www-data$ touch www_file_in_www_dir www-data$ ls -l file_in_www_dir -rw-r--r-- 1 www-data chamaken 0 May 3 18:12 file_in_www_dir ずっと SGID が効いてるねぇ。同じ事を chamaken で chamaken$ pwd /home/chamaken/public_html chamaken$ cd davtest chamaken$ touch chamaken_file chamaken$ ls -l chamaken_file -rw-r--r-- 1 chamaken chamaken 0 May 3 18:17 chamaken_file この時点で怪しいけど www-data で、このファイルを消すことは消せる www-data$ pwd /home/chamaken/public_html/davdir/www_dir www-data$ cd .. www-data$ ls -l chamaken_file -rw-r--r-- 1 chamaken chamaken 0 May 3 18:17 chamaken_file www-data$ rm chamaken_file rm: remove write-protected regular empty file `chamaken_file'? y でもディレクトリ掘っちゃうと chamaken$ mkdir chamaken_dir chamaken$ cd chamaken_dir chamaken$ touch file_in_chamaken_dir chamaken$ ls -la total 8 drwxr-sr-x 2 chamaken chamaken 4096 May 3 18:43 . drwxrwsr-x 4 www-data chamaken 4096 May 3 18:39 .. -rw-r--r-- 1 chamaken chamaken 0 May 3 18:43 file_in_chamaken_dir www-data にて削除できず www-data$ rm -rf chamaken_dir rm: cannot remove `chamaken_dir/file_in_chamaken_dir': Permission denied 逆もしかりで chamaken$ rm www_file rm: remove write-protected regular empty file `www_file'? y chamaken$ rm -rf www_dir rm: cannot remove `www_dir/file_in_www_dir': Permission denied
また長いけど POSIX ACL でのお試し chamaken$ cd /home/chamaken/public_html/ chamaken$ mkdir davacl chamaken$ chmod g+ws davacl chamaken$ ls -ld davacl drwxrwsr-x 2 chamaken chamaken 4096 May 3 19:55 davacl chamaken$ setfacl -m user:www-data:rwx davacl chamaken$ ls -ld davacl drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:55 davacl chamaken$ getfacl davacl # file: davacl # owner: chamaken # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x chamaken$ setfacl -d -m user:www-data:rwx davacl chamaken$ cd davacl chamaken$ touch chamaken_file chamaken$ mkdir chamaken_dir chamaken$ touch chamaken_dir/file_in_chamaken_dir chamaken$ ls -ld chamaken_dir drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:57 chamaken_dir chamaken$ getfacl chamaken_dir # file: chamaken_dir # owner: chamaken # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x default:user::rwx default:user:www-data:rwx default:group::rwx default:mask::rwx default:other::r-x www-data 側でも www-data$ cd /home/chamaken/public_html/ www-data$ cd davacl www-data$ touch www_file www-data$ mkdir www_dir www-data$ touch www_dir/file_in_www_dir www-data$ ls -ld www_dir drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir www-data$ getfacl www_dir # file: www_dir # owner: www-data # group: chamaken # flags: -s- user::rwx user:www-data:rwx group::rwx mask::rwx other::r-x default:user::rwx default:user:www-data:rwx default:group::rwx default:mask::rwx default:other::r-x www-data$ ls -l total 8 drwxrwsr-x+ 2 chamaken chamaken 4096 May 3 19:57 chamaken_dir -rw-rw-r--+ 1 chamaken chamaken 0 May 3 19:57 chamaken_file drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir -rw-rw-r--+ 1 www-data chamaken 0 May 3 19:59 www_file www-data$ で chamaken で作ったモノを削除 www-data$ rm -r chamaken_* www-data$ 他方 chamaken 側でも www-data で作ったモノを削除 chamaken$ ls -l total 4 drwxrwsr-x+ 2 www-data chamaken 4096 May 3 19:59 www_dir -rw-rw-r--+ 1 www-data chamaken 0 May 3 19:59 www_file chamaken$ rm -r * で、前に作った実際の WebDAV 用ディレクトリに適用してみる chamaken$ mv .webdav old.webdav chamaken$ mkdir .webdav chamaken$ chmod g+ws .webdav chamaken$ setfacl -m user:www-data:rwx .webdav chamaken$ setfacl -d -m user:www-data:rwx .webdav 外からアクセスしてみる another_host# aptitude install davfs2 another_host# mkdir davmount another_host# mount.davfs https://testing_webserver/webdav davmount Please enter the username to authenticate with server https://testing_webserver/webdav or hit enter for none. Username: chamaken Please enter the password to authenticate user chamaken with server https://testing_webserver/webdav or hit enter for none. Password: mount.davfs: the server certificate does not match the server name (オレオレ使ってるぜ... と Warning) ... You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y another_host# ls davmount lost+found another_host# cp /etc/fstab davmount/ 長くなるので割愛。双方でディレクトリ掘ってファイルコピーしてみたりした後 の削除も可能で、まぁ動いた
2011年5月1日日曜日
apt-cacher-ng
インストールマニアのつもりはないけど、仮想マシンを度々作るにあたって何か 手軽にできないかな。えーっと g4u だっけ? の debian 版は。と探してみたら FAI (Fully Automatic Installation) というモノがあった。いつものごとく Quickstart - For the impatient user コレコレ。と眺め始めるも 明確な計画先 に立たず一旦保留。ドキュメントの中で apt-proxy 使うみたいなことが書かれて いたけど squeeze になく、他をあたったところと似たようなパッケージを発見。確かに epoch 時間は読みヅラいけど、まぁ。 サーバ側は何もせず、クライアント側だけ /etc/apt を少々
- /etc/apt/apt.conf.d/02proxy
Acquire::http { Proxy "http://CacheServerIp:3142"; };
- sources.list を
- 前 deb http://ftp.uni-kl.de/debian etch main
- 後 deb http://192.168.0.17:3142/ftp.uni-kl.de/debian etch main
...の前にごめんなさい。以前 dhcpd.conf で二つ誤り。一点はファイル名 filename "pxelinux.0"; ルートのスラッシュが必要らしく、正しくは filename "/pxelinux.0"; もう一点は failover らしき内容調子に乗って書いていたけど、できないそうで す。加えて isc-dhcpd の仕様でもないそうで、無理矢理稼動させようとしたと ころ /etc/dhcp/master.conf line 1259: dynamic-bootp flag is not permitted for address range dynamic-bootp 172.27.101.193 172.27.101.220; ^ range declarations where there is a failover peer in scope. If you wish to declare an address range from which dynamic bootp leases can be allocated, please declare it within a pool declaration that also contains the "no failover" statement. The failover protocol itself does not permit dynamic bootp - this is not a limitation specific to the ISC DHCP server. Please don't ask me to defend this until you have read and really tried to understand the failover protocol specification. と叱られてしまいました。さて... と僅かばかりの試行錯誤、格闘してみたとこ ろの結果としては、当該 subnet では failover 使わない。が無難そう ignore bootp; ... subnet 172.27.101.0 netmask 255.255.255.0 { option routers 172.27.101.1; option broadcast-address 172.27.101.255; option domain-name-servers 172.27.1.1, 172.27.129.1; option domain-name "mydomain.or.jp"; pool { # ignore unknown-clients; deny dynamic bootp clients; failover peer "poolish"; range 172.27.101.65 172.27.101.190; } } としてあったところを allow bootp; ... subnet 172.27.101.0 netmask 255.255.255.0 { option routers 172.27.101.1; option broadcast-address 172.27.101.255; option domain-name-servers 172.27.1.1, 172.27.129.1; option domain-name "mydomains.or.jp"; filename "/pxelinux.0"; next-server 172.27.1.1; range 172.27.101.65 172.27.101.190; range dynamic-bootp 172.27.101.193 172.27.101.220; } として。こんなんで failover のよくある設定方法、dhcpd.conf と master.conf での master.conf があっちとこっちで違ってくると言う悲しい結 果。他にも間違いあったら指摘いただけると嬉しいです。
と、気を取り直して # kvm -net nic,model=virtio -net tap -boot n -curses netest.img とすると virtio で PXE が稼動開始して下記テキスト画面 Starting SeaBIOS (version 0.5.1-20101112_103537-polaris) Booting from virtio-net.zrom 5.4.4 (GPL) ether... ROM segment 0xc900 length 0x8000 reloc 0x00000000 Etherboot 5.4.4 (GPL) http://etherboot.org Drivers: VIRTIO-NET Images: NBI ELF PXE Exports: PXE Protocols: DHCP TFTP Relocating _text from: [00087780,0009f310) to [07ee8470,07f00000) Boot from (N)etwork or (Q)uit? Probing pci nic... Probing isa nic...
apache webdav つづきの Tips
* URL の変更 https://servername/~chamaken/.webdav がちょっと格好悪いので /webdav でアクセス。認証ユーザによって URL を変更する方法。いくつかあるらしい けど、説明ページの多い mod_rewrite を利用。 # ~ をなくすには AliasMatch ^/([^/]+)/(.*) /home/$1/.webdav/$2 だそうだ # a2enmod rewrite Enabling module rewrite. Run '/etc/init.d/apache2 restart' to activate new configuration! # mv default-ssl default-ssl.dpkg-dist # cp default-ssl.dpkg-dist default-ssl # emacs default-ssl # diff -uw default-ssl.dpkg-dist default-ssl --- default-ssl.dpkg-dist 2011-03-23 06:13:14.000000000 +0900 +++ default-ssl 2011-04-30 22:28:06.000000000 +0900 @@ -168,5 +168,13 @@ # MSIE 7 and newer should be able to use keepalive BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown + # mod_rewrite + RewriteEngine on + RewriteLog "/var/log/apache2/rewrite.log" + RewriteLogLevel 1 + + RewriteCond %{LA-U:REMOTE_USER} (.*) + RewriteRule ^/webdav(.*) /~%{LA-U:REMOTE_USER}/public_html/.webdav$1 [NS,L] + RewriteRule ^/private(.*) /~%{LA-U:REMOTE_USER}/public_html/private$1 [NS,L] </VirtualHost> </IfModule> これで https://servername/webdav とアクセスすると認証したユーザ名で、 ソレナリの URL に変換される * davfs2 webdab アクセスするユーザの所属するグループを増やしてよいのであれば、 設定ファイルは特段変更せず当該ユーザを davfs2 グループに加えてあげる。 # aptitude install davfs2 ... # adduser chamaken davfs2 Adding user `chamaken' to group `davfs2' ... Adding user chamaken to group davfs2 Done. やっぱり root で引き続き。/etc/fstab に追記 # cd /etc # cp fstab fstab.old # vi fstab # diff -uw fstab.old fstab --- fstab.old 2011-05-01 08:07:33.000000000 +0900 +++ fstab 2011-05-01 08:08:59.000000000 +0900 @@ -11,3 +11,5 @@ # swap was on /dev/sda5 during installation /dev/sda5 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 +https://localhost/webdav /home/chamaken/webdav davfs defaults,user,noauto 0 0 + # うーん、ちょっと微妙だけど一般ユーザから操作したいので setuid # chmod u+s /usr/sbin/mount.davfs 一般ユーザアカウントで $ mount webdav Please enter the username to authenticate with server https://localhost/webdav or hit enter for none. Username: chamaken Please enter the password to authenticate user chamas with server https://localhost/webdav or hit enter for none. Password: パスワード /sbin/mount.davfs: the server certificate does not match the server name /sbin/mount.davfs: the server certificate is not trusted issuer: oreore subject: oreore identity: oreore.invalid.net fingerprint: aa:bb:cc:dd:ee:ff:11:22:33:44:55:66:77:88:99:00:11:22:33:44 You only should accept this certificate, if you can verify the fingerprint! The server might be faked or there might be a man-in-the-middle-attack. Accept certificate for this session? [y,N] y 何だか自分のホーム配下に間接アクセスはもぞかしいいけど、まぁ * (意味がないけど) quota apache webdav quota で調べるとモジュールがあったり FAQ では obsolute になったモジュール使うかコンパイルし直してハンドラ書けとかあるけど、 何かソコまでやる元気がないと言うか... で、あまり意味がなくなってしまったけど、普通の quota 設定も備忘録とし て残しておこうかと。How To Set Up Journaled Quota On Debian Lenny そのままとはちょっと違っていたので # げっ.../home 切ってないし # aptitude install quota quotatool ... # cp fstab fstab.old # vi fstab # diff -uw fstab.old fs --- fstab.old 2011-05-01 08:08:59.000000000 +0900 +++ fstab 2011-05-01 08:39:53.000000000 +0900 @@ -7,7 +7,9 @@ #proc /proc proc defaults 0 0 # / was on /dev/sda1 during installation -/dev/sda1 / ext3 errors=remount-ro 0 1 +/dev/sda1 / ext3 errors=remount-ro,usrjquota=aquota.user,grpjquota=aquota.group,jqfmt=vfsv0 0 1 # swap was on /dev/sda5 during installation ここで touch /aquota.user /aquota.group すると後でサイズおかしいとか 言われるので作らずに # cd / # mount -o remount / # quotacheck -avugm quotacheck: Scanning /dev/sda1 [/] done quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Cannot stat old user quota file: No such file or directory quotacheck: Cannot stat old group quota file: No such file or directory quotacheck: Checked 17441 directories and 259009 files quotacheck: Old file not found. quotacheck: Old file not found. # ls -l /aquota.* -rw------- 1 root root 10240 May 1 08:40 /aquota.group -rw------- 1 root root 9216 May 1 08:40 /aquota.user # quotaon -avug /dev/sda1 [/]: group quotas turned on /dev/sda1 [/]: user quotas turned on linux quota で検索すると、ここで edquota になるんだけど、サイズ指定よ くわかんなかったりエディタでの編集煩しく quotatool 使用。quotatool(8) 眺めた後に # id -u chamaken 1000 # quotatool -u 1000 -d / # quotatool -b -u 1000 -q $((1024 * 32))MB -l $((1024 * 32 - 128))MB / # quotatool -u 1000 -d / 1000 / 4022884 33554432 33423360 0 140959 0 0 0
apache webdav
on debian squeeze は省略。ユーザディレクトリ配下に方法変えつつ色々と https アクセス。いわゆる$HOME/public_html はそのまま。その下の private は mod_authz_owner でRequire file-owner。.webdav は文字通り webdav で。 1. apache などのインストール # aptitude install apache2 libapache2-mod-auth-pam \ > libpam-radius-auth libapache2-mod-encoding
- libapache2-mod-auth-pam は認証に PAM を使うため
- libpam-radius-auth PAM にて RADIUS を使うため
- libapache2-mod-encoding Windows をクライアントとした場合のファイル名文字化け対処らしい...
登録:
投稿 (Atom)