Diff
1diff --git a/examples/non-root/main.go b/examples/setuid/main.go
2rename from examples/non-root/main.go
3rename to examples/setuid/main.go
4index 352212734962d1fcd0b2fdeba3fcd87d25c6ca2d..4c05e5fb2e84d37eef637fd03625a78fb4c0ae50 100644
5--- a/examples/non-root/main.go
6+++ b/examples/setuid/main.go
7@@ -1,10 +1,15 @@
8 //go:build darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris
9 // +build darwin dragonfly freebsd linux netbsd openbsd solaris
10
11+// This is an example of binding soft-serve ssh port to a restricted port (<1024) and
12+// then droping root privileges to a different user to run the server.
13+// Make sure you run this as root.
14+
15 package main
16
17 import (
18 "context"
19+ "flag"
20 "fmt"
21 "log"
22 "net"
23@@ -17,31 +22,29 @@ import (
24 "github.com/charmbracelet/soft-serve/server"
25 )
26
27-const (
28- port = 22
29- gid = 1000
30- uid = 1000
31-)
32-
33 var (
34- addr = fmt.Sprintf(":%d", port)
35+ port = flag.Int("port", 22, "port to listen on")
36+ gid = flag.Int("gid", 1000, "group id to run as")
37+ uid = flag.Int("uid", 1000, "user id to run as")
38 )
39
40 func main() {
41+ flag.Parse()
42+ addr := fmt.Sprintf(":%d", *port)
43 // To listen on port 22 we need root privileges
44 ls, err := net.Listen("tcp", addr)
45 if err != nil {
46 log.Fatalf("Can't listen: %s", err)
47 }
48 // We don't need root privileges any more
49- if err := syscall.Setgid(gid); err != nil {
50+ if err := syscall.Setgid(*gid); err != nil {
51 log.Fatalf("Setgid error: %s", err)
52 }
53- if err := syscall.Setuid(uid); err != nil {
54+ if err := syscall.Setuid(*uid); err != nil {
55 log.Fatalf("Setuid error: %s", err)
56 }
57 cfg := config.DefaultConfig()
58- cfg.Port = port
59+ cfg.Port = *port
60 s := server.NewServer(cfg)
61
62 done := make(chan os.Signal, 1)