Annotation of embedaddon/ipsec-tools/src/racoon/doc/README.privsep, revision 1.1.1.1
1.1 misho 1: Using Racoon with Privilege Separation
2: Tue Mar 25 16:37:09 MDT 2008
3:
4:
5: Racoon can run in a chroot'd environment. When so instructed, it runs as two
6: processes, one of which handles a small number of simple requests and runs as
7: root in the full native filesystem, and another which runs as a less
8: privileged user in a chroot'd environment and which handles all the other and
9: very complex business of racoon.
10:
11: Because racoon does many complex things there are many opportunities for
12: coding errors to lead to compromises and so this separation is important. If
13: someone breaks into your system using racoon and you have enabled privilege
14: separation, they will find themselves in a very limited environment and unable
15: to do much damage. They may be able to alter the host's security associations
16: or obtain the private keys stored on that system using file descriptors
17: available to the unprivileged instance of racoon, and from there they will be
18: able to alter security associations on other hosts in disruptive or dangerous
19: ways if you have generate_policy enabled on those hosts. But that's because
20: in its current form generate_policy is itself dangerous and requires that you
21: trust anyone with the credentials to use it.
22:
23: They will also be able to execute any scripts you have placed in the scripts
24: directory, although racoon will prevent them from mis-using the traditional
25: environment variables PATH, LD_LIBRARY_PATH, and IFS. But if you have
26: introduced vulnerabilities into your scripts you may want to re-visit them.
27: The thing to watch for is blindly trusting the environment variables passed
28: in by racoon - assume they could be set to anything by a malicious entity and
29: check them for suitability before using them.
30:
31: All these possibilities are present when privilege separation is not enabled,
32: and they are greatly reduced when it is enabled because the resources
33: available to the attacker are less.
34:
35: *****
36:
37: The basic concept with racoon's privilege separation is that a minimal
38: environment containing all the files racoon needs to operate - with the
39: exception of private keys, scripts, and system-wide authentication services -
40: is placed in a stripped-down copy of the original environment. The private
41: keys and scripts are left in the original environment where only the
42: privileged instance of racoon will have access to them.
43:
44: Here are basic instructions for setting up racoon to run with privilege
45: separation:
46:
47:
48: First, create a user/group for racoon to run under. For example, user:group
49: ike:ike. The account should not have a usable password or real home
50: directory, so copy the general format of another system-services type account
51: such as 'daemon'.
52:
53: You already have files in, e.g. /usr/local/etc/racoon - perhaps racoon.conf, a
54: certs directory containing certificates, a scripts directory, and other
55: miscellaneous files such as welcome messages. Perform the following steps:
56:
57: cd /usr/local/etc/racoon
58: mkdir root
59: mv certs root
60: mkdir certs
61: mv root/certs/*.key certs
62:
63: If you want to be able to switch back and forth between using and not using
64: privsep, do this too:
65:
66: cd /usr/local/etc/racoon/certs
67: for i in ../root/certs/*
68: do
69: ln -s $i .
70: done
71:
72: Now root/certs contains certificates and certs contains the keys. The idea is
73: that the public certificates are in the chroot'd area
74: (/usr/local/etc/racoon/root) and the keys are available only to the privileged
75: instance of racoon.
76:
77: Move any other racoon configuration data into /usr/local/etc/racoon/root,
78: with the exception of the scripts directory and racoon.conf.
79:
80: All the files in /usr/local/etc/racoon/root should be owned by root and the
81: ike:ike user you created should not have write access to any directories or
82: files (unless you are using something like 'path backupsa', but you get the
83: idea).
84:
85: Create the device nodes:
86:
87: mkdir root/dev
88:
89: Do whatever your OS requires to populate the new dev directory with a
90: minimal set of devices, e.g. mknod, MAKEDEV, or mount devfs... In freebsd
91: this is done by adding a line to /etc/fstab:
92:
93: devfs /usr/local/etc/racoon/root/dev devfs rw 0 0
94:
95: and then adding a line like this to /etc/rc.conf:
96:
97: devfs_set_rulesets="/usr/local/etc/racoon/root/dev=devfsrules_basic"
98:
99: and then adding the following lines to /etc/devfs.rules:
100:
101: [devfsrules_basic=10]
102: add include $devfsrules_hide_all
103: add include $devfsrules_unhide_basic
104:
105: and then either rebooting or entering "mount -a && /etc/rc.d/devfs start".
106:
107: When done with that:
108:
109: mkdir -p root/usr/local/etc
110: ln -s ../../../ root/usr/local/etc/racoon
111:
112: This dummy hierarchy keeps the config file consistent between both copies of
113: racoon. Of course, you could actually put the certs directory and any other
114: configuration data down in the hierarchy but I prefer to leave it at the root
115: and link to it as shown. You may end up with something like this:
116:
117: root# ls -FC /usr/local/etc/racoon/root
118: certs/ dev/ usr/
119:
120: root# ls -l /usr/local/etc/racoon/root/usr/local/etc
121: lrwxr-xr-x 1 root wheel 9 Mar 7 22:13 racoon -> ../../../
122:
123: root# ls -FC /usr/local/etc/racoon/root/usr/local/etc/racoon/
124: certs/ dev/ usr/
125:
126: Presumably your racoon.conf already contains something like:
127:
128: path certificate "/usr/local/etc/racoon/certs";
129: path script "/usr/local/etc/racoon/scripts";
130:
131: If so, great. If not, add them. Then, finally, add the privsep section:
132:
133: privsep {
134: user "ike";
135: group "ike";
136: chroot "/usr/local/etc/racoon/root";
137: }
138:
139: Apply the patches posted to the list and rebuild racoon (the patches will be
140: incorporated into the release subsequent to the date of this memo, so if you
141: use that or a later release you can skip this step).
142:
143: Restart racoon and hopefully things will work. As of the date of this memo,
144: re-loading the configuration file with racoonctl will not work with privsep
145: enabled. However, the problem is not insurmountable and if you figure it out
146: let us know.
147:
148: I have not tested privsep with many of racoon's features such as XAUTH or
149: scripts, so if you have trouble with them and work anything out please reply
150: to the list so that your discoveries may be incorporated into this document.
151:
152: Last modified: $Date: 2008/03/28 04:18:52 $
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>