ipsec: Only allow specific commands to be executed via ipsec script

The previous fallback allowed running any executable as root if executing
ipsec via sudo was allowed, by using e.g. `sudo ipsec ../../../bin/sh`.
This commit is contained in:
Tobias Brunner
2017-01-18 16:15:48 +01:00
parent 1c27cf3bc8
commit 2ec6372f5a
+20 -12
View File
@@ -44,6 +44,8 @@ export IPSEC_DIR IPSEC_BINDIR IPSEC_SBINDIR IPSEC_CONFDIR IPSEC_PIDDIR IPSEC_SCR
IPSEC_DISTRO="Institute for Internet Technologies and Applications\nUniversity of Applied Sciences Rapperswil, Switzerland" IPSEC_DISTRO="Institute for Internet Technologies and Applications\nUniversity of Applied Sciences Rapperswil, Switzerland"
command_dir="$IPSEC_DIR"
case "$1" in case "$1" in
'') '')
echo "$IPSEC_SCRIPT command [arguments]" echo "$IPSEC_SCRIPT command [arguments]"
@@ -94,10 +96,6 @@ case "$1" in
echo "$IPSEC_PIDDIR" echo "$IPSEC_PIDDIR"
exit 0 exit 0
;; ;;
copyright|--copyright)
set _copyright
# and fall through, invoking "ipsec _copyright"
;;
down) down)
shift shift
if [ "$#" -ne 1 ] if [ "$#" -ne 1 ]
@@ -307,13 +305,19 @@ update)
exit 7 exit 7
fi fi
;; ;;
pki) aikgen|pki)
shift # programs in BINDIR may be called directly, these two are listed for legacy reasons
exec $IPSEC_BINDIR/pki "$@" command_dir="$IPSEC_BINDIR"
# fall through
;; ;;
aikgen) attest|conftest|dumm|irdumm|pacman|pool|pt-tls-client|scepclient|stroke|\
shift duplicheck|error-notify|imv_policy_manager|load-tester|lookip|whitelist|\
exec $IPSEC_BINDIR/aikgen "$@" _updown|_imv_policy)
# fall through
;;
copyright|--copyright)
set _copyright
# fall through
;; ;;
version|--version) version|--version)
printf "$OS_NAME $IPSEC_NAME $IPSEC_VERSION\n" printf "$OS_NAME $IPSEC_NAME $IPSEC_VERSION\n"
@@ -325,16 +329,20 @@ version|--version)
echo "$0: unknown option \`$1' (perhaps command name was omitted?)" >&2 echo "$0: unknown option \`$1' (perhaps command name was omitted?)" >&2
exit 2 exit 2
;; ;;
*)
echo "$0: unknown command \`$1' (\`$IPSEC_SCRIPT --help' for list)" >&2
exit 2
;;
esac esac
cmd="$1" cmd="$1"
shift shift
path="$IPSEC_DIR/$cmd" path="$command_dir/$cmd"
if [ ! -x "$path" ] if [ ! -x "$path" ]
then then
echo "$0: unknown IPsec command \`$cmd' (\`$IPSEC_SCRIPT --help' for list)" >&2 echo "$0: unknown command \`$cmd' (\`$IPSEC_SCRIPT --help' for list)" >&2
exit 2 exit 2
fi fi