在端口80上运行BASH web服务器,但不始终以root用户身份运行

在端口80上运行BASH web服务器,但不始终以root用户身份运行,bash,sudo,netcat,httpserver,Bash,Sudo,Netcat,Httpserver,我正在构建一个非常小的http服务器,用它作为起点,从浏览器控制基于raspberry pi的设备: 其核心是: #!/bin/bash RESPONSE=/tmp/webresp [ -p $RESPONSE ] || mkfifo $RESPONSE while true ; do ( cat $RESPONSE ) | nc -l -p 8080 | ( REQUEST=`while read L && [ " " "<" "$L" ] ; do

我正在构建一个非常小的http服务器,用它作为起点,从浏览器控制基于raspberry pi的设备:

其核心是:

#!/bin/bash

RESPONSE=/tmp/webresp
[ -p $RESPONSE ] || mkfifo $RESPONSE

while true ; do
    ( cat $RESPONSE ) | nc -l -p 8080 | (
    REQUEST=`while read L && [ " " "<" "$L" ] ; do echo "$L" ; done`
    REQ="`echo \"$REQUEST\" | head -n 1`"

    echo "[ `date '+%Y-%m-%d %H:%M:%S'` ] $REQ" >>/var/log/http-access.log

    if [[ $REQ =~ ^GET\ /a[\ \/\#?] ]]; then
        # ...
        RESP="<p>You are at A</p><p><a href='/'>Home</a></p>"
    elif [[ $REQ =~ ^GET\ /b[\ \/\#?] ]]; then
        # ...
        RESP="<p>You are at B</p><p><a href='/'>Home</a></p>"
    elif [[ $REQ =~ ^GET\ /c[\ \/\#?] ]]; then
        # ...
        RESP="<p>You are at C</p><p><a href='/'>Home</a></p>"
    else 
        read -r -d '' RESP <<'HTMLDOC'
        <h3>Home</h3>
        <p><a href='/a'>A</a></p>
        <p><a href='/b'>B</a></p>
        <p><a href='/c'>C</a></p>
HTMLDOC

    fi

    cat >$RESPONSE <<EOF
HTTP/1.0 200 OK
Cache-Control: private
Content-Type: text/html
Server: bash/2.0
Connection: Close
Content-Length: ${#RESP}

$RESP
EOF
    )
done
#/bin/bash
响应=/tmp/webresp
[-p$RESPONSE]| mkfifo$RESPONSE
虽然真实;做
(cat$响应)| nc-l-p 8080 |(
请求=`whileread L&&[''问题
您不能按照您的想法删除Bash脚本中的权限。但是,您的脚本实际上并不需要根权限;只有netcat需要这些权限才能绑定到特权端口

解决方案 以非特权用户身份运行脚本,并将
nc-l-p8080
替换为
sudo nc-l-p80
。这将限制netcat进程的根权限,而不是将其提供给整个脚本。

问题 您不能按照您的想法删除Bash脚本中的权限。但是,您的脚本实际上并不需要根权限;只有netcat需要这些权限才能绑定到特权端口

解决方案
以非特权用户身份运行脚本,并将
nc-l-p8080
替换为
sudo nc-l-p80
。这将限制netcat进程的根权限,而不是将其提供给整个脚本。

1024以下的所有端口都保留给超级用户(请参阅)。只要您在另一个尚未使用的端口上运行服务器,您就可以了。

1024以下的所有端口都是为超级用户保留的(请参阅)。只要您在另一个尚未使用的端口上运行服务器,您就可以了。

“我认为始终以提升的权限运行服务器可能不是一个好主意。“-已经创建自己的Web服务器是一个非常糟糕的主意。在bash中这样做……可以用于玩具实验,但其他的就不多了。或者(对于一个简单的用例)可能更适合在这里使用。它们不像Apache那样占用大量资源,但比在bash中手动这样做更省事:)“我认为始终以提升的权限运行服务器可能不是一个好主意。”-已经创建自己的Web服务器是一个非常糟糕的主意。在bash中这样做……可以用于玩具实验,但不适用于其他任何情况。或者(对于一个甚至简单的用例)可能更适合这里。它们不像Apache那样占用大量资源,但比在Bash中手动执行此操作更省事:)