Documentation
¶
Overview ¶
Package rce provides a gRPC-based Remote Code Execution client and server. The server (or "agent") runs on a remote host and executes a whitelist of shell commands specified in a config file. The client calls the server to execute whitelist commands. Commands from different clients run concurrently; there are no safeguards against conflicting or incompatible commands.
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // ConnectTimeout describes the total timeout for establishing a client // connection to the rceagent server. ConnectTimeout = time.Duration(10) * time.Second // ConnectBackoffMaxDelay configures the dialer to use the // provided maximum delay when backing off after // failed connection attempts. ConnectBackoffMaxDelay = time.Duration(2) * time.Second // KeepaliveTime is the interval at which the client sends keepalive // probes to the server. KeepaliveTime = time.Duration(30) * time.Second // KeepaliveTimeout is the amount of time the client waits to receive // a response from the server after a keepalive probe. KeepaliveTimeout = time.Duration(20) * time.Second )
var ( // ErrInvalidServerConfigAllowAnyCommand is returned by Server.StartServer() when // ServerConfig.AllowAnyCommand is true but ServerConfig.AllowedCommands is non-nil. ErrInvalidServerConfigAllowAnyCommand = errors.New("invalid ServerConfig: AllowAnyCommand is true but AllowedCommands is non-nil") // ErrInvalidServerConfigDisableSecurity is returned by Server.StartServer() // when ServerConfig.AllowAnyCommand is true and ServerConfig.TLS is nil but // ServerConfig.DisableSecurity is false. ErrInvalidServerConfigDisableSecurity = errors.New("invalid ServerConfig: AllowAnyCommand enabled but TLS is nil") // ErrCommandNotAllowed is safeguard error returned by the internal gRPC server when // ServerConfig.AllowedCommands is nil and ServerConfig.AllowAnyCommand is false. // This should not happen because these values are validated in Server.StartServer() // before starting the internal gRPC server. If this error occurs, there is a bug // in ServerConfig validation code. ErrCommandNotAllowed = errors.New("command not allowed") )
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client interface {
// Connect to a remote agent.
Open(host, port string) error
// Close connection to a remote agent.
Close() error
// Return hostname and port of remote agent, if connected.
AgentAddr() (string, string)
// Start a command on the remote agent. Must be connected first by calling
// Connect. This call is non-blocking. It returns the ID of the command or
// an error.
Start(cmdName string, args []string) (id string, err error)
// Wait for a command on the remote agent. This call blocks until the command
// completes. It returns the final statue of the command or an error.
Wait(id string) (*pb.Status, error)
// Get the status of a running command. This is safe to call by multiple
// goroutines. ErrNotFound is returned if Wait or Stop has already been
// called.
GetStatus(id string) (*pb.Status, error)
// Stop a running command. ErrNotFound is returne if Wait or Stop has already
// been called.
Stop(id string) error
// Return a list of all running command IDs.
Running() ([]string, error)
}
A Client calls a remote agent (server) to execute commands.
type Server ¶
type Server interface {
// Start the gRPC server, non-blocking.
StartServer() error
// Stop the gRPC server gracefully.
StopServer() error
pb.RCEAgentServer
}
A Server executes a whitelist of commands when called by clients.
func NewServer ¶
NewServer makes a new Server that listens on laddr and runs the whitelist of commands. If tlsConfig is nil, the sever is insecure.
func NewServerWithConfig ¶ added in v1.1.0
func NewServerWithConfig(cfg ServerConfig) Server
type ServerConfig ¶ added in v1.1.0
type ServerConfig struct {
// Addr is the required host:post listen address.
Addr string
// AllowedCommands is the list of commands the server is allowed to run.
// By default, no commands are allowed; commands must be explicitly allowed.
AllowedCommands cmd.Runnable
// AllowAnyCommand allows any commands if AllowedCommands is nil.
// This is not recommended. If true, TLS must be specified (non-nil);
// or, to enable AllowAnyCommand without TLS, DisableSecurity must be true.
AllowAnyCommand bool
// DisableSecurity allows AllowAnyCommand without TLS: an insecure server that
// can execute any command from any client.
//
// This option should not be used.
DisableSecurity bool
// TLS specifies the TLS configuration for secure and verified communication.
// Use TLSFiles.TLSConfig() to load TLS files and configure for server and
// client verification.
TLS *tls.Config
}
ServerConfig configures a Server.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package cmd provides command file specs and structures used by an rce.Server.
|
Package cmd provides command file specs and structures used by an rce.Server. |
|
example
|
|
|
client
command
|
|
|
server
command
|
|
|
Package rce is a generated protocol buffer package.
|
Package rce is a generated protocol buffer package. |