2017-11-30 12 views

答えて

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メソッドをサルパッチすることも可能ですが、お勧めしません。

+0

私はあなたがサルのパッチをする必要はないと思います。 'server.bind'と' server.listen'を別々に呼び出して、 'LibC setuid'を間に置くことができます。 –

+0

@JohannesMüllerありがとう。私はあなたの答えで答えを更新しました。レビューする時間があれば自由に編集してください。コミュニティウィキとして設定されています。 –

関連する問題