Commit Graph

5348 Commits

Author SHA1 Message Date
Frédéric Dalleau
d680929bbc Allow containers to start in AppArmor namespaces
This patch allows users to start containers in AppArmor namespaces.
Users can define their own profiles for their containers, but
lxc-start must be allowed to change to a namespace.

A container configuration file can wrap a container in an AppArmor
profile using lxc.aa_profile.

A process in an AppArmor namespace is restricted to view
or manage only the profiles belonging to this namespace, as if no
other profiles existed. A namespace can be created as follow:
sudo mkdir /sys/kernel/security/apparmor/policy/namespaces/$NAMESPACE

AppArmor can stack profiles so that the contained process is bound
by the intersection of all profiles of the stack. This is achieved
using the '//&' operator as follow:

lxc.aa_profile = $PROFILE//&:$NAMESPACE://unconfined

In this case, even the guest process appears unconfined in the
namespace, it is still confined by $PROFILE.

A guest allowed to access "/sys/kernel/security/apparmor/** rwklix,"
will be able to manage its own profile set, while still being
enclosed in the topmost profile $PROFILE:

Different guests can be assigned the same namespace or different
namespaces. In the first case, they will share their profiles.
In the second case, they will have distinct sets of profiles.

This is validated on privileged containers.

Signed-off-by: Frédéric Dalleau <frederic.dalleau@collabora.com>
2017-07-07 12:33:38 +02:00
Christian Brauner
6262244de9 Merge pull request #1675 from 0x0916/2017-07-05/lxc-init
lxc-init: some enhancements
2017-07-06 15:31:37 +02:00
Stéphane Graber
6da35cc1b2 Merge pull request #1673 from brauner/2017-07-04/update_readme
README: update
2017-07-05 12:27:28 -04:00
Christian Brauner
20069fa3ee Merge pull request #1677 from 0x0916/2017-07-05/fix-parse-config-file
tests: delete the intermediate file and directory.
2017-07-05 11:50:01 +02:00
Christian Brauner
d552fc35c9 Merge pull request #1676 from 0x0916/2017-07-05/fix-headers
fix headers
2017-07-05 11:32:14 +02:00
Long Wang
a6638e2e98 tests: remove temp lxcpath for attach testcase
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 15:39:02 +08:00
Long Wang
df24d43699 tests: remove the temp container directory
c->destory() will not remove the temp container directory.
This patch fix that.

Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 15:17:58 +08:00
Long Wang
6cd5db20bc tests: create temp file before lxc_container_new
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 14:51:03 +08:00
Long Wang
3705503ac3 use same ifndef/define format for all headers
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 14:06:01 +08:00
Long Wang
74a99f40b3 caps.h: move ifndef/define to the top
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 12:19:37 +08:00
Long Wang
16affc24a5 lxc-init: move initialization of act to outside of the loop
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 12:13:09 +08:00
Long Wang
1574fc2495 lxc-init: adjust include statements
* Use `#include <lxc/lxccontaienr.h>` style for exported haeders.
* remove used header `caps.h`

Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 12:12:38 +08:00
Long Wang
1bfb12006f lxc-init: non-functional changes
This patch mainly update the message format to:

* upper the first letter
* end without a dot

all changes are relate to `lxc-init`

Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 12:12:13 +08:00
Long Wang
55684fd822 lxc-init: add comment for exclude 32 and 33 signals
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-05 12:10:54 +08:00
Christian Brauner
978a73831c Merge pull request #1674 from 0x0916/2017-07-04/lxc-execute
lxc-execute: print error message when failed
2017-07-04 15:18:55 +02:00
Long Wang
6de247e335 lxc-execute: print error message when failed
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-04 16:16:30 +08:00
Christian Brauner
ea033bbcac
README: update
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-07-04 00:15:05 +02:00
Stéphane Graber
b5398df96c Merge pull request #1672 from brauner/2017-07-03/add_cii_best_practices_badge_to_readme
README: add CII Best Practices badge to README
2017-07-03 14:51:51 -04:00
Christian Brauner
0b39b2a9cc
README: add CII Best Practices badge to README
Signed-off-by: Christian Brauner <christian.brauner@ubuntu.com>
2017-07-03 20:42:18 +02:00
Christian Brauner
cf4a661bda Merge pull request #1668 from 0x0916/2017-07-03/lxclock
lxclock: bugfix and update some comment
2017-07-03 11:30:59 +02:00
Long Wang
ccfc84ca9f lxclock: non-functional changes
This patch mainly updates comments based on the current code.

Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-03 15:43:34 +08:00
Long Wang
98375790a4 lxclock: return the right error when open lock file failed
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-03 15:41:25 +08:00
Christian Brauner
b51eb5ca3a Merge pull request #1667 from 0x0916/2017-07-02/fix-cppcheck-warnings
fix some cppcheck warnings
2017-07-02 17:47:36 +02:00
Christian Brauner
26b9df9dc7 Merge pull request #1666 from 0x0916/2017-07-02/remove-unused-code
remove the unused macro
2017-07-02 17:46:29 +02:00
0x0916
6fc7d8b63e fix some cppcheck warnings
use cppcheck tools `cppcheck --enable=warning  .` on lxc source directory.

This patch fix the following warnning

```
[src/lxc/cgroups/cgfs.c:794]: (warning) %ld in format string (no. 3) requires 'long' but the argument type is 'unsigned long'.
[src/lxc/confile.c:4441]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'.
[src/lxc/confile.c:4502]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'.
[src/lxc/confile_legacy.c:921]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'.
[src/lxc/confile_legacy.c:938]: (warning) %d in format string (no. 2) requires 'int' but the argument type is 'unsigned int'.
[src/lxc/lxclock.c:63]: (warning) %zd in format string (no. 1) requires 'ssize_t' but the argument type is 'size_t {aka unsigned long}'.
[src/lxc/tools/lxc_info.c:118]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_info.c:118]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_info.c:123]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_info.c:127]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_info.c:130]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_top.c:212]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_top.c:212]: (warning) %u in format string (no. 2) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_top.c:217]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_top.c:221]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
[src/lxc/tools/lxc_top.c:224]: (warning) %u in format string (no. 1) requires 'unsigned int' but the argument type is 'signed int'.
```

Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-02 22:18:16 +08:00
0x0916
157ad8d409 remove the unused macro
Signed-off-by: Long Wang <w@laoqinren.net>
2017-07-02 22:17:01 +08:00
Christian Brauner
c6f7b9513a Merge pull request #1591 from grzgrzgrz3/regres-lxc-ls
lxc-ls: return all containers by default, new filter - list only defi…
2017-07-02 14:31:03 +02:00
Stéphane Graber
05e7cd4aec Merge pull request #1664 from d4s/altlinux-template
Added '--apt-conf' argument for ALTLinux template.
2017-07-02 02:06:35 -04:00
Denis Pynkin
bffda95b20 Added '--apt-conf' argument for ALTLinux template.
Added [-a|--apt-conf] parameter for selection of exact package
providing 'apt-conf'. By default 'apt-conf-sisyphus' is used for
Sisyphus and 'apt-conf-branch' for the rest of branches.

Signed-off-by: Denis Pynkin <denis.pynkin@collabora.com>
2017-07-01 17:30:17 +03:00
Christian Brauner
5147c5ee9d Merge pull request #1658 from 0x0916/2017-06-30/new-configuration-keys
new configuration keys
2017-07-01 13:09:28 +02:00
Christian Brauner
fe9a13f700 Merge pull request #1661 from 0x0916/2017-07-01/fix-set-state-error
start: send state to legacy lxc-monitord state server even if no state clients registered
2017-07-01 13:08:35 +02:00
0x0916
65ee1673f6 start: send state to legacy lxc-monitord state server even if no state clients registered
This pr https://github.com/lxc/lxc/pull/1618 kill lxc-monitord, for backwards compatibility,
we also send state to legacy lxc-monitord state server in function `lxc_set_state`.

we should also send state if there is no state clients registered, otherwise `lxc-monitor` client will
not get state change event if container changed state to `STARTING` or `RUNNING`.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-07-01 18:07:02 +08:00
Christian Brauner
066e9fe8b5 Merge pull request #1662 from 0x0916/2017-07-01/lxc-monitor-quit
lxc-monitord: exit when got a quit command
2017-07-01 11:43:14 +02:00
0x0916
267bc7eda8 lxc-monitord: exit when got a quit command
lxc-monitor has an option to tell lxc-monitord to quit.

```
~/lxc (master) # lxc-monitor --help
lxc-monitor monitors the state of the NAME container

Options :
  -n, --name=NAME   NAME of the container
                    NAME may be a regular expression
  -Q, --quit        tell lxc-monitord to quit
```
But it does not work. This patch fix that.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-07-01 14:06:00 +08:00
0x0916
b67771bc26 confile: rename lxc.utsname to lxc.uts.name
the legacy keys will be kept around until LXC 3.0 and then will be
removed.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-30 09:43:53 +08:00
0x0916
42e53c2920 confile: rename lxc.devttydir to lxc.tty.dir
the legacy keys will be kept around until LXC 3.0 and then will be
removed

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-30 09:41:25 +08:00
0x0916
55c84efcba confile: namespace lxc.signal keys
* rename lxc.haltsignal to lxc.signal.halt
* rename lxc.rebootsignal to lxc.signal.reboot
* rename lxc.stopsignal to lxc.signal.stop

the legacy keys will be kept around until LXC 3.0 and then will be
removed.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-30 09:41:25 +08:00
0x0916
46cc906dc0 confile: namespace lxc.log keys
* rename lxc.logfile to lxc.log.file
* renaem lxc.loglevel to lxc.log.level
* rename lxc.syslog to lxc.log.syslog

the legacy keys will be kept around until LXC 3.0 and then will be
removed.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-30 09:41:04 +08:00
0x0916
9dcf7b4d23 confile: namespace lxc.init keys
* rename lxc.init_cmd to lxc.init.cmd
* rename lxc.init_uid to lxc.init.uid
* rename lxc.init_gid to lxc.init.gid

the legacy keys will be kept around until LXC 3.0 and then will be
removed.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 22:14:46 +08:00
0x0916
240d4b74ce confile: rename lxc.limit to lxc.prlimit
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 22:14:34 +08:00
Christian Brauner
86ccab2e9b Merge pull request #1649 from 0x0916/2017-06-27/wipe-lxc-network-references
wipe all references lxc.network.{[i]}.* and replace with lxc.net.[i].*
2017-06-29 13:17:59 +02:00
0x0916
c2dbbbb612 confile_legacy: fix lxc_clear_nic error
`lxc_clear_nic` can not clear the nic, because it will not found
the right `netdev`.

testcase from get_item.c

```
313         if (!c->set_config_item(c, "lxc.network.hwaddr", "00:16:3e:xx:xx:xx")) {
314                 fprintf(stderr, "%d: failed to set network.hwaddr\n", __LINE__);
315                 goto out;
316         }
317         if (!c->set_config_item(c, "lxc.network.ipv4", "10.2.3.4")) {
318                 fprintf(stderr, "%d: failed to set ipv4\n", __LINE__);
319                 goto out;
320         }
321
322         ret = c->get_config_item(c, "lxc.network.0.ipv4", v2, 255);
323         if (ret <= 0) {
324                 fprintf(stderr, "%d: lxc.network.0.ipv4 returned %d\n", __LINE__, ret);
325                 goto out;
326         }
327         if (!c->clear_config_item(c, "lxc.network.0.ipv4")) {
328                 fprintf(stderr, "%d: failed clearing all ipv4 entries\n", __LINE__);
329                 goto out;
330         }
331         ret = c->get_config_item(c, "lxc.network.0.ipv4", v2, 255);
332         if (ret != 0) {
333                 fprintf(stderr, "%d: after clearing ipv4 entries get_item(lxc.network.0.ipv4 returned %d\n", __LINE__, ret);
334                 goto out;
335         }
```

line `327` will failed to clear nic, and line `333` give the error.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:32:16 +08:00
0x0916
935cfd3e36 testcase: define a network before checks
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
0x0916
ae1dc8b42e confile_utils: supporting new net hwaddr key in update_hwaddr
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
0x0916
4a787c27b2 confile: supporting new net hwaddr key in network_new_hwaddrs
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
0x0916
ce4be612ce confile_utils: add lxc_config_net_hwaddr
`lxc_config_net_hwaddr` return true if the config entry
is `lxc.network.hwaddr` or `lxc.net.[i].hwaddr`, `lxc.network.[i].hwaddr`

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
0x0916
82c3a0dc57 confile: update comment: replace p+12 with p+8
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
0x0916
7fa3f2e9eb replace all lxc.network* with lxc.net*
This patch wipe all references to lxc.network{[i]}.*
and replace with lxc.net.{[i]}.* in templates, documentation
and configuration files.

Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-29 13:18:41 +08:00
Christian Brauner
18ede42752 Merge pull request #1652 from 0x0916/2017-06-27/free-downscript
confile: free netdev->downscript
2017-06-27 21:14:45 +02:00
0x0916
e07629138f confile: free netdev->downscript
Signed-off-by: 0x0916 <w@laoqinren.net>
2017-06-27 22:12:38 +08:00