rule/types.go (67 lines of code) (raw):

// Licensed to Elasticsearch B.V. under one or more contributor // license agreements. See the NOTICE file distributed with // this work for additional information regarding copyright // ownership. Elasticsearch B.V. licenses this file to you under // the Apache License, Version 2.0 (the "License"); you may // not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package rule import "fmt" // Type specifies the audit rule type. type Type int // The rule types supported by this package. const ( DeleteAllRuleType Type = iota + 1 // DeleteAllRule FileWatchRuleType // FileWatchRule AppendSyscallRuleType // SyscallRule PrependSyscallRuleType // SyscallRule ) // Rule is the generic interface that all rule types implement. type Rule interface { TypeOf() Type // TypeOf returns the type of rule. } // DeleteAllRule deletes all existing rules. type DeleteAllRule struct { Type Type Keys []string // Delete rules that have these keys. } // TypeOf returns DeleteAllRuleType. func (r *DeleteAllRule) TypeOf() Type { return r.Type } // FileWatchRule is used to audit access to particular files or directories // that you may be interested in. type FileWatchRule struct { Type Type Path string Permissions []AccessType Keys []string } // TypeOf returns FileWatchRuleType. func (r *FileWatchRule) TypeOf() Type { return r.Type } // SyscallRule is used to audit invocations of specific syscalls. type SyscallRule struct { Type Type List string Action string Filters []FilterSpec Syscalls []string Keys []string } // TypeOf returns either AppendSyscallRuleType or PrependSyscallRuleType. func (r *SyscallRule) TypeOf() Type { return r.Type } // AccessType specifies the type of file access to audit. type AccessType uint8 // The access types that can be audited for file watches. const ( ReadAccessType AccessType = iota + 1 WriteAccessType ExecuteAccessType AttributeChangeAccessType ) var accessTypeName = map[AccessType]string{ ReadAccessType: "read", WriteAccessType: "write", ExecuteAccessType: "execute", AttributeChangeAccessType: "attribute", } func (t AccessType) String() string { name, found := accessTypeName[t] if found { return name } return "unknown" } // FilterType specifies a type of filter to apply to a syscall rule. type FilterType uint8 // The type of filters that can be applied. const ( InterFieldFilterType FilterType = iota + 1 // Inter-field comparison filtering (-C). ValueFilterType // Filtering based on values (-F). ) // FilterSpec defines a filter to apply to a syscall rule. type FilterSpec struct { Type FilterType LHS string Comparator string RHS string } func (f *FilterSpec) String() string { return fmt.Sprintf("%v %v %v", f.LHS, f.Comparator, f.RHS) }