我正在努力更好地学习 Linux,但目前经验非常有限 —— 所以请原谅我在这方面的无知。
我正在尝试在端口 80 上启动 rails,并以另一个用户身份使用
sudo -u [user_name] bundle exec rails s --port=80 -e production
但这是失败的
eventmachine.rb:572:in 'start_tcp_server': no acceptor (RuntimeError)
运行sudo netstat -anltp|grep :80
显示80端口没有开放\监听。
我尝试了以下方法,但效果有限:
sudo bundle exec rails s --port=80 -e production
可以在端口 80 上启动服务器,但不能以我想要的用户身份启动,
sudo -u [user_name] bundle exec rails s -e production
可以以正确的用户身份启动服务器,但不在所需的端口上启动。
我已临时将用户设置为管理员组,因为我已读到端口 <1024 需要该组,但这似乎也无济于事。
我还可以尝试什么?
答案1
你可以使用 root 启动端口 <1024 上的服务用户。该组(在您的情况下是管理员)与此无关。
不过,您可以做几件事。例如:
- 用户使用 iptables 重定向端口(可使用 root 权限配置)。
- 如果程序允许或者您有权访问代码:以 root 身份启动,bind(),然后放弃权限。
- 有一个名为 authbind 的实用程序专门用于这种情况,但我个人从未使用过它,所以我无法评论它的效果如何。
- 使用 setcap 为您的程序添加权限。