Làm cách nào tôi có thể mở cổng 80 để quá trình không root có thể liên kết với nó?


46

Tôi muốn chạy một máy chủ web trên máy Mac của mình dưới dạng quá trình không root. Thông thường chỉ có các tiến trình gốc có thể liên kết với cổng 80 (hoặc với bất kỳ cổng nào dưới 1024).

Tôi có thể mở cổng 80 một cách cụ thể để các tiến trình không root có thể lắng nghe không?



giống như unix.stackexchange.com Câu hỏi, phải không?
Filip Bartuzi

1
Tại sao unix nếu nó trên một hệ thống macos?
nhed

Câu trả lời:


27

Điều này rất khó thực hiện theo thiết kế và trừ khi bạn có quyền truy cập root vào máy của mình, không có cách nào sau đây sẽ hoạt động vì chúng yêu cầu root để thiết lập các thay đổi. Tuy nhiên, sau khi thay đổi, các chương trình không gian người dùng sẽ có quyền truy cập mà không cần root.

Có hai cách phổ biến để thực hiện điều này và cách bạn chọn sẽ phụ thuộc vào lý do tại sao bạn cố gắng khắc phục hạn chế:

Cổng điểm 80 đến cổng khác, chẳng hạn như 8080

Bằng cách cấu hình lại máy của bạn để chuyển tất cả lưu lượng truy cập cổng 80 sang cổng 8080 hoặc bất kỳ cổng nào bạn chọn, sau đó bạn có thể cho phép máy chủ không gian người dùng nhận các cổng đặc quyền gốc trong khu vực mà họ được cấp quyền truy cập.

Quá trình này rất đơn giản:

Bước 1: Xem các quy tắc tường lửa hiện tại.

sudo ipfw show

Bước 2: Thêm quy tắc chuyển tiếp cổng (80 đến 8080)

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in

Nếu bạn muốn xóa quy tắc tường lửa của mình, hãy chạy:

sudo ipfw tuôn ra

( nguồn )

Đây là một thay đổi tạm thời và sẽ hoàn nguyên sau khi bạn khởi động lại hoặc xóa như được chỉ định trong dòng cuối cùng.

Bạn có thể làm cho sự thay đổi vĩnh viễn hoặc bạn có thể thêm lệnh dưới dạng dòng khởi động trước khi khởi động máy chủ của mình, điều này có thể an toàn hơn từ quan điểm bảo mật.

Sử dụng Authbind

Authbind được thiết kế đặc biệt để cho phép một chương trình truy cập vào các cổng cấp thấp hơn mà không cho phép truy cập root đầy đủ.

Có cổng OS X:

https://github.com/Castaglia/MacOSX-authbind

Nó vẫn có thể bị giới hạn lưu lượng truy cập IPv4, tuy nhiên, bạn có thể phải thực hiện một số điều tra bổ sung để tìm xem nó có đáp ứng nhu cầu của bạn không.


YÊU MacOSX-authbind ... Nó cho phép bạn chạy, ví dụ: máy chủ web trên cổng 80 - với tư cách là "Quản trị viên thông thường". tức là trong bạn launchd .plist... "ProgramArguments": [ "path/to/authbind", "/usr/bin/php", "-c", "/www/.router.ini", "-S", "0.0.0.0:80", "-t", "/www", "/www/.router.php"] Woohoo!
alex gray

11
OS X Yosemite xóa ipfw. Ý chính này mô tả một giải pháp thay thế bằng cách sử dụng pf.
lyschoening

Lưu ý rằng việc chuyển hướng lưu lượng truy cập đến cổng không có đặc quyền có thể không an toàn nếu bạn ở trên môi trường dùng chung; một quá trình khác có thể liên kết với cổng đó trước khi chương trình của bạn thực hiện hoặc nếu chương trình của bạn hủy liên kết cổng ngay cả trong giây lát để khởi động lại nhanh chóng.
Lie Ryan

authbind ist thực sự là một giải pháp tuyệt vời, cảm ơn!
favo

7

Bạn có thể dùng ncat để chuyển tiếp lưu lượng truy cập từ một máy chủ web chạy trên một số cổng khác:

sudo ncat -l -p 80 -c ' ncat -l -p 1234'

Điều này sẽ chuyển tiếp lưu lượng trên cổng 80 đến localhost: 1234. Đây là một chút của bùn, tuy nhiên, tôi sẽ không sử dụng nó ở bất cứ đâu ngoài việc thử nghiệm nhanh và chắc chắn không được sản xuất.

Lưu ý rằng điều này sẽ không cho phép một quy trình không root liên kết với nó, nhưng bằng cách chọn một cổng, quy trình có thể liên kết với, 1234 trong ví dụ này, nó sẽ trông giống như được liên kết với cổng 80. Điều này tương đương với chuyển tiếp cổng 80 đến cổng 1234 bằng tường lửa, nhưng trên cơ sở tạm thời hơn nhiều.


2
Đây là một cách giải quyết tốt. Lưu ý ncat đi cùng nmap có thể được cài đặt qua Cổng Mac với sudo port install nmap. MacPorts có thể được cài đặt từ macports.org/install.php .
William Denniss

Điều này chỉ cho tôi ràng buộc: địa chỉ đã sử dụng lỗi.
Matt Joiner

Tương tự ở đây - không hoạt động. Điều này đã lừa unix.stackexchange.com/a/187038
Sebastian J.

2

Bạn cũng có thể sử dụng ssh để chuyển tiếp cổng. Vì vậy, nếu bạn có một máy chủ đang chạy trên 8080, bạn có thể chuyển tiếp lưu lượng truy cập từ cổng 80. Đây là tập lệnh tôi sử dụng, nó sẽ dừng apache gốc nếu nó chạy và chuyển tiếp lưu lượng:

chuyển tiếp8080to80.command:

echo "You may close this terminal and the forwarding will continue."
echo "To stop, kill the ssh process found by `sudo lsof -i ':80' | grep LISTEN`"
sudo apachectl stop
sudo ssh user@127.0.0.1 -L 80:127.0.0.1:8080

Chuyển tiếp cổng Ssh có thể có hiệu suất khá thấp và các tính năng bảo mật không có nhiều ý nghĩa trong môi trường cục bộ- & gt;. Tốt hơn là sử dụng chuyển tiếp cổng tích hợp của osx, hoặc một cái gì đó như ncat.
Shayne

-3

Những gì bạn có thể làm là mở cổng 80 trên bộ định tuyến của bạn và trỏ nó đến địa chỉ IP cục bộ của máy chủ web của bạn. Sau đó, trên máy Mac của bạn, bật Chia sẻ web từ ngăn Tùy chọn hệ thống & gt; Chia sẻ tùy chọn chia sẻ và trỏ nó vào thư mục bạn chọn. Điều này đã làm việc cho tôi trong quá khứ cho đến khi chuyển sang Máy chủ 10.6.


1
Tôi đang tìm kiếm điều này như là một giải pháp cho máy dev của riêng tôi. Vì tôi phải làm việc ở những nơi mà tôi không có quyền kiểm soát bộ định tuyến, giải pháp này không thể làm việc cho tôi. Tôi nghi ngờ nó sẽ hoạt động nếu bạn đang thiết lập một máy chủ và vì một số lý do không có quyền truy cập root.
Avner

Vì vậy, để rõ ràng, bạn đang cố gắng thiết lập một máy chủ web tại các trang web khách khác nhau, nhưng không có quyền truy cập để mở cổng 80? Làm thế nào bạn có thể mở cổng trên bộ định tuyến nếu bạn không có quyền truy cập? Tôi hiểu chính xác hay tôi rời khỏi căn cứ?
Matt Love

Tôi chỉ đang cố gắng sử dụng cổng 80 trên máy phát triển của riêng tôi chứ không phải trên máy chủ sản xuất. Tôi vẫn triển khai trên heroku.
Avner
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.