#!/bin/bash
# vim:expandtab:tabstop=4
#
# author:    chris friedhoff - chris@friedhoff.org
# version:   pcaps4convenience  2  Tue Mar 11 2008
#
#
# changelog:
# 1 - initial release pcaps4convenience
# 2 - changed 'attr -S -r' to 'setcap -r' and removed attr code
#
#
# the user has the necessary POSIX Capabilities in his Inheritance
# set and the applications are accepting the needed PCaps through
# their Inheritance set.
# a user who has not the PCaps in his Inheritance set CAN NOT
# successfully execute the apps
# --> SET=ie
# (if SET=pe than you relax the security level of your machine)
#
#
#


##HERE WE ADD APPS
##################

## these apps uses their POSIX Caps
###################################
# see /usr/include/linux/capability.h
# adjust - if needed and wanted - /etc/security/capability.conf
#eject=cap_dac_read_search,cap_sys_rawio
eject=2,17
#killall=cap_kill
killall=5
#modprobe=cap_sys_module
modprobe=16
#ntpdate=cap_net_bind_service,cap_sys_time
ntpdate=10,25
#qemu=cap_net_admin
qemu=12
#route=cap_net_admin
route=12


# this apps were converted/reverted
###################################
APPSARRAY=( eject killall modprobe ntpdate qemu route )


# we put it into this set
#########################
SET=ie


##FROM HERE ONLY LOGIC
######################

#save assumption!?
export PATH=/sbin:/bin:/usr/sbin:/usr/bin/:usr/local/sbin:/usr/local/bin

p4c_test(){
    # are we sane?
    WICH=`which which 2>/dev/null`
    if [ $WICH == "" ]; then
        # thats bad
        echo "Sorry, I haven't found which"
        exit
    fi

    # we needt his apps
    SETCAP=`which setcap 2>/dev/null`
    if [ "$SETCAP" == "" ]; then
        echo "Sorry, I'm missing setcap !"
        exit
    fi

    # checking setcap for SET_SETFCAP PCap ?
    # for now we stick to root
    if [ "$( id -u )" != "0" ]; then
        echo "Sorry, you must be root !"
        exit 1
    fi
}



p4c_app_convert(){
    # convert a single app
    # $1 is app name; $2 is POSIX Caps
    # well symlinks to apps, so we use -a ...
    APP=`which -a $1 2>/dev/null`
    if [ "$APP" != "" ]; then
        FOUND=no
        for i in $APP; do
            # ... and are looking for symlinks
            if [ -f "$i" -a ! -L $i -a "$FOUND"=="no" ]; then
                echo "converting $i"
                setcap $2=$SET $i
                FOUND=yes
            fi
        done
        if [ "$FOUND" == "no" ]; then
            # 'which' found only symlinks
            echo "1 haven't found $1"
        fi
    else
        # 'which' hasn't anything given back
        echo "haven't found $1"
    fi
}



p4c_app_revert(){
    # revert a singel app
    # $1 is app name
    APP=`which -a $1 2>/dev/null`
    if [ "$APP" != "" ]; then
        FOUND=no
        for i in $APP; do
            if [ -f "$i" -a ! -L $i -a "$FOUND"=="no" ]; then
                echo "reverting $i"
                setcap -r $i 2>/dev/null
                FOUND=yes
            fi
        done
        if [ "$FOUND" == "no" ]; then
            echo "1 haven't found $1"
        fi
    else
        echo "haven't found $1"
    fi
}



p4c_convert(){
    # we go throug the APPSARRAY and call s2p_app_convert to do the job
    COUNTER=0
    let UPPER=${#APPSARRAY[*]}-1
    until [ $COUNTER == $UPPER ]; do
        p4c_app_convert ${APPSARRAY[$COUNTER]} ${!APPSARRAY[$COUNTER]}
        let COUNTER+=1
    done
}



p4c_revert(){
    COUNTER=0
    let UPPER=${#APPSARRAY[*]}-1
    until [ $COUNTER == $UPPER ]; do
        p4c_app_revert ${APPSARRAY[$COUNTER]}
        let COUNTER+=1
    done

}



p4c_usage(){
    echo
    echo "pcaps4convenience"
    echo
    echo "pcaps4convenience stores the needed POSIX Capabilities for binaries to"
    echo "run successful into their Inheritance and Effective Set."
    echo "The user who wants to execute this binaries successful has to have the"
    echo "necessary POSIX Capabilities in his Inheritable Set. This might be done"
    echo "through the PAM module pam_cap.so."
    echo "A user who has not the needed PCaps in his Inheritance Set CAN NOT execute"
    echo "these binaries successful."
    echo "(well, still per sudo or su -c - but thats not the point here)"
    echo
    echo "You need and I will check fot the utilities which and setcap."
    echo
    echo "Your Filesystem has to support extended attributes and your kernel must have"
    echo "support for POSIX File Capabilities (CONFIG_SECURITY_FILE_CAPABILITIES)."
    echo
    echo "Usage:  pcaps4convenience [con(vert)|rev(ert)|help]"
    echo
    echo "         con|convert - from setuid0 to POSIX Capabilities"
    echo "         rev|revert  - from POSIX Capabilities back to setui0"
    echo "         help        - this help message"
    echo
}



case "$1" in
    con|convert)
        p4c_test
        p4c_convert
        exit 0
        ;;
    rev|revert)
        p4c_test
        p4c_revert
        exit 0
        ;;
    help)
        p4c_usage
        exit 0
        ;;
    *)
        echo "Try 'pcaps4convenience help' for more information"
        exit 1
        ;;
esac
