diff options
author | William Pitcock <nenolod@dereferenced.org> | 2011-02-02 22:19:48 -0600 |
---|---|---|
committer | Jeff Bilyk <jbilyk@gmail.com> | 2011-02-07 20:17:29 +0000 |
commit | 5724ffe237c645f2787e65cd2430d179c10b3a34 (patch) | |
tree | efcf9b457ca1167c4d5aa004558e127cf49e2d7f /testing | |
parent | 4c7a1c1d2888003136c534bb02b4bf270dc9e23f (diff) | |
download | aports-5724ffe237c645f2787e65cd2430d179c10b3a34.tar.bz2 aports-5724ffe237c645f2787e65cd2430d179c10b3a34.tar.xz |
testing/gradm: introduce base policy, initscript
Diffstat (limited to 'testing')
-rw-r--r-- | testing/gradm/APKBUILD | 30 | ||||
-rw-r--r-- | testing/gradm/base.policyd | 130 | ||||
-rw-r--r-- | testing/gradm/grsec-rbac.initd | 19 | ||||
-rw-r--r-- | testing/gradm/policy | 211 |
4 files changed, 385 insertions, 5 deletions
diff --git a/testing/gradm/APKBUILD b/testing/gradm/APKBUILD index ec155e2d67..8c62b1e869 100644 --- a/testing/gradm/APKBUILD +++ b/testing/gradm/APKBUILD @@ -1,17 +1,19 @@ # Contributor: William Pitcock <nenolod@dereferenced.org> # Maintainer: William Pitcock <nenolod@dereferenced.org> pkgname=gradm -pkgver=2.2.1 -pkgrel=1 +pkgver=2.2.0 +pkgrel=2 pkgdesc="administrative utility for grsecurity kernels" url="http://www.grsecurity.org/" arch="all" license="GPL" -makedepends= makedepends="bison flex" install="" subpackages="$pkgname-doc" -source="http://grsecurity.net/stable/gradm-2.2.1-201012301333.tar.gz" +source="http://grsecurity.net/stable/gradm-2.2.0-201011061849.tar.gz + policy + base.policyd + grsec-rbac.initd" _builddir="$srcdir/gradm2" prepare() { @@ -32,6 +34,24 @@ build() { package() { cd "$_builddir" make DESTDIR="$pkgdir" install || return 1 + + # we don't want the grsecurity-recommended policy as it's old + # and non-modular. + rm "$pkgdir"/etc/grsec/policy + + # install the base policy file which pulls in everything else. + install -m644 "$srcdir"/policy "$pkgdir"/etc/grsec/policy + + # prepare and install base policy to /etc/grsec/policy.d + install -d -D "$pkgdir"/etc/grsec/policy.d + install -m644 "$srcdir"/base.policyd "$pkgdir"/etc/grsec/policy.d/base + + # install grsec-rbac into initd + install -d -D "$pkgdir"/etc/init.d + install -m755 "$srcdir"/grsec-rbac.initd "$pkgdir"/etc/init.d/grsec-rbac } -md5sums="7ab5e5f57525c7a4a399e3616faf5629 gradm-2.2.1-201012301333.tar.gz" +md5sums="081765637a407dd7e4cd07f95413d6b8 gradm-2.2.0-201011061849.tar.gz +06495eebb8f2346d96c64c133d1614fa policy +9b66076b8e74e3d6a637457e23b5c699 base.policyd +ac7f34962c16955e20c9da26235cab36 grsec-rbac.initd" diff --git a/testing/gradm/base.policyd b/testing/gradm/base.policyd new file mode 100644 index 0000000000..bf95c2bd82 --- /dev/null +++ b/testing/gradm/base.policyd @@ -0,0 +1,130 @@ +role admin sA +subject / rvka + / rwcdmlxi + +role default G +role_transitions admin +subject / dpo + / r + /opt rx + /home rwxcd + /mnt rw + /dev + /dev/grsec h + /dev/urandom r + /dev/random r + /dev/zero rw + /dev/input rw + /dev/psaux rw + /dev/null rw + /dev/tty? rw + /dev/console rw + /dev/tty rw + /dev/pts rw + /dev/ptmx rw + /dev/dsp rw + /dev/mixer rw + /dev/initctl rw + /dev/fd0 r + /dev/cdrom r + /dev/mem h + /dev/kmem h + /dev/port h + /bin rx + /sbin rx + /lib rx + /usr rx + /etc rx + /proc rwx + /proc/slabinfo h + /proc/kcore h + /proc/kallsyms h + /proc/modules h + /proc/sys r + /root r + /tmp rwcd + /var rwxcd + /var/tmp rwcd + /var/log r + /boot h + /lib/modules h + /etc/grsec h + + -CAP_KILL + -CAP_SYS_TTY_CONFIG + -CAP_LINUX_IMMUTABLE + -CAP_NET_RAW + -CAP_MKNOD + -CAP_SYS_ADMIN + -CAP_SYS_RAWIO + -CAP_SYS_MODULE + -CAP_SYS_PTRACE + -CAP_NET_ADMIN + -CAP_NET_BIND_SERVICE + -CAP_NET_RAW + -CAP_SYS_CHROOT + -CAP_SYS_BOOT + -CAP_SETFCAP + +# the d flag protects /proc fd and mem entries for sshd +# all daemons should have 'p' in their subject mode to prevent +# an attacker from killing the service (and restarting it with trojaned +# config file or taking the port it reserved to run a trojaned service) +subject /usr/sbin/sshd dpo + / h + /bin/sh x + /bin/bash x + /dev h + /dev/log rw + /dev/random r + /dev/urandom r + /dev/null rw + /dev/ptmx rw + /dev/pts rw + /dev/tty rw + /dev/tty? rw + /etc r + /etc/passwd r + /etc/shadow r + /etc/grsec h + /home rwcd + /lib rx + /root + /proc r + /proc/*/oom_adj w + /proc/kcore h + /proc/sys h + /usr/lib rx + /usr/share/zoneinfo r + /var/log + /var/mail + /var/log/lastlog rw + /var/log/wtmp w + /var/run/sshd + /var/run/utmp rw + /var/empty rw + + -CAP_ALL + +CAP_CHOWN + +CAP_SETGID + +CAP_SETUID + +CAP_SYS_CHROOT + +CAP_SYS_RESOURCE + +CAP_SYS_TTY_CONFIG + +subject /usr/bin/ssh + /etc/ssh/ssh_config r + +subject /bin/busybox + +CAP_SYS_ADMIN + /root/.ash_history rw + /dev/log rwc + /var/log rwc + /var/log/messages rwc + /var/log/wtmp w + /var/log/faillog rwcd + +subject /usr/bin/sudo + +CAP_SYS_ADMIN + /dev/log rw + diff --git a/testing/gradm/grsec-rbac.initd b/testing/gradm/grsec-rbac.initd new file mode 100644 index 0000000000..2bc40b9854 --- /dev/null +++ b/testing/gradm/grsec-rbac.initd @@ -0,0 +1,19 @@ +#!/sbin/runscript + +depend() { + need net + after firewall +} + +start() { + ebegin "Enabling grsecurity RBAC policy" + grsec -E + eend $? +} + +stop() { + ebegin "Disabling grsecurity RBAC policy" + grsec -D + eend $? +} + diff --git a/testing/gradm/policy b/testing/gradm/policy new file mode 100644 index 0000000000..806f0e0795 --- /dev/null +++ b/testing/gradm/policy @@ -0,0 +1,211 @@ +# Base grsecurity policy for Alpine. +# +# If you want to use a custom policy, or add on local modifications to +# the system policy, edit below the include line or remove the include +# line to completely remove the system policy entirely from your setup. +# +# Documentation on the file format as provided in the sample policy file +# follow below for your reference: +## Role flags: +# A -> This role is an administrative role, thus it has special privilege normal +# roles do not have. In particular, this role bypasses the +# additional ptrace restrictions +# N -> Don't require authentication for this role. To access +# the role, use gradm -n <rolename> +# s -> This role is a special role, meaning it does not belong to a +# user or group, and does not require an enforced secure policy +# base to be included in the ruleset +# u -> This role is a user role +# g -> This role is a group role +# G -> This role can use gradm to authenticate to the kernel +# A policy for gradm will automatically be added to the role +# T -> Enable TPE for this role +# l -> Enable learning for this role +# P -> Use PAM authentication for this role. +# +# a role can only be one of user, group, or special +# +# role_allow_ip IP/optional netmask +# eg: role_allow_ip 192.168.1.0/24 +# You can have as many of these per role as you want +# They restrict the use of a role to a list of IPs. If a user +# is on the system that would normally get the role does not +# belong to those lists of IPs, the system falls back through +# its method of determining a role for the user +# +# Role hierarchy +# user -> group -> default +# First a user role attempts to match, if one is not found, +# a group role attempts to match, if one is not found, +# the default role is used. +# +# role_transitions <special role 1> <special role 2> ... <special role n> +# eg: role_transitions www_admin dns_admin +# +# role transitions specify which special roles a given role is allowed +# to authenticate to. This applies to special roles that do not +# require password authentication as well. If a user tries to +# authenticate to a role that is not within his transition table, he +# will receive a permission denied error +# +# Nested subjects +# subject /bin/su:/bin/bash:/bin/cat +# / rwx +# +CAP_ALL +# grant privilege to specific processes if they are executed +# within a trusted path. In this case, privilege is +# granted if /bin/cat is executed from /bin/bash, which is +# executed from /bin/su. +# +# Configuration inheritance on nested subjects +# nested subjects inherit rules from their parents. In the +# example above, the nested subject would inherit rules +# from the nested subject for /bin/su:/bin/bash, +# and the subject /bin/su +# View the 1.9.x documentation for more information on +# configuration inheritance +# +# new object modes: +# m -> allow creation of setuid/setgid files/directories +# and modification of files/directories to be setuid/setgid +# M -> audit the setuid/setgid creation/modification +# c -> allow creation of the file/directory +# C -> audit the creation +# d -> allow deletion of the file/directory +# D -> audit the deletion +# p -> reject all ptraces to this object +# l -> allow a hardlink at this path +# (hardlinking requires at a minimum c and l modes, and the target +# link cannot have any greater permission than the source file) +# L -> audit link creation +# new subject modes: +# O -> disable "writable library" restrictions for this task +# t -> allow this process to ptrace any process (use with caution) +# r -> relax ptrace restrictions (allows process to ptrace processes +# other than its own descendants) +# i -> enable inheritance-based learning for this subject, causing +# all accesses of this subject and anything it executes to be placed +# in this subject, and inheritance flags added to executable objects +# in this subject +# a -> allow this process to talk to the /dev/grsec device +# +# user/group transitions: +# You may now specify what users and groups a given subject can +# transition to. This can be done on an inclusive or exclusive basis. +# Omitting these rules allows a process with proper privilege granted by +# capabilities to transition to any user/group. +# +# Examples: +# subject /bin/su +# user_transition_allow root spender +# group_transition_allow root spender +# subject /bin/su +# user_transition_deny evilhacker +# subject /bin/su +# group_transition_deny evilhacker1 evilhacker2 +# +# Domains: +# With domains you can combine users that don't share a common +# GID as well as groups so that they share a single policy +# Domains work just like roles, with the only exception being that +# the line starting with "role" is replaced with one of the following: +# domain somedomainname u user1 user2 user3 user4 ... usern +# domain somedomainname g group1 group2 group3 group4 ... groupn +# +# Inverted socket policies: +# Rules such as +# connect ! www.google.com:80 stream tcp +# are now allowed, which allows you to specify that a process can connect to anything +# except to port 80 of www.google.com with a stream tcp socket +# the inverted socket matching also works on bind rules +# +# INADDR_ANY overriding +# You can now force a given subject to bind to a particular IP address on the machine +# This is useful for some chrooted environments, to ensure that the source IP they +# use is one of your choosing +# to use, add a line like: +# ip_override 192.168.0.1 +# +# Per-interface socket policies: +# Rules such as +# bind eth1:80 stream tcp +# bind eth0#1:22 stream tcp +# are now allowed, giving you the ability to tie specific socket rules +# to a single interface (or by using the inverted rules, all but one +# interface). Virtual interfaces are specified by the <ifname>#<vindex> +# syntax. If an interface is specified, no IP/netmask or host may be +# specified for the rule. +# +# New learning system: +# To learn on a given subject: add l (the letter l, not the number 1) +# to the subject mode +# If you want to learn with the most restrictive policy, use the +# following: +# subject /path/to/bin lo +# / h +# -CAP_ALL +# connect disabled +# bind disabled +# Resource learning is also supported, so lines like +# RES_AS 0 0 +# can be used to learn a particular resource +# +# To learn on a given role, add l to the role mode +# For both of these, to enable learning, enable the system like: +# gradm -L /etc/grsec/learning.logs -E +# and then generate the rules after disabling the system after the +# learning phase with: +# gradm -L /etc/grsec/learning.logs -O /etc/grsec/policy +# To use full system learning, enable the system like: +# gradm -F -L /etc/grsec/learning.logs +# and then generate the rules after disabling the system after the +# learning phase with: +# gradm -F -L /etc/grsec/learning.logs -O /etc/grsec/policy +# +# New PaX flag format (replaces PaX subject flags): +# PaX flags can be forced on or off, regardless of the flags on the +# binary, by using + or - before the following PaX flag names: +# PAX_SEGMEXEC +# PAX_PAGEEXEC +# PAX_MPROTECT +# PAX_RANDMMAP +# PAX_EMUTRAMP +# +# New feature for easier policy maintenance: +# replace <variable name> <replace string> +# e.g.: +# replace CVSROOT /home/cvs +# now $(CVSROOT) can be used in any subject or object pathname, like: +# $(CVSROOT)/grsecurity r +# This will translate to /home/cvs/grsecurity r +# This feature makes it easier to update policies by naming specific +# paths by their function, then only having to update those paths once +# to have it affect a large number of subjects/objects. +# +# capability auditing / log suppression +# use of a capability can be audited by adding "audit" to the line, eg: +# +CAP_SYS_RAWIO audit +# log suppression for denial of a capbility can be done by adding "suppress": +# -CAP_SYS_RAWIO suppress +# +# Note that the omission of any feature of a role or subject +# results in a default-allow +# For instance, if no capability rules are added, an implicit +CAP_ALL is used +# + +# +# Default security policy provided by packages in Alpine are installed into +# /etc/grsec/policy.d as /etc/grsec/policy.d/$pkgname where $pkgname is the +# package name. It is not recommended that you edit those definitions unless +# you know what you're doing, as the Alpine system may depend on the presence +# of those definitions. +# + +include </etc/grsec/policy.d> + +# +# If you wish to add any additions to the system policy, you may do so below +# this line. As the configuration is read top-to-bottom, any changes you make +# here may override the default security policy. +# + |