AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 696159
Accepted
Philippe Gachoud
Philippe Gachoud
Asked: 2015-11-11 00:44:12 +0800 CST2015-11-11 00:44:12 +0800 CST 2015-11-11 00:44:12 +0800 CST

isc_dhcp_server 启动错误:`dhcpd:无法创建 PID 文件 /run/dhcp-server/dhcpd.pid:权限被拒绝。`

  • 772

dhcpd: Can't create PID file /run/dhcp-server/dhcpd.pid: Permission denied.service isc-dhcp-server start在Ubuntu 15.10 上启动 isc_dhcp_server 时在 /var/log/syslog中错误报告这里的包版本是4.3.1-5ubuntu3

处理命令dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf eth0来自/etc/init.d/isc-dhcp-server文件

user@host: /$ cat /etc/init.d/isc-dhcp-server                
#!/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

DHCPD_DEFAULT="${DHCPD_DEFAULT:-/etc/default/isc-dhcp-server}"

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

. /lib/lsb/init-functions

# Read init script configuration
[ -f "$DHCPD_DEFAULT" ] && . "$DHCPD_DEFAULT"

NAME=dhcpd
DESC="ISC DHCP server"
# fallback to default config file
DHCPD_CONF=${DHCPD_CONF:-/etc/dhcp/dhcpd.conf}
# try to read pid file name from config file, with fallback to /var/run/dhcpd.pid
if [ -z "$DHCPD_PID" ]; then
        DHCPD_PID=$(sed -n -e 's/^[ \t]*pid-file-name[ \t]*"(.*)"[ \t]*;.*$/\1/p' < "$DHCPD_CONF" 2>/dev/null | head -n 1)
fi
DHCPD_PID="${DHCPD_PID:-/var/run/dhcpd.pid}"

test_config()
{
        if ! /usr/sbin/dhcpd -t $OPTIONS -q -cf "$DHCPD_CONF" > /dev/null 2>&1; then
                echo "dhcpd self-test failed. Please fix $DHCPD_CONF."
                echo "The error was: "
                /usr/sbin/dhcpd -t $OPTIONS -cf "$DHCPD_CONF"
                exit 1
        fi
        touch /var/lib/dhcp/dhcpd.leases
}

# single arg is -v for messages, -q for none
check_status()
{
    if [ ! -r "$DHCPD_PID" ]; then
        test "$1" != -v || echo "$NAME is not running."
        return 3
    fi
    if read pid < "$DHCPD_PID" && 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 $DHCPD_PID exists."
        return 1
    fi
}

case "$1" in
        start)
                test_config
                log_daemon_msg "Starting $DESC" "$NAME"
                start-stop-daemon --start --quiet --pidfile "$DHCPD_PID" \
                        --exec /usr/sbin/dhcpd -- \
                        -q $OPTIONS -cf "$DHCPD_CONF" -pf "$DHCPD_PID" $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 "$DHCPD_PID"
                log_end_msg $?
                rm -f "$DHCPD_PID"
                ;;
        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
dhcpd
  • 3 3 个回答
  • 17521 Views

3 个回答

  • Voted
  1. Best Answer
    Stephen
    2015-11-11T13:25:39+08:002015-11-11T13:25:39+08:00

    我也在实际的票中回复了,但是在 15.10...

    它看起来像 /lib/systemd/system/isc-dhcp-server.service 中的行:

    exec dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf $CONFIG_FILE $INTERFACES'
    

    被硬编码并忽略 /etc/default/isc-dhcp-server 中的 DHCPD_PID 变量。

    我认为应该是:

    exec dhcpd -user dhcpd -group dhcpd -f -4 -pf $DHCPD_PID -cf $CONFIG_FILE $INTERFACES'
    

    更改后,您必须运行

    systemctl daemon-reload
    

    然后你必须在 /etc/default/isc-dhcp-server 中设置值,因为如果你不这样做,则没有给出默认值并且服务无法启动。

    DHCPD_PID=/var/run/dhcp-server/dhcpd.pid
    

    然后文件还有其他问题,比如它总是试图运行:

    ExecStartPre=/bin/chown dhcpd:dhcpd /run/dhcp-server
    

    不管指定的路径。我不确定预期的行为是什么,但这两个更改为我解决了它。

    但是之后

    AppArmor 阻止文件被写入。我不是很熟悉,但我补充说

    capability dac_override,
    

    到 /etc/apparmor.d/usr.sbin.dhcpd 附近的其他功能,重新启动服务,现在我有一个 PID 文件。

    看来这个包有一些问题。

    • 7
  2. Kevin
    2016-01-22T07:55:32+08:002016-01-22T07:55:32+08:00

    我在没有 systemd 的 Ubuntu Vivid 15.04 上遇到了同样的问题。

    审核:type=1400 审核(1453391318.882:44):apparmor="DENIED" operation="capable" profile="/usr/sbin/dhcpd" pid=15957 comm="dhcpd" capability=1 capname="dac_override" 审核: type=1400 审计(1453391318.882:45):apparmor="DENIED" operation="capable" profile="/usr/sbin/dhcpd" pid=15957 comm="dhcpd" capability=2 capname="dac_read_search"

    我将这两行添加到/etc/apparmor.d/usr.sbin.dhcpd

    capability dac_override,
    capability dac_read_search,
    

    线下capability setuid,。

    然后apparmor_parser -r /etc/apparmor.d/usr.sbin.dhcpd

    然后stop isc-dhcp-server; start isc-dhcp-server

    • 1
  3. Josep
    2021-09-27T04:41:51+08:002021-09-27T04:41:51+08:00

    isc-dhcp-server (IPv4) 和 isc-dhcp-server6 (IPv6) 共享相同的 tmp 文件夹/run/dhcp-server/以保存 pid。

    如果未配置 DHCPv6,它会破坏/run/dhcp-server/文件夹并且 DHCPv4 无法使用它。

    解决方案是禁用 DHCPv6 服务 ( systemctl diable isc-dhcp-server6) 或将 pid 文件放在不同的文件夹中。一个用于 IPv4 ( /run/dhcpv4/),另一个用于 IPv6 ( /run/dhcpv6/)

    • 0

相关问题

  • 将服务器从 DHCP 切换到静态 IP

  • DHCPD服务器向一个网卡发出多个IP [关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve