2012-04-26 73 views
2

有没有可能执行平凡的重新启动并检查Apache配置语法而不是root或具有root权限?重新启动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 

我如果有可能执行我所描述的内容,我会感兴趣。

+0

sudo怎么样? – Friek 2012-04-26 15:17:13

回答

8

Linux将不会兑现外壳脚本上的suid位。请阅读this了解更多信息。

对此的常见解决方案是sudo命令。随着/etc/sudoers这样的条目:

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

你可以运行:

sudo /path/to/graceful-restart 

,这将不提示您输入密码以root权限运行。有关sudoers文件的语法的更多信息,请参见sudoers手册页。

相关问题