diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2007-11-05 22:49:53 -0500 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2007-11-05 22:49:53 -0500 |
commit | 2ef31bb41f1f04a9d7341e7b2fe683f71e922097 (patch) | |
tree | d7071bd0fb632fbfb927c6b12da7ad79654c5a18 /README | |
parent | c45d585d40d8d2513c665c7d2f7315a4403fcdac (diff) |
store empty directories and restore in etckeeper init
While working on this, I had to consider security policies -- is it ok if
etckeeper init can run code from the /etc repository? I've decided this
should be ok, and documented that it should only be run on trusted repos.
Note that metastore could also be exploited by untrusted repos, and of
course, note that you're checking out your *** /etc *** so it damn well
better be trusted!
With that determined, I decided to use a simple shell script to hold the
empty directory info and allow them to be easily created. Expanding this for
other files git can't represent is a possibility..
Diffstat (limited to 'README')
-rw-r--r-- | README | 33 |
1 files changed, 17 insertions, 16 deletions
@@ -6,7 +6,7 @@ permissions of `/etc/shadow`. It's quite modular and configurable, while also being simple to use if you understand the basics of working with git. -## security warning +## security warnings First, a big warning: By checking /etc into revision control, you are creating a copy of files like /etc/shadow that must remain secret. Anytime @@ -23,6 +23,9 @@ it out world readable, before etckeeper fixes the permissions. The tutorial has some examples of safe ways to avoid these problems when cloning an /etc repository. +Also note that `etckeeper init` runs code stored in the git repository. +So don't use it on git repositories from untrusted sources. + ## what etckeeper does @@ -40,21 +43,19 @@ empty directories, and special files. git has only limited tracking of file metadata, being able to track the executable bit, but not other permissions or owner info. So file metadata storage is handled by `metastore`. Amoung other chores, `etckeeper init` -sets up a git hook that use `metastore` to store metadata about file -owners, permissions, and even extended attributes into a /etc/.metadata -file. This metadata is stored in git along with everything else, and can be -applied if the repo should need to be checked back out. +sets up a `pre-commit` hook that uses `metastore` to store metadata about +file owners, permissions, and even extended attributes into a +`/etc/.metadata` file. This metadata is stored in git along with everything +else, and can be applied if the repo should need to be checked back out. -git cannot track empty directories. So `etckeeper init` also sets up a git -hook to run `etckeeper pre-commit`, which checks for empty directories -before committing, and warns about them. You can then either ignore the -empty directory, if it's not significant, or put a file (such as -`.gitignore`) in the directory to enable git to track it. +git cannot track empty directories, but they can be significant sometimes +in /etc. So the `pre-commit` hook also stores information that can be used +to recreate the empty directories in a `/etc/.etckeeper` file. git doesn't support several special files that you _probably_ won't have in /etc, such as unix sockets, named pipes, hardlinked files (but softlinks -are fine), and device files. Again git hooks are used to warn if your /etc -contains such untrackable special files. +are fine), and device files. The `pre-commit` hook will warn if your /etc +contains such special files. ## tutorial @@ -127,14 +128,14 @@ Each etckeeper command uses `run-parts` to run the executable files in `/etc/etckeeper/$command.d/`. By default these directories contain a bunch of symlinks to the actual files; you can remove or reorder the symlinks, or add your own custom files. Each individual file is short, simple, and does -only one action. You can even just symlink in existing programs to run -them. +only one action. -For example, here's how to configure it to run `git-gc` after each apt run, +For example, here's how to configure it to run `git gc` after each apt run, which will save a lot of disk space: cd /etc/etckeeper/post-apt.d - ln -s /usr/bin/git-gc 99git-gc + (echo '#!/bin/sh' ; echo 'exec git-gc') > 99git-gc + chmod +x 99git-gc git add . git-commit -m "run git-gc after each apt run" |