相关疑难解决方法(0)

如何让Flask在80端口运行?

我有一个通过端口5000运行的Flask服务器,它很好.我可以访问http://example.com:5000

但是可以在http://example.com上简单地访问它吗?我假设这意味着我必须将端口从5000更改为80.但是当我在Flask上尝试时,我在运行它时收到此错误消息.

Traceback (most recent call last):
  File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
   File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
    test_socket.bind((hostname, port))
  File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)

运行lsof -i :80回报

COMMAND   PID     USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
apache2   467     root    3u  IPv4 92108840      0t0  TCP *:www (LISTEN)
apache2  4413 www-data    3u  IPv4 92108840 …
Run Code Online (Sandbox Code Playgroud)

python port networking flask

176
推荐指数
13
解决办法
31万
查看次数

为什么低于1024的端口是特权?

我听说这是一个安全功能,但它通常看起来像一个安全问题.如果我想编写一个使用特权端口的服务器,我不仅要担心我的代码有多安全,我还要特别担心我是否正在使用setuid和删除权限.

unix ip

56
推荐指数
2
解决办法
3万
查看次数

在Python中删除根权限

我想让一个Python程序开始监听端口80,但之后执行没有root权限.有没有办法放弃root或没有它的端口80?

python unix linux permissions root

46
推荐指数
4
解决办法
2万
查看次数

Spring Boot在端口80上运行app

我无法在端口80上启动应用程序.我在IDE和服务器上试过本地计算机,没有运气.我检查了其他类似的帖子,并确保我在root服务器上运行jar.

这是错误:

 till here all ok
...
java.net.SocketException: Permission denied
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:338)
at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:760)
at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:472)
at org.apache.catalina.connector.Connector.startInternal(Connector.java:986)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardService.addConnector(StandardService.java:237)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:186)
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:149)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:957)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:946)
at com.andirod.StartApplication.main(StartApplication.java:20)
...
...
...
Exception in thread "main" java.lang.IllegalStateException: Tomcat connector in failed state
at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:157)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:288)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:483)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686) …
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

28
推荐指数
3
解决办法
2万
查看次数

如何以非root用户身份运行node.js?

我正在运行一个node.js服务器,它将在端口80和其他服务器上提供请求.显然,这需要以root身份运行应用程序(在Linux上).

以这篇文章(http://syskall.com/dont-run-node-dot-js-as-root)为例,很明显有一些简单的方法可以让节点作为非root用户运行,但我想知道是否有人对所建议的不同方法的优点/缺点有任何看法:

  1. 代码:在侦听端口80建立后,使用setuid()从root用户下载到非特权用户.

  2. 使用某种代理服务器将请求重定向到端口> 1024(因此不需要节点以root身份运行)

  3. 使用IP表转发到另一个端口(同上节点不会以root身份运行)

谢谢

iptables root node.js

17
推荐指数
3
解决办法
9470
查看次数

重定位ip6tables中的端口

如何使用ip6tables将一个端口重定向到另一个本地端口?例如:ip6tables -t nat -A PREROUTING -j REDIRECT -p tcp --dport 443 --to-ports 8443

iptables ipv6

16
推荐指数
2
解决办法
1万
查看次数

以非root用户身份运行Nginx

我使用Ansible安装了Nginx.要在Centos7上安装,我使用了yum软件包,因此它默认以root用户身份运行.我希望它在Centos框中以不同的用户(ex- nginx用户)启动和运行.当我尝试使用其他用户运行它时,我收到以下错误:

nginx.service的作业失败,因为控制进程退出并显示错误代码.有关详细信息,请参阅"systemctl status nginx.service"和"journalctl -xe".

我知道以root身份运行是不可取的.那么我该如何解决这个问题并以非root用户身份运行nginx.谢谢

linux nginx centos7

13
推荐指数
3
解决办法
4万
查看次数

与PHP的SSH连接

我目前正在开发一个用PHP进行系统更改的项目(例如,更改Nginx /重启服务的配置文件).

PHP脚本在localhost上运行.在我看来,最好的(读取:最安全)方式是使用SSH建立连接.我考虑以下选项之一:

选项1:在php会话中存储用户名/密码并提示输入sudo

使用带有用户名/密码的phpseclib,将这些值保存在php会话中,并为每个命令提示sudo.

选项2:使用root登录

在登录脚本中使用phpseclib和root用户名和密码.在这种情况下,您不必向用户询问sudo.(不是真正安全的解决方案)

<?php
include('Net/SSH2.php');

$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('root', 'root-password')) {
    exit('Login Failed');
}
?>
Run Code Online (Sandbox Code Playgroud)

选项3:使用从文件中读取的公钥进行身份验证

使用带有公钥的PHP SSHlib进行身份验证,并将pubkey放在www root之外.

<?php

    $connection = ssh2_connect('shell.example.com', 22, array('hostkey' => 'ssh-rsa'));
    if (ssh2_auth_pubkey_file($connection, 'username', '/home/username/.ssh/id_rsa.pub', '/home/username/.ssh/id_rsa', 'secret')) {
        echo "Public Key Authentication Successful\n";
    } else {
        die('Public Key Authentication Failed');
    }
?>
Run Code Online (Sandbox Code Playgroud)

方案4:?

php linux ssh

9
推荐指数
1
解决办法
2353
查看次数

为什么这个程序没有收到预期的UDP数据包?

我试图使用Boost asio接收UDP数据包.我的代码基于asio文档中的阻塞UDP客户端示例.

我试图从C6655 TI DSP接收类似BOOTP的UDP数据包,这些数据包以3秒的间隔传输.我有Wireshark看着我的程序正在监听的相同接口,它可以看到数据包到达(参见下面的确切数据包数据,从Wireshark导出).数据包并非真正来自DSP,我捕获了一个,tcpdump我正在用带有封装的Raspberry Pi模拟它.

但是,我的程序没有收到数据包.它有4秒的超时(因为DSP每3秒播放一次).如果它达到超时,它会打印一条消息,否则它应该打印接收的字节数.该程序的完整(可编译)源代码如下(约100行).

使用参数调用该命令192.168.5.122 67 4000,这意味着在超时4000毫秒的情况下侦听192.168.5.122:67.

编辑:除了下面的代码,我还尝试了这个作为我的端点:udp::endpoint listen_endpoint(boost::asio::ip::address_v4::any(), atoi(argv[2]));以及0.0.0.0搜索结果建议的IP地址.

我还添加了以下内容无济于事:

boost::asio::socket_base::broadcast option(true);
socket_.set_option(option);
Run Code Online (Sandbox Code Playgroud)

我有一个能够正确接收此数据包的程序,使用Berkeley套接字编写.除了绑定到INADDR_ANY之外,我没有做任何特别的事情.

这是完整的程序:

//
// blocking_udp_client.cpp
// ~~~~~~~~~~~~~~~~~~~~~~~
//
#include <boost/asio/deadline_timer.hpp>
#include <boost/asio/io_service.hpp>
#include <boost/asio/ip/udp.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <iostream>

using boost::asio::deadline_timer;
using boost::asio::ip::udp;

class listener
{
public:
    listener(const udp::endpoint& listen_endpoint)
        : socket_(io_service_, listen_endpoint)
        , deadline_(io_service_)
    {
        deadline_.expires_at(boost::posix_time::pos_infin);
        check_deadline();
    }

    std::size_t receive(const boost::asio::mutable_buffer& buffer, boost::posix_time::time_duration timeout, boost::system::error_code& ec)
    { …
Run Code Online (Sandbox Code Playgroud)

c++ udp boost-asio

9
推荐指数
1
解决办法
1424
查看次数

如何向本机库添加功能,而不是向运行它的可执行文件添加功能?

语境

我已经完成了一个 Java 库,它使用带有 JNI 的 C 库。C库在linux中编译成.so文件。这个库需要cap_net_raw 能力

目标

执行一个没有额外权限的java 进程,该进程使用所述 java 库。将使用该库的实际进程是产品中已经存在的进程,我们不想授予它们更多权限。

为了测试这一点,我创建了一个jar并在使用和不使用sudo. 正如预期的那样,使用它会成功,但如果没有它,它就会失败。

重现测试的步骤

  1. 创建一个带有本地方法的java类,我们来调用它SocketTester.java
static {
    System.loadLibrary("SocketTester");
}
private native int socketTest();
Run Code Online (Sandbox Code Playgroud)
  1. socketTester.h使用命令生成文件
javac -h . SocketTester.java
Run Code Online (Sandbox Code Playgroud)
  1. 创建socketTester.c实现socketTester.h并需要该cap_net_raw功能的文件
  2. 编译用
gcc -o libSocketTester.so socketTester.c -shared -I/usr/lib/jvm/java-14-openjdk-amd64/include -I/usr/lib/jvm/java-14-openjdk-amd64/include/linux
Run Code Online (Sandbox Code Playgroud)
  1. 移动libSocketTester.so到/usr/lib
  2. 跑步
sudo ldconfig
Run Code Online (Sandbox Code Playgroud)
  1. 设置上限
cd /usr/lib
sudo setcap cap_net_raw=epi libSocketTester.so
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个Test.java
public static void main(final String[] args) …
Run Code Online (Sandbox Code Playgroud)

java linux java-native-interface linux-capabilities

6
推荐指数
1
解决办法
832
查看次数