[rails5 + puma]一般ユーザで443ポートのpumaを起動できない

とある検証作業で、一般ユーザ(sudo可能)で443ポートのpumaを起動する必要があり試したのでメモ。

Contents

概要

通常、pumaを起動すると3000番ポートで起動する。

$ rails s -b 0.0.0.0
 ~~略~~
* Listening on tcp://localhost:3000
Use Ctrl-C to stop

-pオプションで起動すると任意のポートで起動できるが、443だと権限足りない的なエラーになる。

$ rails s -b 0.0.0.0 -p 443
 ~~略~~
* Environment: development
Exiting
/usr/local/rbenv/versions/2.4.0/lib/ruby/gems/2.4.0/gems/puma-3.12.1/lib/puma/binder.rb:273:in `initialize': Permission denied - bind(2) for "127.0.0.1" port 443 (Errno::EACCES)

具体的な対処

似たような報告はいくつかあり、どうもwell-knownポート(1-1023)は一般ユーザの操作制限がある様子。
一般ユーザでは1024ポート以降は起動できるが、1-1023ポートは起動できない。
http://h-yamaguchi.hatenablog.com/entry/2014/01/16/094819

sudo だと確かにいけるんだけれど、ネットに転がってる手順でrbenv環境作ってた場合はパスを通す必要があったりする。
まずはvisudoでsecure_pathに追加する。

$ sudo visudo
~~略~~
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:
 ↓rbenvのパス追記
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/rbenv/shims

再度試してみると起動する。

$ sudo rails s -b 0.0.0.0 -p 443
 ~~略~~
* Listening on tcp://localhost:443
Use Ctrl-C to stop

まとめ

普通、railsの前段にLBやnginx等のリバプロを置く構成が多いと思うので、あまり需要はないかな。。
手元のVM/コンテナでお手軽に443ポート稼働させたい場合くらいかと

シェアする

  • このエントリーをはてなブックマークに追加

フォローする