是否有可能在没有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 :(得分:8)
Linux不会尊重shell脚本上的suid
位。请阅读this以获取更多信息。
常见的解决方案是sudo
命令。在/etc/sudoers
中添加如下条目:
yourname ALL = NOPASSWD:/path/to/graceful-restart
你可以跑:
sudo /path/to/graceful-restart
这将使用root权限运行,而不会提示您输入密码。有关sudoers
文件语法的详细信息,请参阅sudoers
手册页。