在没有超级用户的情况下重新启动apache

rom*_*man 2 linux apache permissions bash apache2

是否有可能执行正常重启并检查apache配置语法而不是root或具有root权限?

我已经尝试将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 $?
Run Code Online (Sandbox Code Playgroud)

这是ls -l这个文件:

-rwsrwxr-x 1 root user  645 2012-04-26 18:05 graceful-restart
Run Code Online (Sandbox Code Playgroud)

当我尝试运行此脚本时,我得到以下输出:

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

如果能够执行我所描述的内容,我感兴趣.

lar*_*sks 8

Linux不会尊重suidshell脚本.阅读本文以获取更多信息.

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

yourname ALL = NOPASSWD:/path/to/graceful-restart
Run Code Online (Sandbox Code Playgroud)

你可以运行:

sudo /path/to/graceful-restart
Run Code Online (Sandbox Code Playgroud)

这将使用root权限运行,而不会提示您输入密码.有关sudoerssudoers文件语法的更多信息,请参见手册页.