* bind mounting into a generated multi-level directory structure
@ 2008-02-10 8:29 Chris Stromsoe
2008-02-10 14:18 ` Stef Bon
` (2 more replies)
0 siblings, 3 replies; 13+ messages in thread
From: Chris Stromsoe @ 2008-02-10 8:29 UTC (permalink / raw)
To: autofs
I have a set of directories that are created and removed programmatically,
and are hashed three levels deep (/top/hash/hash/name). The depth is
constant, the hashes and names are not. There are around 35k at any time.
I would like to bind mount a common directory into each top-level
(/top/hash/hash/name/data) on demand.
Can I use autofs to do that without having to explicitly list all of the
directory paths in auto.master?
-Chris
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: bind mounting into a generated multi-level directory structure 2008-02-10 8:29 bind mounting into a generated multi-level directory structure Chris Stromsoe @ 2008-02-10 14:18 ` Stef Bon 2008-02-14 22:32 ` chris barry 2008-02-11 8:13 ` Ian Kent 2008-02-11 13:50 ` Stef Bon 2 siblings, 1 reply; 13+ messages in thread From: Stef Bon @ 2008-02-10 14:18 UTC (permalink / raw) Cc: autofs Chris Stromsoe wrote: > I have a set of directories that are created and removed programmatically, > and are hashed three levels deep (/top/hash/hash/name). The depth is > constant, the hashes and names are not. There are around 35k at any time. > I would like to bind mount a common directory into each top-level > (/top/hash/hash/name/data) on demand. > > Can I use autofs to do that without having to explicitly list all of the > directory paths in auto.master? > Why not use symlinks to this shared common directory, and mount that one? Stef Bon ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-10 14:18 ` Stef Bon @ 2008-02-14 22:32 ` chris barry 2008-02-15 9:52 ` Stef Bon 0 siblings, 1 reply; 13+ messages in thread From: chris barry @ 2008-02-14 22:32 UTC (permalink / raw) Cc: autofs On Sun, 2008-02-10 at 15:18 +0100, Stef Bon wrote: > Chris Stromsoe wrote: > > I have a set of directories that are created and removed programmatically, > > and are hashed three levels deep (/top/hash/hash/name). The depth is > > constant, the hashes and names are not. There are around 35k at any time. > > I would like to bind mount a common directory into each top-level > > (/top/hash/hash/name/data) on demand. > > > > Can I use autofs to do that without having to explicitly list all of the > > directory paths in auto.master? > > > Why not use symlinks to this shared common directory, and mount that one? > > Stef Bon His goal is to create a chroot'd environment, and the symlink cannot function there. man chroot to help you understand why. -C ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-14 22:32 ` chris barry @ 2008-02-15 9:52 ` Stef Bon 2008-02-15 21:44 ` Chris Stromsoe 0 siblings, 1 reply; 13+ messages in thread From: Stef Bon @ 2008-02-15 9:52 UTC (permalink / raw) To: autofs chris barry wrote: > On Sun, 2008-02-10 at 15:18 +0100, Stef Bon wrote: > >> Chris Stromsoe wrote: >> >>> I have a set of directories that are created and removed programmatically, >>> and are hashed three levels deep (/top/hash/hash/name). The depth is >>> constant, the hashes and names are not. There are around 35k at any time. >>> I would like to bind mount a common directory into each top-level >>> (/top/hash/hash/name/data) on demand. >>> >>> Can I use autofs to do that without having to explicitly list all of the >>> directory paths in auto.master? >>> >>> >> Why not use symlinks to this shared common directory, and mount that one? >> >> Stef Bon >> > > His goal is to create a chroot'd environment, and the symlink cannot > function there. > Good to mention. I did not understand it's about a chrooted environment. The earlier emails do not say anything at all about that. Stef ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-15 9:52 ` Stef Bon @ 2008-02-15 21:44 ` Chris Stromsoe 2008-02-16 9:47 ` Stef Bon 2008-02-18 15:37 ` OT: was " chris barry 0 siblings, 2 replies; 13+ messages in thread From: Chris Stromsoe @ 2008-02-15 21:44 UTC (permalink / raw) To: Stef Bon; +Cc: autofs On Fri, 15 Feb 2008, Stef Bon wrote: > chris barry wrote: >> On Sun, 2008-02-10 at 15:18 +0100, Stef Bon wrote: >> >>> Chris Stromsoe wrote: >>> >>>> I have a set of directories that are created and removed >>>> programmatically, and are hashed three levels deep >>>> (/top/hash/hash/name). The depth is constant, the hashes and names >>>> are not. There are around 35k at any time. I would like to bind >>>> mount a common directory into each top-level >>>> (/top/hash/hash/name/data) on demand. >>>> >>>> Can I use autofs to do that without having to explicitly list all of >>>> the directory paths in auto.master? >>>> >>>> >>> Why not use symlinks to this shared common directory, and mount that >>> one? >>> >>> Stef Bon >>> >> >> His goal is to create a chroot'd environment, and the symlink cannot >> function there. > > Good to mention. I did not understand it's about a chrooted environment. > The earlier emails do not say anything at all about that. Sorry if I wasn't clear in the original message. I was trying to simplify what I wanted as much as possible, but I guess I oversimplified. My eventual solution was to use multi-mount to bind mount a shared directory with libraries and other common data to a "simple" generated path as a container, and then bind mount the hashed directory inside of that volume. I'm using the container volume as a chroot environment to run untrusted code (php) on a web server, and wanted to minimize exposure to the rest of the machine as much as possible. -Chris ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-15 21:44 ` Chris Stromsoe @ 2008-02-16 9:47 ` Stef Bon 2008-02-17 7:51 ` Chris Stromsoe 2008-02-18 15:37 ` OT: was " chris barry 1 sibling, 1 reply; 13+ messages in thread From: Stef Bon @ 2008-02-16 9:47 UTC (permalink / raw) To: Chris Stromsoe; +Cc: autofs Chris Stromsoe wrote: > My eventual solution was to use multi-mount to bind mount a shared > directory with libraries and other common data to a "simple" generated > path as a container, and then bind mount the hashed directory inside > of that volume. I'm using the container volume as a chroot > environment to run untrusted code (php) on a web server, and wanted to > minimize exposure to the rest of the machine as much as possible. Ok, it's more clear to me now. I'm wondering, isn't it possible to create a custom "chroot" command, which will of course do the chroot, but also do the necessary binds. I've been working on a login shell (chroot_union) which is the standard shell of a user. When this user logs in (starts a session) a copy of the system is created with unionfs. Then a chroot is done, and a perfect environment where the user can do anything is there. Isn't that possible? Stef Bon ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-16 9:47 ` Stef Bon @ 2008-02-17 7:51 ` Chris Stromsoe 0 siblings, 0 replies; 13+ messages in thread From: Chris Stromsoe @ 2008-02-17 7:51 UTC (permalink / raw) To: Stef Bon; +Cc: autofs On Sat, 16 Feb 2008, Stef Bon wrote: > Chris Stromsoe wrote: > >> My eventual solution was to use multi-mount to bind mount a shared >> directory with libraries and other common data to a "simple" generated >> path as a container, and then bind mount the hashed directory inside of >> that volume. I'm using the container volume as a chroot environment to >> run untrusted code (php) on a web server, and wanted to minimize >> exposure to the rest of the machine as much as possible. > > Ok, it's more clear to me now. I'm wondering, isn't it possible to > create a custom "chroot" command, which will of course do the chroot, > but also do the necessary binds. Probably. But I have over 35k virtual hosts. I need to have the mounts expire after some period of non-use. Having the chroot process handle the binds means that I would need to have some other process sitting around to unmount everything after a period of inactivity. Which might as well be autofs at that point. > I've been working on a login shell (chroot_union) which is the standard > shell of a user. When this user logs in (starts a session) a copy of the > system is created with unionfs. Then a chroot is done, and a perfect > environment where the user can do anything is there. Isn't that > possible? The server is only accessible via ftp and http. I'm trying to limit the environment only to what is necessary to run and nothing more. If I were trying to provide a more complete environment with shell access it might make sense to use unionfs, but I'm not doing anything that complex. Autofs managing the bind mounts (together with a chroot cgi wrapper to limit access) covers everything I need. -Chris ^ permalink raw reply [flat|nested] 13+ messages in thread
* OT: was Re: bind mounting into a generated multi-level directory structure 2008-02-15 21:44 ` Chris Stromsoe 2008-02-16 9:47 ` Stef Bon @ 2008-02-18 15:37 ` chris barry 1 sibling, 0 replies; 13+ messages in thread From: chris barry @ 2008-02-18 15:37 UTC (permalink / raw) To: Chris Stromsoe; +Cc: autofs On Fri, 2008-02-15 at 13:44 -0800, Chris Stromsoe wrote: > My eventual solution was to use multi-mount to bind mount a shared > directory with libraries and other common data to a "simple" generated > path as a container, and then bind mount the hashed directory inside of > that volume. I'm using the container volume as a chroot environment to > run untrusted code (php) on a web server, and wanted to minimize exposure > to the rest of the machine as much as possible. > > -Chris This sounds like a very cool solution. Any chance of you whipping up a more detailed recipe? -C ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-10 8:29 bind mounting into a generated multi-level directory structure Chris Stromsoe 2008-02-10 14:18 ` Stef Bon @ 2008-02-11 8:13 ` Ian Kent 2008-02-11 9:53 ` Chris Stromsoe 2008-02-11 13:50 ` Stef Bon 2 siblings, 1 reply; 13+ messages in thread From: Ian Kent @ 2008-02-11 8:13 UTC (permalink / raw) To: Chris Stromsoe; +Cc: autofs On Sun, 2008-02-10 at 00:29 -0800, Chris Stromsoe wrote: > I have a set of directories that are created and removed programmatically, > and are hashed three levels deep (/top/hash/hash/name). The depth is > constant, the hashes and names are not. There are around 35k at any time. > I would like to bind mount a common directory into each top-level > (/top/hash/hash/name/data) on demand. I'm not clear on what you mean by "top"? > > Can I use autofs to do that without having to explicitly list all of the > directory paths in auto.master? What version of autofs are you using? Ian ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-11 8:13 ` Ian Kent @ 2008-02-11 9:53 ` Chris Stromsoe 2008-02-11 10:34 ` Ian Kent 0 siblings, 1 reply; 13+ messages in thread From: Chris Stromsoe @ 2008-02-11 9:53 UTC (permalink / raw) To: Ian Kent; +Cc: autofs On Mon, 11 Feb 2008, Ian Kent wrote: > On Sun, 2008-02-10 at 00:29 -0800, Chris Stromsoe wrote: > >> I have a set of directories that are created and removed >> programmatically, and are hashed three levels deep >> (/top/hash/hash/name). The depth is constant, the hashes and names are >> not. There are around 35k at any time. I would like to bind mount a >> common directory into each top-level (/top/hash/hash/name/data) on >> demand. > > I'm not clear on what you mean by "top"? "/top" is the root of my directory tree. I have roughly 35k directories that are stored as /top/hash1/hash2/name, where hash1 is one hash of "name" and hash2 is a different hash of "name". Beneath "name" there are a variety of other files and directories. New "name" directories are hashed, created, and populated on the fly. I would like to bind mount a common directory onto /top/hash1/hash2/name/data, so that I can chroot into .../name/ and run common code, minimizing exposure to the rest of the system. I would like to use autofs if possible, so that I don't have to copy 20Mb+ of data 35k times or maintain 35k bind mounts or do something else that continously uses resources. I also don't want to have to edit auto.master every time I add or remove a "name" directory, or have to maintain 35k entries in a flat file. >> Can I use autofs to do that without having to explicitly list all of >> the directory paths in auto.master? > > What version of autofs are you using? I've been playing with 4.1.4, from Debian stable, but am more than willing to use 5.0.3 if it will do what I need. Playing around so far, the best I've been able to come up with is doing a bind mount of /top/hash1/hash2/name to a simpler /mnt/name (using a program map to compute the hashes), then hopfully submounting the "/data" directory, but I haven't been able to figure out how to get /mnt/name/data mounted. Can you do submounts of a program map? My auto.master is: /mnt /etc/auto.mnt And /etc/auto.mnt is (I'm using bogus "hash" values for test purposes): #!/usr/bin/perl my $f = lc shift @ARGV; my $d = sprintf "/top/a/a/%s", $f; exit 1 if ! -d $d; printf ":%s\n", $d; -Chris ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-11 9:53 ` Chris Stromsoe @ 2008-02-11 10:34 ` Ian Kent 2008-02-12 22:35 ` Chris Stromsoe 0 siblings, 1 reply; 13+ messages in thread From: Ian Kent @ 2008-02-11 10:34 UTC (permalink / raw) To: Chris Stromsoe; +Cc: autofs On Mon, 2008-02-11 at 01:53 -0800, Chris Stromsoe wrote: > On Mon, 11 Feb 2008, Ian Kent wrote: > > On Sun, 2008-02-10 at 00:29 -0800, Chris Stromsoe wrote: > > > >> I have a set of directories that are created and removed > >> programmatically, and are hashed three levels deep > >> (/top/hash/hash/name). The depth is constant, the hashes and names are > >> not. There are around 35k at any time. I would like to bind mount a > >> common directory into each top-level (/top/hash/hash/name/data) on > >> demand. > > > > I'm not clear on what you mean by "top"? > > "/top" is the root of my directory tree. I have roughly 35k directories > that are stored as /top/hash1/hash2/name, where hash1 is one hash of > "name" and hash2 is a different hash of "name". Beneath "name" there are > a variety of other files and directories. New "name" directories are > hashed, created, and populated on the fly. > > I would like to bind mount a common directory onto > /top/hash1/hash2/name/data, so that I can chroot into .../name/ and run > common code, minimizing exposure to the rest of the system. I would like > to use autofs if possible, so that I don't have to copy 20Mb+ of data 35k > times or maintain 35k bind mounts or do something else that continously > uses resources. > > I also don't want to have to edit auto.master every time I add or remove a > "name" directory, or have to maintain 35k entries in a flat file. > > >> Can I use autofs to do that without having to explicitly list all of > >> the directory paths in auto.master? > > > > What version of autofs are you using? > > I've been playing with 4.1.4, from Debian stable, but am more than willing > to use 5.0.3 if it will do what I need. > > Playing around so far, the best I've been able to come up with is doing a > bind mount of /top/hash1/hash2/name to a simpler /mnt/name (using a > program map to compute the hashes), then hopfully submounting the "/data" > directory, but I haven't been able to figure out how to get /mnt/name/data > mounted. Can you do submounts of a program map? So let me see if I've got this yet. You're happy to use a program map to generate the hash directory, /top/hash1/hash2/name on something like /mnt/name. You need to be able to submount path /top/hash1/hash2/name/data onto something like /mnt/name/data. > > My auto.master is: > > /mnt /etc/auto.mnt > > And /etc/auto.mnt is (I'm using bogus "hash" values for test purposes): > > #!/usr/bin/perl > my $f = lc shift @ARGV; > my $d = sprintf "/top/a/a/%s", $f; > exit 1 if ! -d $d; > printf ":%s\n", $d; So if my reading is correct then you probably need to generate a mount string from the program map that looks something like (I haven't had to work with macro defines for a while so the syntax might not be quite right): -fstype=autofs -Dhash1=$h1 -Dhash2=$h2 -Dname=$f /etc/auto.submount In the above the $h1, $h2 and $f need to be substituted with the values computed by the script, probably using something like you're printf above. The /etc/auto.submount would be something like: * :/top/$(hash1}/$hash2}/${name}/data or if "data" was actually the key * :/top/$(hash1}/$hash2}/${name}/& Other thoughts. I can't be sure this will work so you'll need to try it out and see how you go. The $f above in -Dname=$f might be able to be substituted with &, the value of the key, but that might confuse the autofs macro substitution code. I can't remember whether we have to ":" escape the leading "/" of a submount map, I'm sure you'll work that out fairly quickly though. There are clearly a number of variations on this but you will need to work out what is best. Ian ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-11 10:34 ` Ian Kent @ 2008-02-12 22:35 ` Chris Stromsoe 0 siblings, 0 replies; 13+ messages in thread From: Chris Stromsoe @ 2008-02-12 22:35 UTC (permalink / raw) To: Ian Kent; +Cc: autofs On Mon, 11 Feb 2008, Ian Kent wrote: > On Mon, 2008-02-11 at 01:53 -0800, Chris Stromsoe wrote: > >> Playing around so far, the best I've been able to come up with is doing >> a bind mount of /top/hash1/hash2/name to a simpler /mnt/name (using a >> program map to compute the hashes), then hopfully submounting the >> "/data" directory, but I haven't been able to figure out how to get >> /mnt/name/data mounted. Can you do submounts of a program map? > > So let me see if I've got this yet. > > You're happy to use a program map to generate the hash directory, > /top/hash1/hash2/name on something like /mnt/name. > You need to be able to submount path /top/hash1/hash2/name/data onto > something like /mnt/name/data. > > So if my reading is correct then you probably need to generate a mount > string from the program map that looks something like (I haven't had to > work with macro defines for a while so the syntax might not be quite > right): Thanks for the pointers. They got me thinking in a different direction. Instead of mounting the data directory into the raw hash directories, I'm generating a bind mount on demand, mounting the shared static directory onto /opt/chroot/key, then bind mounting the hash directory onto /opt/chroot/key/user using multi-mount. For the archives, in the event anybody else comes looking to do something similar, my auto.master is /opt/chroot /etc/auto.chroot My (cut down) auto.chroot script is: #!/usr/bin/perl my $f = lc shift @ARGV; exit 1 unless &validate($f); my ($h1,$h2) = &hash($f); my $d = sprintf "/opt/u/%s/%s/%s", $h1, $h2, $f; exit 1 unless &check($d); printf "-fstype=bind,ro :/opt/dataroot \\\n"; printf "/user -fstype=bind $dirname\n"; exit 0; -Chris ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: bind mounting into a generated multi-level directory structure 2008-02-10 8:29 bind mounting into a generated multi-level directory structure Chris Stromsoe 2008-02-10 14:18 ` Stef Bon 2008-02-11 8:13 ` Ian Kent @ 2008-02-11 13:50 ` Stef Bon 2 siblings, 0 replies; 13+ messages in thread From: Stef Bon @ 2008-02-11 13:50 UTC (permalink / raw) Cc: autofs Chris Stromsoe wrote: > I have a set of directories that are created and removed programmatically, > and are hashed three levels deep (/top/hash/hash/name). The depth is > constant, the hashes and names are not. There are around 35k at any time. > I would like to bind mount a common directory into each top-level > (/top/hash/hash/name/data) on demand. > > Can I use autofs to do that without having to explicitly list all of the > directory paths in auto.master? > Why not use symlinks to this shared common directory, and mount that one? Stef Bon ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2008-02-18 15:37 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-02-10 8:29 bind mounting into a generated multi-level directory structure Chris Stromsoe 2008-02-10 14:18 ` Stef Bon 2008-02-14 22:32 ` chris barry 2008-02-15 9:52 ` Stef Bon 2008-02-15 21:44 ` Chris Stromsoe 2008-02-16 9:47 ` Stef Bon 2008-02-17 7:51 ` Chris Stromsoe 2008-02-18 15:37 ` OT: was " chris barry 2008-02-11 8:13 ` Ian Kent 2008-02-11 9:53 ` Chris Stromsoe 2008-02-11 10:34 ` Ian Kent 2008-02-12 22:35 ` Chris Stromsoe 2008-02-11 13:50 ` Stef Bon
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.