3

ルートまたはルート権限を持たずに、グレースフル リスタートを実行して apache 構成構文をチェックする可能性はありますか?

suid再起動を実行するスクリプトにビットを設定しようとしました。スクリプト自体は次のとおりです。

#!/bin/bash

FILENAME=$1
DATE=`date +%Y%m%d`
DIRECTORY='bckp/'
if [ ! -d "$DIRECTORY" ]; then
    echo "Backup directory doesn't exist. Creating one."
    mkdir $DIRECTORY
fi

if [ -z "$FILENAME" -a ! -f "$FILENAME" ]; then
    FILENAME="webdav.conf"
    echo "No file specified. Backing up webdav.conf"
fi

REV=0
BACKUP="$FILENAME.$DATE.$REV"

while [ -f $BACKUP ]; do
    let REV+=1
    BACKUP="$DIRECTORY$FILENAME.$DATE.$REV"
done

cp $FILENAME $BACKUP

echo $OUTPUT
OUTPUT=$(apache2ctl configtest 2>&1)
if [ "$OUTPUT" == "Syntax OK" ]; then
    echo "Syntax OK"
    echo "Performing restart"
    apachectl -k graceful 2>&1
fi

exit $?

ls -lこのファイルの は次のとおりです。

-rwsrwxr-x 1 root user  645 2012-04-26 18:05 graceful-restart

このスクリプトを実行しようとすると、次の出力が得られます。

No file specified. Backing up webdav.conf
ulimit: 88: error setting limit (Operation not permitted) Syntax OK

私が説明したことを実行できるかどうかに興味があります。

4

1 に答える 1

9

suidLinuxは、シェルスクリプトのビットを尊重しません。詳細については、これをお読みください。

これに対する一般的な解決策はsudoコマンドです。このようなエントリで/etc/sudoers

yourname ALL = NOPASSWD:/path/to/graceful-restart

あなたは実行することができます:

sudo /path/to/graceful-restart

そして、これはパスワードの入力を求めずにroot権限で実行されます。ファイルsudoersの構文の詳細については、manページを参照してください。sudoers

于 2012-04-26T15:19:52.203 に答える