AFS WebDAV v.A
Contents |
[edit] Project Log
I made design decisions for this implementation mostly under the assumption that this would be a test implementation used for proof-of-concept with priorities in the following order:
- Reasonable security
- High performance (read: scales well)
- Fast implementation
It took about 2 days to get a prototype running supporting "ls". Read/write protocol operations are expected to be implemented with a day or two more work.
[edit] System Implementation v1
[edit] Components
[edit] Linux
kerberos principal holders are actual unix users
[edit] Apache
WebDAV protocol parsing code is run from memory by PHP SAPI, user privileged operations are setuid and forked to Python user-backends to perform users' token-enabled privileged operations
- mod_ssl
- many mainstream WebDAV clients support only Basic Auth, we allow it but must encrypt
- mod_rewrite
- direct all request methods to PHP via SAPI
- mod_php
- php-memcache
- fast C interface to memcached server from PECL
- php-eaccelerator
- pre-compiles PHP scripts and stores in shared memory
- php-memcache
[edit] PHP
refactored HTTP_WebDAV_Server package to the system constraints
- removed:
- file operation code (Apache is not privileged)
- locking
- script self-awareness (for friendly paths like https://dav.mit.edu/afs/athena.mit.edu/user/p/r/presbrey/ and https://dav.mit.edu/~presbrey/)
- added:
- hesiod support (follow filsys pointers)
- kerberos support (use kerberos principals and aklog)
- sudo commands (fork kerberos and file operations to user backends)
[edit] Memcached
maps daemon allocated shared memory space to a local socket
- cache authentication hashes
- cache AFS class function calls
- hesiod filsys and PTS lookups
[edit] Design Descisions
[edit] Pros and Cons
| advantages | disadvantages | |
|---|---|---|
| Kerberos principals are real unix users |
|
|
| PHP SAPI (mod_php) |
|
|
| setuid |
|
|
| Memcached |
|
|
| vs. mod_waklog |
|
|
There is more research to be done into another implementation possibly based on a mod_waklog variant.