#!/bin/bash # Copyright (C) 2003, 2004 Red Hat, Inc. # Written by Ingo Molnar and Ulrich Drepper if [ "$#" != "1" ]; then echo "usage: lsexec [ | process name | --all ]" exit 1 fi if ! test -f /etc/redhat-release; then echo "this script is written for RHEL or Fedora Core" exit 1 fi cd /proc printit() { if [ -r $1/maps ]; then echo -n $(basename $(readlink $1/exe)) printf ", PID %6d: " $1 if [ -r $1/exe ]; then if eu-readelf -h $1/exe|egrep -q 'Type:[[:space:]]*EXEC'; then echo -n -e '\033[31mno PIE\033[m, ' else if eu-readelf -d $1/exe|egrep -q ' DEBUG[[:space:]]*$'; then echo -n -e '\033[32mPIE\033[m, ' if eu-readelf -d $1/exe|fgrep -q TEXTREL; then echo -n -e '\033[31mTEXTREL\033[m, ' fi else echo -n -e '\033[33mDSO\033[m, ' fi fi if eu-readelf -l $1/exe|fgrep -q 'GNU_RELRO'; then if eu-readelf -d $1/exe|fgrep -q 'BIND_NOW'; then if eu-readelf -l $1/exe|fgrep -q ' .got] .data .bss'; then echo -n -e '\033[32mfull RELRO\033[m, ' else echo -n -e '\033[31mincorrect RELRO\033[m, ' fi else echo -n -e '\033[33mpartial RELRO\033[m, ' fi else echo -n -e '\033[31mno RELRO\033[m, ' fi fi lastpg=$(sed -n '/^[[:xdigit:]]*-[[:xdigit:]]* rw.. \([[:xdigit:]]*\) 00:00 0$/p' $1/maps| tail -n 1) if echo "$lastpg" | egrep -v -q ' rwx. '; then lastpg="" fi if [ -z "$lastpg" ] || [ -z "$(echo $lastpg||cut -d ' ' -f3|tr -d 0)" ]; then echo -e '\033[32mExec-Shield enabled\033[m' else echo -e '\033[31mExec-Shield disabled\033[m' for N in `awk '{print $6}' $1/maps | egrep '\.so|bin/' | grep '^/' | sort -u`; do NE=$(eu-readelf -l $N | fgrep STACK | fgrep 'RW ') if [ "$NE" = "" ]; then echo " => $N disables Exec-Shield!" fi done fi fi } if [ -d $1 ]; then printit $1 exit 0 fi if [ "$1" = "--all" ]; then for N in [1-9]*; do if [ $N != $$ ] && readlink -q $N/exe > /dev/null; then printit $N fi done exit 0 fi for N in `/sbin/pidof $1`; do if [ -d $N ]; then printit $N fi done