main.go 1.44 KB
Newer Older
1
2
3
package main

import (
liming6's avatar
liming6 committed
4
	"context"
liming6's avatar
liming6 committed
5
	"fmt"
6
	"log"
liming6's avatar
liming6 committed
7
	"os"
8
	"sshd-tool/cmd/file-monitor/logic"
liming6's avatar
liming6 committed
9
	"sync"
liming6's avatar
liming6 committed
10
11
12
	"time"

	"github.com/gofrs/flock"
13
	"github.com/spf13/pflag"
14
15
)

liming6's avatar
liming6 committed
16
var (
17
18
19
	logfile   *os.File
	flagDebug = pflag.Bool("debug", false, "debug mode, print log to stdout, not file")
	flagHelp  = pflag.BoolP("help", "h", false, "show usage")
liming6's avatar
liming6 committed
20
21
)

22
23
func main() {
	pflag.Parse()
liming6's avatar
liming6 committed
24

25
26
27
28
	if *flagHelp {
		fmt.Println("Monitor sftp and scp file uploads. After a file is uploaded, use clamdscan to scan the file. If the file contains a virus, delete it")
		pflag.Usage()
		return
liming6's avatar
liming6 committed
29
30
31
32
33
34
35
36
37
	}

	fileLock := flock.New("/tmp/file-monitor.lock")
	locked, err := fileLock.TryLock()
	if err != nil || !locked {
		log.Fatal("there is already a file-monitor instance running, stopping")
	}
	defer fileLock.Unlock()
	err = logic.CheckExec()
38
	if err != nil {
39
		log.Fatal(err)
40
	}
41
42
43
44
45
46
47
48
49

	if !*flagDebug {
		logFile, err := os.Create(fmt.Sprintf("/var/log/file-monitor.%s.log", time.Now().Format("2006-01-02_15-04-05")))
		if err == nil {
			logfile = logFile
			log.SetOutput(logFile)
			defer logFile.Close()
		}
	}
liming6's avatar
liming6 committed
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
	wg := sync.WaitGroup{}
	wg.Add(2)
	go logic.StartSftpMonitor(&wg)
	go logic.StartAuditMonitor(&wg)
	ctx, cancel := context.WithCancel(context.Background())
	go func(c context.Context) {
		ticker := time.NewTicker(time.Minute * 5)
		defer ticker.Stop()
		for {
			select {
			case <-ticker.C:
				logic.CleanSCP()
				logic.CleanSftp()
			case <-c.Done():
				return
			}
		}
	}(ctx)
	wg.Wait()
	cancel()
70
}