No War
(or all the question I can't be arsed to answer, yet again,
as of 2003 March 9th 2005 January 17th)
Thanks for contributions received from Herbert Pötzl
Exactly the same way as you signed up! As you are clearly an intelligent person you can probably remember how you managed to sign up and do the same to unsubscribe. If you've forgotten, you can go to the mailing-list control on the main vserver site:
Sebastian Wolfgarton reminded me (2005-01-17) that the URL is now:
Vlad unfortunately had to stop running them. A full set going back to 2001 October can be found here:
The problem comes if you bind to `0.0.0.0
' in the
host server without using a `v_sshd
'
script. This then snatches all the addresses on the server
(including all vserver addresses), even if the vservers haven't
been started yet.
The best way is not to run much (or anything) in the host
server--except SSH--and to make sure you either use a `v_ssh[d]
'
script, or manually set SSHd to bind to one IP address in the host
server (including chbind
'ing or remembering to disable
`inetd
').
If you are *just* running the SSH daemon (and NTP), my preferred option is to put the
ListenAddress 1.2.3.4 # Host Server
directive in the `/etc/ssh/sshd_config
' file).
This will get rid of alot of your `problems' and allow you to find
out what is happening more clearly. (But might cause some
troubles if you change the host servers' IP Address
;-)
Note: the following is correct, works and is highly illustrative, however newer versions of the vserver tools use a different method.
Lets, for example, take a look at a sample `v_httpd
':
# description: Wrapper to start httpd bound to a single IP IP=eth0 exec /usr/sbin/chbind --ip $IP /etc/init.d/httpd $*
the `chbind
' tool `binds' (reduces) the IP
address(es) to the given ones give in the
`--ip $oneip
' paramater (in this case the
first IP address on eth0
and then calls the
original script to start their service.
Jacques Gelinas' main site for the `s_context
' (security context)
Linux kernel patches and the vserver home page is:
The "Paul Sladen Mirror Service" provides a European mirror here:
Sam's immutable-linkage-flag
stuff can now be got here:
Read Herbert Pötzl's Quota Howto and get the Tools/Patches here:
Alexey Lyashkov provides patches against the Red-Hat source trees here:
Adam Pendleton also provides source-RPMs of the above:
Herbert Pötzl provides unoffical patches on his page:
Apparently, ``To patch the kernel you need:''
and to apply them in that order. ``First apply the ac3 and then the ctx12 patch (the patches fail if applied in the other way). ac3 patches perfectly. ctx12 patches with some fuzz (no rejects).''
Additionally, some -ac
patches are used in RH
kernels so Alex's RH patches may (or may not) be helpful aswell:
There is a `newvserver
' and small patch to fix
set-group-id (gid=tty
) mounting `/dev/pts
' under Debian systems
here:
http://www.paul.sladen.org/vserver/debian/
http://www.paul.sladen.org/vserver/archives/200211/0150.html
These second `.deb
's were originally done for private
use: (make sure you read the README
file if you want to read them)
Mark Lawrence orginally did a `.deb
' package and
newvserver
script. Opal has also done an out-of-date
one that is in the Debian archive and requires messing about with
Sid (view
bug page). A while ago there was old stuff at this.is
too.
NTP is used to keep the kernel clock synchronized to GMT/UTC. This is a system level function and should be done in the host server.
Changing the timezone in a vserver is merely about telling Libc
in that vserver what the current timezone offset is. This is done
my changing the /etc/localtime
file (and normally linking
it to a different timezone).
This can be done by running `tzconfig
' under
Debian, or `timeconfig
' on Red Hat based systems.
du
' complain about /proc access?du: cannot change to directory `./proc/1/fd': Permission denied
This is related to the fakeinit fiddling that goes on to make
the first-process in a context look-like it has pid=1
(pretending to be init
, whereas the real
pid=1
a process is in a different context and so you
can't access its resources.
`du
' will give the correct answer though, it's much like the cosmetic
problems with `lsof
'.
klogd
give an error?Kernel logger (klogd
) requires access to the kernel messages
buffer which could allow klogd
running inside vserver to ``steal''
messages intended for the root server. This is a
"low-level" and should only be done in the main server
and not within a vserver.
You should run `syslogd
' in each server normally
to continue monitoring the rest of the services.
A new userspace and most of this lot by my reckoning:
It goes against the Unix design of irreversible
giving up privileges and actually tries to raise its own
`ulimit
' privileges which is restricted in a vserver to
stop anybody raising their processes above other vserver
users.
It is Bind
that is ``broken''. It can be fixed by recompiling with:
./configure --disable-linux-caps
which fixes this stupidity. Curse the bind8 exploits, curse
the maintainers who leave `--enable-linux-caps
' on by default and
curse the ISC coders for putting it in there in the first place!
;-)
The problem is actually slightly worse than this and is down to
the bad assumptions that Bind9 makes about threads, linux and
capabilities. Without fixing their over-intelligent detection
code, you can only run Bind9 under vserver as root
(uid=0
). Since this is already running in a secure
vserver this is less of a problem.
This seems to have come up a couple of times since:
http://www.paul.sladen.org/vserver/archives/200302/0186.html
http://www.paul.sladen.org/vserver/archives/200301/0034.html
http://www.paul.sladen.org/vserver/archives/200302/0200.html
The conclusion is to: run it as root within a vserver.
iptables -A INPUT -i eth0 -d 10.0.0.42 iptables -A OUTPUT -o eth0 -s 10.0.0.42 iptables -A INPUT -i eth0 -d 10.0.0.43 iptables -A OUTPUT -o eth0 -s 10.0.0.43
and typing `iptables -xvL
' will give you output something like:
Chain INPUT (policy ACCEPT 7157991 packets, 932430425 bytes) pkts bytes target prot opt in out source destination 246 19163 all -- eth0 any anywhere 10.0.0.42 3298 230541 all -- eth0 any anywhere 10.0.0.43 5158 339958 all -- eth0 any anywhere 10.0.0.44 Chain OUTPUT (policy ACCEPT 7574898 packets, 3080985747 bytes) pkts bytes target prot opt in out source destination 2054 344237 all -- any eth0 10.0.0.42 anywhere 2634 466259 all -- any eth0 10.0.0.43 anywhere 4059 734240 all -- any eth0 10.0.0.44 anywhere
Or, to have all that setup and cron
'ed collection done nicely for you, use the
IP-Accounting-Next-Generation Package (ipac-ng
):
No. Although it should be very easy to basically copy across the code from the IPv4 mangling. If anyone fancies doing it should basically be a cut and paste job. Jacque's last offical statement was in this thread:
chroot()
isn't secure?Lucky we fixed it then isn't it!... Remember to do:
chmod 000 /vservers
Some people consider this a kludge; it is achieved by
the addition of the following code to `fs/namei.c
' in
the kernel source:
/* A dir with permission bit all 0s is a dead zone for process running in a vserver. By doing chmod 000 /vservers you fix the "escape from chroot" bug. */ if ((mode & 0777) == 0 && S_ISDIR(mode) && current->s_context != 0) return -EACCES;
If a directory with permissions `000
' (shown as
`d---------
') is accessed by a vserver, then
`-EACCES
' is returned regardlessly and
permission is denied. (Normally a `000
'ed file is
only access by root and this changes to only accessible by root
within the host-server).
alpha
and beta
are hosting servers running
the `s_context
' patch. uno
is the vserver to
copy:
alpha% rsync -aPxvze ssh --delete --stats --numeric-ids {,beta:}/vservers/uno/
Preserve attributes, show progress and continue
where interrupted, don't cross filesytems, do be
verbose, use SSH, dodelete files no-longer present
on the alpha
copy, show statistics.
Francois Deppierraz adds: ``The --numeric-ids rsync option is [required] to avoid messing with files ownership.''
With the `vserver
' userspace tools version 0.22
onwards it may be worth investigating the `PROFILE=
'
options which may help with keep backups synchronized, but not
running.
Another method for backing up vservers (or duplicating between
machines for failover) is to use the `dump
' and
`restore
' tools which allow incremental backup and
compression. Since these operate on the inode level they
handle open files correctly (aswell as efficiently
handling hardlinks in a unified setup).
Herbert Pötzl also has had good experiences with
`dump
' 0.4b32 producing pretty small (zlib/bzip2
compressed) images of a template server together with its clones
using the following command:
# dump 0zf <backup-file> /vservers/{<template>,<clone1>,<clone2>,...}
A practical example would be:
# dump 0zf /backup/daily.dump /vservers/{ISRV,IS01,IS02,IS03}
Tomcat 3.3.1 can be made to work in a vserver by explicitly
setting its IP address in the `server.xml
' config
file. However Tomcat 4.x apparently has a bug filed against it
that implies that ``it cannot be fully configured to use an
arbitrary IP address''.
Consider the following setup:
SERV (template used for vservers) SV01 (first vserver/clone) SV02 (second vserver/clone) SV03 (third vserver/clone)
and the package `wossname-0.1.noarch.rpm
' needs to
be updated on all the vservers to a newer version called
`wossname-0.2.noarch.rpm
', then usually this would be
done with the following command on each vserver:
rpm -U wossname-0.2.noarch.rpm
In vserver setup, you could do it the same way, by
copying the package to each vserver SV01,SV02,SV03,... and
manually installing it. A much better solution would be to use
the `vrpm
' wrapper script to upgrade all the vservers
at once with the following command:
# vrpm SERV SV01 SV02 SV03 -- -U wossname-0.2.noarch.rpm
Or even better:
# vrpm --unify SERV SV01 SV02 SV03 -- -U wossname-0.2.noarch.rpm
which actually unifies the packages after installation/update.
# /usr/lib/vserver/vunify <template> <clone1> <clone2> -- <packages>
For example to locate all the files from the
`apache
', `apache-conf
' and
`mod_php
' RPM Packages three vservers/clones
(IS01-03
) from a common template
(ISRV
), use:
# /usr/lib/vserver/vunify ISRV IS01 IS02 IS03 -- apache apache-conf mod_php
(This is better because unification is a little more than just a hardlink; it is a hardlink with additional immuteability [except for removal]. Therefore you are not be able to change the file or link in the root server until you remove the immutable flag or the file. The script handles this correctly for you).
The kernel NFS server isn't available within a vserver. The userspace nfs client/server may work.
Normally you restrict everything you can in a vserver, to do
with accessing hardware or system-related features of the kernel
(eg: filesystem mounting, rebooting, creating device nodes or
setting the system clock). vservers are often given the
`CAP_NET_RAW
' to allow a vserver to produce low-level
packets such as ICMP
ping. Sometimes you may wish to
allow them additional capabilites:
The `/usr/include/linux/capability.h
' Include file
helpfully lists the actual capabilities available and the
following LIDS Howto (Linux Intrusion Detection System) lists what
each capability enables/disables:
http://www.lids.org/lids-howto/node34.html
(via archive.org)Update 2018: Joel Stephens noted that the original LIDS project website is down. But that a good comparision overview of a number of Linux-related intrusion-detection systems can be found at:
This is answered in many places, such as the Kernel-HOWTO:
http://www.miredespa.com/wmaton/linux/kernel-patch-HOWTO.html
http://www.linuxhq.com/ldp/howto/Kernel-HOWTO-6.html
http://www.google.com/search?q=kernel+patch+howto
See the section for where to download patches above.
Some more vserver
stuff.
Back to the rest of Paul Sladen.