某些服务器启动特权端口(低于1024端口,需要root权限),开始侦听端口,然后删除权限(更改为非root用户)。水晶的HTTP::Server
可以做类似的事吗?
答案 0 :(得分:2)
您可以使用the LibC bindings to drop privileges:
# Changing the process' uid:
# https://stackoverflow.com/a/47558121/841803
lib LibC
fun setuid(uid_t : Int)
fun getuid : Int
end
require "http/server"
server = HTTP::Server.new(80) do |context|
context.response.content_type = "text/plain"
context.response.print "Hello world!"
end
server.bind
LibC.setuid(THE_NEW_UID)
puts "=== Processing requests as:"
Process.run("whoami", output: true)
server.listen
凯末尔用户:
Kemal.run(YOUR_PRIVILEGED_PORT) do |config|
config.server.bind
LibC.setuid(THE_NEW_UID)
end
如果您使用的分片不允许您直接访问它的HTTP::Server
实例,则应该找到备用分片。也可以对HTTP::Server#listen
方法进行修补,但不建议这样做。