LINUX.ORG.RU
ФорумAdmin

рестарт демона без прав рута


0

1

нужно дать пхп-скрипту возможность ребутить dhcpd демон прописал isc-dhcp-server в sudoers но скрипт при запуске ругается, что нет прав на убийство процесса, добавил в список /bin/kill ругается - нет прав на запуск dhcpd, добавил /usr/sbin/dhcpd

в итоге имеем: www-data ALL=(ALL) NOPASSWD: /etc/init.d/isc-dhcp-server, /bin/kill, /usr/sbin/dhcpd

очень напрягает присутствие в списке kill

какие еще варианты ребутнуть демон с минимальным делегированием прав юзеру?

пробовал ставить на скрипт атрибут suid - не помогло


Ответ на: комментарий от anonymous

/etc/init.d/isc-dhcp-server и есть сам скрипт

maximt
() автор топика

создай скрипт
restart_dhcp.sh
на него повешай suid
а в нем пропиши параметры убийства и старта dhcpd

kam ★★
()

www-data ALL=(ALL) NOPASSWD: /etc/init.d/isc-dhcp-server, /bin/kill, /usr/sbin/dhcpd

Чисто для протокола, вызывается в следующем виде?

sudo /etc/init.d/isc-dhcp-server restart

sin_a ★★★★★
()
Ответ на: комментарий от maloi

стандартный дебиановский.. dhcp из репо

#!/bin/sh
#
#

### BEGIN INIT INFO
# Provides:          isc-dhcp-server
# Required-Start:    $remote_fs $network $syslog
# Required-Stop:     $remote_fs $network $syslog
# Should-Start:      $local_fs slapd $named
# Should-Stop:       $local_fs slapd
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: DHCP server
# Description:       Dynamic Host Configuration Protocol Server
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin

test -f /usr/sbin/dhcpd || exit 0

# It is not safe to start if we don't have a default configuration...
if [ ! -f /etc/default/isc-dhcp-server ]; then
	echo "/etc/default/isc-dhcp-server does not exist! - Aborting..."
	echo "Run 'dpkg-reconfigure isc-dhcp-server' to fix the problem."
	exit 0
fi

. /lib/lsb/init-functions

# Read init script configuration (so far only interfaces the daemon
# should listen on.)
[ -f /etc/default/isc-dhcp-server ] && . /etc/default/isc-dhcp-server

NAME=dhcpd
DESC="ISC DHCP server"
DHCPDPID=/var/run/dhcpd.pid

test_config()
{
	if ! /usr/sbin/dhcpd -t -q > /dev/null 2>&1; then
		echo "dhcpd self-test failed. Please fix the config file."
		echo "The error was: "
		/usr/sbin/dhcpd -t
		exit 1
	fi
}

# single arg is -v for messages, -q for none
check_status()
{
    if [ ! -r "$DHCPDPID" ]; then
	test "$1" != -v || echo "$NAME is not running."
	return 3
    fi
    if read pid < "$DHCPDPID" && ps -p "$pid" > /dev/null 2>&1; then
	test "$1" != -v || echo "$NAME is running."
	return 0
    else
	test "$1" != -v || echo "$NAME is not running but $DHCPDPID exists."
	return 1
    fi
}

case "$1" in
	start)
		test_config
		log_daemon_msg "Starting $DESC" "$NAME"
		start-stop-daemon --start --quiet --pidfile $DHCPDPID \
			--exec /usr/sbin/dhcpd -- -q $INTERFACES
		sleep 2

		if check_status -q; then
			log_end_msg 0
		else
			log_failure_msg "check syslog for diagnostics."
			log_end_msg 1
			exit 1
		fi
		;;
	stop)
		log_daemon_msg "Stopping $DESC" "$NAME"
		start-stop-daemon --stop --quiet --pidfile $DHCPDPID
		log_end_msg $?
		rm -f "$DHCPDPID"
		;;
	restart | force-reload)
		test_config
		$0 stop
		sleep 2
		$0 start
		if [ "$?" != "0" ]; then
			exit 1
		fi
		;;
	status)
		echo -n "Status of $DESC: "
		check_status -v
		exit "$?"
		;;
	*)
		echo "Usage: $0 {start|stop|restart|force-reload|status}"
		exit 1 
esac

exit 0
maximt
() автор топика
Ответ на: комментарий от maximt

просто exec('/etc/init.d/isc-dhcp-server restart');

Чисто для протокола, вызывается в следующем виде?
sudo /etc/init.d/isc-dhcp-server restart

да..

Либо кто то не умеет читать, либо одно из двух.

sin_a ★★★★★
()
Ответ на: комментарий от maximt

Можно врезать в скрипт несколько строк для отладки, что бы проверить запускается он или нет (коснуться временного файла с уникальным названием в /tmp), удостовериться с какими правами запускается, и возможно также стоит вывести результат во временный файл.

sin_a ★★★★★
()
Ответ на: комментарий от maximt

удостовериться с какими правами запускается,

Здесь я не очень точно выразился, хорошо бы попробовать вставить в тело скрипта нечто вроде:

whoami >> «/tmp/tmp.file.`date`»

sin_a ★★★★★
()
Ответ на: комментарий от power

тогда я вижу в output скрипта ошибку что нет прав на вызов kill [пид демона]

и демон соответственно не рестартится

maximt
() автор топика
Ответ на: комментарий от maximt

> с правами веб сервера - www-data

Разрешение sudo на kill не нужны, проблема именно здесь.

11:06 sinaps@dock ~ $ cat 123      
#!/bin/bash

whoami
11:06 sinaps@dock ~ $ ./123  
sinaps
11:06 sinaps@dock ~ $ sudo ./123
root
11:06 sinaps@dock ~ $ 

Нужно выяснять почему при выполнении скрипта не поднимаются права. Проверить синтаксис /etc/sudoers, проверить правильность вызова команды, попробовать вызвать через обвязку, проверить какие нибудь selinux, ещё что нибудь.

sin_a ★★★★★
()

нужно дать пхп-скрипту возможность ребутить dhcpd демон прописал isc-dhcp-server в sudoers но скрипт при запуске ругается, что нет прав на убийство процесса,

www-data ALL=(ALL) NOPASSWD: /etc/init.d/isc-dhcp-server restart
backbone ★★★★★
()
Ответ на: комментарий от backbone

А, не дочитал, в скрипте ошибка где-то видимо...

backbone ★★★★★
()

Делать suid на скрипт - дурной тон, тебе придется делать suid на полсистемы, что, несомненно, зло.

Я б сделал ежеминутный крон-таск, который проверяет условие перезапуска dhcp-сервера (либо ходит в базу, либо проверяет наличие какого-нибудь файла), и при необходимости его дергает. С точки зрения безопасности немного правильнее.

Kill c suid-битом - это эдакий анти-хакерский механизм, чтобы они все подохли от смеха.

shutty
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.