当前位置: 首页 > 面试题库 >

将Golang作为www-data运行

谭健柏
2023-03-14
问题内容

当我运行Node HTTP服务器应用程序时,通常会调用自定义函数

function runAsWWW()
{
 try 
 {
  process.setgid('www-data');
  process.setuid('www-data');
 } catch (err) 
 {
  console.error('Cowardly refusal to keep the process alive as root.');
  process.exit(1);
 }
}

server.listen(8080,'localhost',null,runAsWWW);

因此服务器实际上以www-data用户身份运行,以提供更好的安全性。通过发出启动Golang Web服务器时,我可以做些类似的事情go run index.go吗?


问题答案:

扩展@ JimB 的答案:

使用流程主管以特定用户的身份运行您的应用程序(并处理重新启动/崩溃,日志重定向等)。对于多线程应用程序来说setuid,这setgid通常是个坏主意。

使用操作系统的进程管理器(Upstart,systemd,sysvinit)或独立的进程管理器(Supervisor,runit,monit等)。

这是主管的示例:

[program:yourapp]
command=/home/yourappuser/bin/yourapp # the location of your app
autostart=true
autorestart=true
startretries=10
user=yourappuser # the user your app should run as (i.e. *not* root!)
directory=/srv/www/yourapp.com/ # where your application runs from
environment=APP_SETTINGS="/srv/www/yourapp.com/prod.toml" # environmental variables
redirect_stderr=true
stdout_logfile=/var/log/supervisor/yourapp.log # the name of the log file.
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10

此外:如果您不是反向代理,并且您的Go应用程序需要绑定到<1024端口(例如端口80或443),请使用setcap-例如:setcap cap_net_bind_service=+ep /home/yourappuser/bin/yourapp

PS:我写了一篇关于如何使用Supervisor运行Go应用程序的文章(从“我没有安装Supervisor”开始)。



 类似资料:
  • 这里的新手。 目前正在学习grpc的工作原理,并正在通过此链接中的教程 https://grpc.io/docs/quickstart/go.html#update-and-run-the-application 当我使用helloworld运行这个示例时。PB去提供的文件,就行了。但当我删除了那个文件并运行了要再次生成该文件,我发现我无法再运行迎宾服务器。 我得到的错误是 google.gola

  • 问题内容: 我想清除所有超过1周的SQL数据库,我想每晚进行一次。所以,我要安排一份工作。如何查询mySQL,而不必每次都手动输入密码? PHP中的查询如下: 有没有办法将其作为shell脚本运行?如果没有,有没有一种方法可以使cron运行php文件? 问题答案: 尝试创建如下所示的shell脚本: 然后可以将其添加到cron

  • 您可以通过将spring-cloud-sleuth-stream jar作为依赖关系来累加并发送跨越Spring Cloud Stream的数据,并为RabbitMQ或spring-cloud-starter-stream-kafka添加通道Binder实现(例如spring-cloud-starter-stream-rabbit)为Kafka)。通过将spring-cloud-sleuth-st

  • 我有这个在我的. htaccess文件: 但是每当我访问根目录上的文件时,就像它将重定向到。 我如何纠正它,以便它将正确地重定向到?

  • 问题内容: 我从dockerfile构建了Docker映像。我看到映像已成功构建,但是该如何处理?它不应该能够作为容器运行吗? 问题答案: 运行它的具体方法取决于您是否为图像指定了标签/名称。 使用名称(让我们使用 Ubuntu ): 没有名称,只需使用ID: 请参阅 Docker运行参考 以获取更多信息。

  • 是否可以将iOS7设备作为蓝牙LE外设(iBeacon)运行并在后台发布广告?我已经能够让它在前台用下面的代码做广告,并且可以从另一个iOS设备上看到它,但是一旦我回到主屏幕,它就停止了广告。我确实在plist中添加了蓝牙外围后台模式,但这似乎没有帮助,尽管我确实得到提示说设备想要在后台使用蓝牙。是我做错了什么,还是在iOS不可能? 以下是接收/侦听端的代码: