/* * Teleport * Copyright (C) 2023 Gravitational, Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . */ package teleport import ( "strings" "time" "github.com/gravitational/trace" ) const ( // SSHAuthSock is the environment variable pointing to the // Unix socket the SSH agent is running on. SSHAuthSock = "SSH_AUTH_SOCK" // SSHAgentPID is the environment variable pointing to the agent // process ID SSHAgentPID = "SSH_AGENT_PID" // SSHTeleportUser is the current Teleport user that is logged in. SSHTeleportUser = "SSH_TELEPORT_USER" // SSHSessionWebProxyAddr is the address the web proxy. SSHSessionWebProxyAddr = "SSH_SESSION_WEBPROXY_ADDR" // SSHTeleportClusterName is the name of the cluster this node belongs to. SSHTeleportClusterName = "SSH_TELEPORT_CLUSTER_NAME" // SSHTeleportHostUUID is the UUID of the host. SSHTeleportHostUUID = "SSH_TELEPORT_HOST_UUID" // SSHSessionID is the UUID of the current session. SSHSessionID = "SSH_SESSION_ID" ) const ( // HTTPNextProtoTLS is the NPN/ALPN protocol negotiated during // HTTP/1.1.'s TLS setup. // https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#alpn-protocol-ids HTTPNextProtoTLS = "http/1.1" ) const ( // TOTPValidityPeriod is the number of seconds a TOTP token is valid. TOTPValidityPeriod uint = 30 // TOTPSkew adds that many periods before and after to the validity window. TOTPSkew uint = 1 ) const ( // ComponentKey is a field that represents a component - e.g. service or // function ComponentKey = "trace.component" // ComponentFields is a fields component ComponentFields = "trace.fields" // ComponentMemory is a memory backend ComponentMemory = "memory" // ComponentAuthority is a TLS and an SSH certificate authority ComponentAuthority = "ca" // ComponentProcess is a main control process ComponentProcess = "proc" // ComponentServer is a server subcomponent of some services ComponentServer = "server" // ComponentACME is ACME protocol controller ComponentACME = "acme" // ComponentReverseTunnelServer is reverse tunnel server // that together with agent establish a bi-directional SSH revers tunnel // to bypass firewall restrictions ComponentReverseTunnelServer = "proxy:server" // ComponentReverseTunnelAgent is reverse tunnel agent // that together with server establish a bi-directional SSH revers tunnel // to bypass firewall restrictions ComponentReverseTunnelAgent = "proxy:agent" // ComponentLabel is a component label name used in reporting ComponentLabel = "component" // ComponentProxyKube is a kubernetes proxy ComponentProxyKube = "proxy:kube" // ComponentAuth is the cluster CA node (auth server API) ComponentAuth = "auth" // ComponentGRPC is gRPC server ComponentGRPC = "grpc" // ComponentMigrate is responsible for data migrations ComponentMigrate = "migrate" // ComponentNode is SSH node (SSH server serving requests) ComponentNode = "node" // ComponentForwardingNode is SSH node (SSH server serving requests) ComponentForwardingNode = "node:forward" // ComponentProxy is SSH proxy (SSH server forwarding connections) ComponentProxy = "proxy" // ComponentRelay is the component name for the relay service. ComponentRelay = "relay" // ComponentProxyPeer is the proxy peering component of the proxy service ComponentProxyPeer = "proxy:peer" // ComponentApp is the application proxy service. ComponentApp = "app:service" // ComponentDatabase is the database proxy service. ComponentDatabase = "db:service" // ComponentDatabaseHealth is the endpoint health checking component of the // database proxy service. ComponentDatabaseHealth = "db:health" // ComponentDiscovery is the Discovery service. ComponentDiscovery = "discovery:service" // ComponentAppProxy is the application handler within the web proxy service. ComponentAppProxy = "app:web" // ComponentWebProxy is the web handler within the web proxy service. ComponentWebProxy = "web" // ComponentDiagnostic is a diagnostic service ComponentDiagnostic = "diag" // ComponentDiagnosticHealth is the health monitor used by the diagnostic // and debug services. ComponentDiagnosticHealth = "diag:health" // ComponentDebug is the debug service, which exposes debugging // configuration over a Unix socket. ComponentDebug = "debug" // ComponentClient is a client ComponentClient = "client" // ComponentTunClient is a tunnel client ComponentTunClient = "client:tunnel" // ComponentCache is a cache component ComponentCache = "cache" // ComponentBackend is a backend component ComponentBackend = "backend" // ComponentSubsystemProxy is the proxy subsystem. ComponentSubsystemProxy = "subsystem:proxy" // ComponentLocalTerm is a terminal on a regular SSH node. ComponentLocalTerm = "term:local" // ComponentRemoteTerm is a terminal on a forwarding SSH node. ComponentRemoteTerm = "term:remote" // ComponentRemoteSubsystem is subsystem on a forwarding SSH node. ComponentRemoteSubsystem = "subsystem:remote" // ComponentAuditLog is audit log component ComponentAuditLog = "audit" // ComponentKeyAgent is an agent that has loaded the sessions keys and // certificates for a user connected to a proxy. ComponentKeyAgent = "keyagent" // ComponentKeyStore is all sessions keys and certificates a user has on disk // for all proxies. ComponentKeyStore = "keystore" // ComponentConnectProxy is the HTTP CONNECT proxy used to tunnel connection. ComponentConnectProxy = "http:proxy" // ComponentSOCKS is a SOCKS5 proxy. ComponentSOCKS = "socks" // ComponentKeyGen is the public/private keypair generator. ComponentKeyGen = "keygen" // ComponentFirestore represents firestore clients ComponentFirestore = "firestore" // ComponentSession is an active session. ComponentSession = "session" // ComponentHostUsers represents host user management. ComponentHostUsers = "hostusers" // ComponentDynamoDB represents dynamodb clients ComponentDynamoDB = "dynamodb" // ComponentUpload is a session recording upload server ComponentUpload = "upload" // ComponentWeb is a web server ComponentWeb = "web" // ComponentUnifiedResource is a cache of resources meant to be listed and displayed // together in the web UI ComponentUnifiedResource = "unified_resource" // ComponentWebsocket is websocket server that the web client connects to. ComponentWebsocket = "websocket" // ComponentRBAC is role-based access control. ComponentRBAC = "rbac" // ComponentKeepAlive is keep-alive messages sent from clients to servers // and vice versa. ComponentKeepAlive = "keepalive" // ComponentTeleport is the "teleport" binary. ComponentTeleport = "teleport" // ComponentTSH is the "tsh" binary. ComponentTSH = "tsh" // ComponentTCTL is the "tctl" binary. ComponentTCTL = "tctl" // ComponentTBot is the "tbot" binary ComponentTBot = "tbot" // ComponentKubeClient is the Kubernetes client. ComponentKubeClient = "client:kube" // ComponentBuffer is in-memory event circular buffer // used to broadcast events to subscribers. ComponentBuffer = "buffer" // ComponentBPF is the eBPF packagae. ComponentBPF = "bpf" // ComponentCgroup is the cgroup package. ComponentCgroup = "cgroups" // ComponentKube is an Kubernetes API gateway. ComponentKube = "kubernetes" // ComponentSAML is a SAML service provider. ComponentSAML = "saml" // ComponentMetrics is a metrics server ComponentMetrics = "metrics" // ComponentWindowsDesktop is a Windows desktop access server. ComponentWindowsDesktop = "windows_desktop" // ComponentLinuxDesktop is a Linux desktop access server. ComponentLinuxDesktop = "linux_desktop" // ComponentTracing is a tracing exporter ComponentTracing = "tracing" // ComponentInstance is an abstract component common to all services. ComponentInstance = "instance" // ComponentVersionControl is the component common to all version control operations. ComponentVersionControl = "version-control" // ComponentUsageReporting is the component responsible for reporting usage metrics. ComponentUsageReporting = "usage-reporting" // ComponentAthena represents athena clients. ComponentAthena = "athena" // ComponentProxySecureGRPC represents a secure gRPC server running on Proxy (used for Kube). ComponentProxySecureGRPC = "proxy:secure-grpc" // ComponentUpdater represents the teleport-update binary. ComponentUpdater = "updater" // ComponentRolloutController represents the autoupdate_agent_rollout controller. ComponentRolloutController = "rollout-controller" // ComponentGit represents git proxy related services. ComponentGit = "git" // ComponentForwardingGit represents the SSH proxy that forwards Git commands. ComponentForwardingGit = "git:forward" // ComponentMCP represents the MCP server handler. ComponentMCP = "mcp" // ComponentLLM represents the LLM server handler. ComponentLLM = "llm" // ComponentRecordingEncryption represents recording encryption ComponentRecordingEncryption = "recording-encryption" // VerboseLogsEnvVar forces all logs to be verbose (down to DEBUG level) VerboseLogsEnvVar = "TELEPORT_DEBUG" // IterationsEnvVar sets tests iterations to run IterationsEnvVar = "ITERATIONS" // DefaultTerminalWidth defines the default width of a server-side allocated // pseudo TTY DefaultTerminalWidth = 80 // DefaultTerminalHeight defines the default height of a server-side allocated // pseudo TTY DefaultTerminalHeight = 25 // SafeTerminalType is the fall-back TTY type to fall back to (when $TERM // is not defined) SafeTerminalType = "xterm" // DataDirParameterName is the name of the data dir configuration parameter passed // to all backends during initialization DataDirParameterName = "data_dir" // KeepAliveReqType is a SSH request type to keep the connection alive. A client and // a server keep pinging each other with it. KeepAliveReqType = "keepalive@openssh.com" // ClusterDetailsReqType is the name of a global request which returns cluster details like // if the proxy is recording sessions or not and if FIPS is enabled. ClusterDetailsReqType = "cluster-details@goteleport.com" // JSON means JSON serialization format JSON = "json" // YAML means YAML serialization format YAML = "yaml" // Text means text serialization format Text = "text" // PTY is a raw PTY session capture format PTY = "pty" // Names is for formatting node names in plain text Names = "names" // LinuxAdminGID is the ID of the standard adm group on linux LinuxAdminGID = 4 // DirMaskSharedGroup is the mask for a directory accessible // by the owner and group DirMaskSharedGroup = 0o770 // FileMaskOwnerOnly is the file mask that allows read write access // to owers only FileMaskOwnerOnly = 0o600 // On means mode is on On = "on" // Off means mode is off Off = "off" // GCSTestURI turns on GCS tests GCSTestURI = "TEST_GCS_URI" // AZBlobTestURI specifies the storage account URL to use for Azure Blob // Storage tests. AZBlobTestURI = "TEST_AZBLOB_URI" // AWSRunTests turns on tests executed against AWS directly AWSRunTests = "TEST_AWS" // AWSRunDBTests turns on tests executed against AWS databases directly. AWSRunDBTests = "TEST_AWS_DB" // Region is AWS region parameter Region = "region" // Endpoint is an optional Host for non-AWS S3 Endpoint = "endpoint" // Insecure is an optional switch to use HTTP instead of HTTPS Insecure = "insecure" // DisableServerSideEncryption is an optional switch to opt out of SSE in case the provider does not support it DisableServerSideEncryption = "disablesse" // ACL is the canned ACL to send to S3 ACL = "acl" // SSEKMSKey is an optional switch to use an KMS CMK key for S3 SSE. SSEKMSKey = "sse_kms_key" // S3UseVirtualStyleAddressing is an optional switch to use use a virtual-hosted–style URI. S3UseVirtualStyleAddressing = "use_s3_virtual_style_addressing" // S3CompleteInitiators is an optional allow list which configures the upload completer // to only complete uploads from the specified set of initiators. S3CompleteInitiators = "complete_initiators" // SchemeFile configures local disk-based file storage for audit events SchemeFile = "file" // SchemeStdout outputs audit log entries to stdout SchemeStdout = "stdout" // SchemeS3 is used for S3-like object storage SchemeS3 = "s3" // SchemeGCS is used for Google Cloud Storage SchemeGCS = "gs" // SchemeAZBlob is the Azure Blob Storage scheme, used as the scheme in the // session storage URI to identify a storage account accessed over https. SchemeAZBlob = "azblob" // SchemeAZBlobHTTP is the Azure Blob Storage scheme, used as the scheme in the // session storage URI to identify a storage account accessed over http. SchemeAZBlobHTTP = "azblob-http" // LogsDir is a log subdirectory for events and logs LogsDir = "log" // DebugLevel is a debug logging level name DebugLevel = "debug" // EnvVarAllowNoSecondFactor is used to allow disabling second factor auth // todo(tross): DELETE WHEN ABLE TO EnvVarAllowNoSecondFactor = "TELEPORT_ALLOW_NO_SECOND_FACTOR" ) const ( // These values are from https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest // OIDCPromptSelectAccount instructs the Authorization Server to // prompt the End-User to select a user account. OIDCPromptSelectAccount = "select_account" // OIDCAccessTypeOnline indicates that OIDC flow should be performed // with Authorization server and user connected online OIDCAccessTypeOnline = "online" ) // Component generates "component:subcomponent1:subcomponent2" strings used // in debugging func Component(components ...string) string { return strings.Join(components, ":") } const ( // AuthorizedKeys are public keys that check against User CAs. AuthorizedKeys = "authorized_keys" // KnownHosts are public keys that check against Host CAs. KnownHosts = "known_hosts" ) const ( // CertExtensionScopePin is used to pin a user certificate to a specific scope and // set of scoped roles. This constrains a user's access to resources based on both // the scoping rules and scoped roles defined. CertExtensionScopePin = "scope-pin@goteleport.com" // CertExtensionAgentScope is used to pin an agent/host certificate to a specific scope. // This constrains other identities' access to the agent itself as well as the agent's // access to other resources based on scoping rules. CertExtensionAgentScope = "agent-scope@goteleport.com" // CertExtensionAgentScopePin encodes an agent's scope pin, including the pinned scope and system roles. // Supersedes CertExtensionAgentScope for scoped agents. CertExtensionAgentScopePin = "agent-scope-pin@goteleport.com" // CertExtensionPermitX11Forwarding allows X11 forwarding for certificate CertExtensionPermitX11Forwarding = "permit-X11-forwarding" // CertExtensionPermitAgentForwarding allows agent forwarding for certificate CertExtensionPermitAgentForwarding = "permit-agent-forwarding" // CertExtensionPermitPTY allows user to request PTY CertExtensionPermitPTY = "permit-pty" // CertExtensionPermitPortForwarding allows user to request port forwarding CertExtensionPermitPortForwarding = "permit-port-forwarding" // CertExtensionTeleportRoles is used to propagate teleport roles CertExtensionTeleportRoles = "teleport-roles" // CertExtensionTeleportRouteToCluster is used to encode // the target cluster to route to in the certificate CertExtensionTeleportRouteToCluster = "teleport-route-to-cluster" // CertExtensionTeleportTraits is used to propagate traits about the user. CertExtensionTeleportTraits = "teleport-traits" // CertExtensionTeleportActiveRequests is used to track which privilege // escalation requests were used to construct the certificate. CertExtensionTeleportActiveRequests = "teleport-active-requests" // CertExtensionMFAVerified is used to mark certificates issued after an MFA // check. CertExtensionMFAVerified = "mfa-verified" // CertExtensionPreviousIdentityExpires is the extension that stores an RFC3339 // timestamp representing the expiry time of the identity/cert that this // identity/cert was derived from. It is used to determine a session's hard // deadline in cases where both require_session_mfa and disconnect_expired_cert // are enabled. See https://github.com/gravitational/teleport/issues/18544. CertExtensionPreviousIdentityExpires = "prev-identity-expires" // CertExtensionLoginIP is used to embed the IP of the client that created // the certificate. CertExtensionLoginIP = "login-ip" // CertExtensionImpersonator is set when one user has requested certificates // for another user CertExtensionImpersonator = "impersonator" // CertExtensionDisallowReissue is set when a certificate should not be allowed // to request future certificates. CertExtensionDisallowReissue = "disallow-reissue" // CertExtensionRenewable is a flag to indicate the certificate may be // renewed. CertExtensionRenewable = "renewable" // CertExtensionGeneration counts the number of times a certificate has // been renewed. CertExtensionGeneration = "generation" // CertExtensionAllowedResources lists the resources which this certificate // should be allowed to access CertExtensionAllowedResources = "teleport-allowed-resources" // CertExtensionAllowedResourceAccessIDs lists the resources which this // certificate should be allowed to access, paired with additional access information. CertExtensionAllowedResourceAccessIDs = "teleport-allowed-resource-access-ids" // CertExtensionConnectionDiagnosticID contains the ID of the ConnectionDiagnostic. // The Node/Agent will append connection traces to this diagnostic instance. CertExtensionConnectionDiagnosticID = "teleport-connection-diagnostic-id" // CertExtensionPrivateKeyPolicy is used to mark certificates with their supported // private key policy. CertExtensionPrivateKeyPolicy = "private-key-policy" // CertExtensionDeviceID is the trusted device identifier. CertExtensionDeviceID = "teleport-device-id" // CertExtensionDeviceAssetTag is the device inventory identifier. CertExtensionDeviceAssetTag = "teleport-device-asset-tag" // CertExtensionDeviceCredentialID is the identifier for the credential used // by the device to authenticate itself. CertExtensionDeviceCredentialID = "teleport-device-credential-id" // CertExtensionBotName indicates the name of the Machine ID bot this // certificate was issued to, if any. CertExtensionBotName = "bot-name@goteleport.com" // CertExtensionBotInstanceID indicates the unique identifier of this // Machine ID bot instance, if any. This identifier is persisted through // certificate renewals. CertExtensionBotInstanceID = "bot-instance-id@goteleport.com" // CertExtensionBotScope indicates the scope of the Machine ID bot this // certificate was issued to, if any. CertExtensionBotScope = "bot-scope@goteleport.com" // CertExtensionJoinToken is the name of the join token used to join this // bot, if any. CertExtensionJoinToken = "join-token@goteleport.com" // CertExtensionDelegationSessionID contains the identifier of the // Delegation Session this certificate was created for. CertExtensionDelegationSessionID = "delegation-session-id@goteleport.com" // CertExtensionBeamID contains the identifier of the Beam this certificate // was created for, derived from the delegation session's // types.BeamIDLabel label. CertExtensionBeamID = "beam-id@goteleport.com" // CertCriticalOptionSourceAddress is a critical option that defines IP addresses (in CIDR notation) // from which this certificate is accepted for authentication. // See: https://cvsweb.openbsd.org/src/usr.bin/ssh/PROTOCOL.certkeys?annotate=HEAD. CertCriticalOptionSourceAddress = "source-address" // CertExtensionGitHubUserID indicates the GitHub user ID identified by the // GitHub connector. CertExtensionGitHubUserID = "github-id@goteleport.com" // CertExtensionGitHubUsername indicates the GitHub username identified by // the GitHub connector. CertExtensionGitHubUsername = "github-login@goteleport.com" // CertExtensionImmutableLabelHash is the hash used to verify immutable // labels against a certificate. CertExtensionImmutableLabelHash = "immutable-label-hash@goteleport.com" // CertExtensionHeadlessAuthenticationID is the ID of the headless // authentication resource this certificate was created for. CertExtensionHeadlessAuthenticationID = "headless-authentication-id@goteleport.com" ) // Note: when adding new providers to this list, consider updating the help message for --provider flag // for `tctl sso configure oidc` and `tctl sso configure saml` commands // as well as docs at https://goteleport.com/docs/enterprise/sso/#provider-specific-workarounds const ( // NetIQ is an identity provider. NetIQ = "netiq" // ADFS is Microsoft Active Directory Federation Services ADFS = "adfs" // Ping is the common backend for all Ping Identity-branded identity // providers (including PingOne, PingFederate, etc). Ping = "ping" // Okta should be used for Okta OIDC providers. Okta = "okta" // JumpCloud is an identity provider. JumpCloud = "jumpcloud" ) // MaxResourceSize is the maximum size (in bytes) of a serialized resource. This limit is // typically only enforced against resources that are likely to arbitrarily grow (e.g. PluginData). const MaxResourceSize = 1000000 // MaxHTTPRequestSize is the maximum accepted size (in bytes) of the body of // a received HTTP request. This limit is meant to be used with utils.ReadAtMost // to prevent resource exhaustion attacks. const MaxHTTPRequestSize = 10 * 1024 * 1024 // MaxHTTPResponseSize is the maximum accepted size (in bytes) of the body of // a received HTTP response. This limit is meant to be used with utils.ReadAtMost // to prevent resource exhaustion attacks. const MaxHTTPResponseSize = 10 * 1024 * 1024 // MaxUsernameLength is the maximum allowed length (characters) for usernames. // This limit prevents sending extremely long usernames that could clog up logs or exhaust resources. const MaxUsernameLength = 1000 const ( // CertificateFormatOldSSH is used to make Teleport interoperate with older // versions of OpenSSH. CertificateFormatOldSSH = "oldssh" // CertificateFormatUnspecified is used to check if the format was specified // or not. CertificateFormatUnspecified = "" ) const ( // TraitInternalPrefix is the role variable prefix that indicates it's for // local accounts. TraitInternalPrefix = "internal" // TraitExternalPrefix is the role variable prefix that indicates the data comes from an external identity provider. TraitExternalPrefix = "external" // TraitTeams is the name of the role variable use to store team // membership information TraitTeams = "github_teams" // TraitInternalLoginsVariable is the variable used to store allowed // logins for local accounts. TraitInternalLoginsVariable = "{{internal.logins}}" // TraitInternalWindowsLoginsVariable is the variable used to store // allowed Windows Desktop logins for local accounts. TraitInternalWindowsLoginsVariable = "{{internal.windows_logins}}" // TraitInternalLinuxDesktopLoginsVariable is the variable used to store // allowed Linux Desktop logins for local accounts. TraitInternalLinuxDesktopLoginsVariable = "{{internal.linux_desktop_logins}}" // TraitInternalKubeGroupsVariable is the variable used to store allowed // kubernetes groups for local accounts. TraitInternalKubeGroupsVariable = "{{internal.kubernetes_groups}}" // TraitInternalKubeUsersVariable is the variable used to store allowed // kubernetes users for local accounts. TraitInternalKubeUsersVariable = "{{internal.kubernetes_users}}" // TraitInternalDBNamesVariable is the variable used to store allowed // database names for local accounts. TraitInternalDBNamesVariable = "{{internal.db_names}}" // TraitInternalDBUsersVariable is the variable used to store allowed // database users for local accounts. TraitInternalDBUsersVariable = "{{internal.db_users}}" // TraitInternalDBRolesVariable is the variable used to store allowed // database roles for automatic database user provisioning. TraitInternalDBRolesVariable = "{{internal.db_roles}}" // TraitInternalAWSRoleARNs is the variable used to store allowed AWS // role ARNs for local accounts. TraitInternalAWSRoleARNs = "{{internal.aws_role_arns}}" // TraitInternalAzureIdentities is the variable used to store allowed // Azure identities for local accounts. TraitInternalAzureIdentities = "{{internal.azure_identities}}" // TraitInternalGCPServiceAccounts is the variable used to store allowed // GCP service accounts for local accounts. TraitInternalGCPServiceAccounts = "{{internal.gcp_service_accounts}}" // TraitInternalJWTVariable is the variable used to store JWT token for // app sessions. TraitInternalJWTVariable = "{{internal.jwt}}" // TraitInternalGitHubOrgs is the variable used to store allowed GitHub // organizations for GitHub integrations. TraitInternalGitHubOrgs = "{{internal.github_orgs}}" // TraitInternalMCPTools is the variable used to store allowed MCP tools for // MCP servers. TraitInternalMCPTools = "{{internal.mcp_tools}}" ) // SCP is Secure Copy. const SCP = "scp" const ( // PresetEditorRoleName is a name of a preset role that allows // editing cluster configuration. PresetEditorRoleName = "editor" // PresetAccessRoleName is a name of a preset role that allows // accessing cluster resources. PresetAccessRoleName = "access" // PresetAuditorRoleName is a name of a preset role that allows // reading cluster events and playing back session records. PresetAuditorRoleName = "auditor" // PresetReviewerRoleName is a name of a preset role that allows // for reviewing access requests. PresetReviewerRoleName = "reviewer" // PresetRequesterRoleName is a name of a preset role that allows // for requesting access to resources. PresetRequesterRoleName = "requester" // PresetGroupAccessRoleName is a name of a preset role that allows // access to all user groups. PresetGroupAccessRoleName = "group-access" // PresetDeviceAdminRoleName is the name of the "device-admin" role. // The role is used to administer trusted devices. PresetDeviceAdminRoleName = "device-admin" // PresetDeviceEnrollRoleName is the name of the "device-enroll" role. // The role is used to grant device enrollment powers to users. PresetDeviceEnrollRoleName = "device-enroll" // PresetRequireTrustedDeviceRoleName is the name of the // "require-trusted-device" role. // The role is used as a basis for requiring trusted device access to // resources. PresetRequireTrustedDeviceRoleName = "require-trusted-device" // PresetTerraformProviderRoleName is a name of a default role that allows the Terraform provider // to configure all its supported Teleport resources. PresetTerraformProviderRoleName = "terraform-provider" // SystemAutomaticAccessApprovalRoleName names a preset role that may // automatically approve any Role Access Request SystemAutomaticAccessApprovalRoleName = "@teleport-access-approver" // ConnectMyComputerRoleNamePrefix is the prefix used for roles prepared for individual users // during the setup of Connect My Computer. The prefix is followed by the name of the cluster // user. See teleterm.connectmycomputer.RoleSetup. ConnectMyComputerRoleNamePrefix = "connect-my-computer-" // SystemOktaRequesterRoleName is a name of a system role that allows // for requesting access to Okta resources. This differs from the requester role // in that it allows for requesting longer lived access. SystemOktaRequesterRoleName = "okta-requester" // SystemOktaAccessRoleName is the name of the system role that allows // access to Okta resources. This will be used by the Okta requester role to // search for Okta resources. SystemOktaAccessRoleName = "okta-access" // SystemIdentityCenterAccessRoleName specifies the name of a system role // that grants a user access to AWS Identity Center resources via // Access Requests. SystemIdentityCenterAccessRoleName = "aws-ic-access" // SystemBeamRoleName specifies the name of a system role that grants the // beam bot permission to issue itself credentials. SystemBeamRoleName = "beam" // PresetWildcardWorkloadIdentityIssuerRoleName is a name of a preset role // that includes the permissions necessary to issue workload identity // credentials using any workload_identity resource. This exists to simplify // Day 0 UX experience with workload identity. PresetWildcardWorkloadIdentityIssuerRoleName = "wildcard-workload-identity-issuer" // PresetAccessPluginRoleName is a name of a preset role that includes // permissions required by self-hosted access request plugin. PresetAccessPluginRoleName = "access-plugin" // PresetAccessPluginWithReviewRoleName names the preset role that includes // permissions required by self-hosted access request plugins that permit native reviews. PresetAccessPluginWithReviewRoleName = "access-plugin-with-review" // PresetListAccessRequestResourcesRoleName is a name of a preset role that // includes permissions to read access request resources. PresetListAccessRequestResourcesRoleName = "list-access-request-resources" // PresetMCPUserRoleName is a name of a preset role that allows // accessing MCP servers. PresetMCPUserRoleName = "mcp-user" // PresetBeamUserRoleName is a name of a preset role that allows users to use // the Beams feature. PresetBeamUserRoleName = "beam-user" // PresetBeamAdminRoleName is a name of a preset role that allows users to // administer beams belonging to other users. PresetBeamAdminRoleName = "beam-admin" ) var PresetRoles = []string{PresetEditorRoleName, PresetAccessRoleName, PresetAuditorRoleName} const ( // VirtualDefaultHealthCheckConfigDBName is the name of a virtual // health_check_config that enables health checks for all database // resources. For historical reasons, it's value is "default" even // though it applies to databases only. VirtualDefaultHealthCheckConfigDBName = "default" // VirtualDefaultHealthCheckConfigKubeName is the name of a virtual // health_check_config that enables health checks for all Kubernetes // resources. VirtualDefaultHealthCheckConfigKubeName = "default-kube" // VirtualDefaultHealthCheckConfigCount is the number of virtual // health_check_config resources. VirtualDefaultHealthCheckConfigCount = 2 ) const ( // SystemAccessApproverUserName names a Teleport user that acts as // an Access Request approver for access plugins SystemAccessApproverUserName = "@teleport-access-approval-bot" ) const ( // RemoteClusterStatusOffline indicates that cluster is considered as // offline, since it has missed a series of heartbeats RemoteClusterStatusOffline = "offline" // RemoteClusterStatusOnline indicates that cluster is sending heartbeats // at expected interval RemoteClusterStatusOnline = "online" ) const ( // SharedDirMode is a mode for a directory shared with group SharedDirMode = 0o750 // PrivateDirMode is a mode for private directories PrivateDirMode = 0o700 ) const ( // SessionEvent is sent by servers to clients when an audit event occurs on // the session. SessionEvent = "x-teleport-event" // VersionRequest is sent by clients to server requesting the Teleport // version they are running. VersionRequest = "x-teleport-version" // CurrentSessionIDRequest is sent by servers to inform clients of // the session ID that is being used. CurrentSessionIDRequest = "current-session-id@goteleport.com" // SessionIDQueryRequest is sent by clients to ask servers if they // will generate and share their own session ID when a new session // is started (session and exec/shell channels accepted). // // TODO(Joerger): DELETE IN v20.0.0 // All v17+ servers set the session ID. v19+ clients stop checking. SessionIDQueryRequest = "session-id-query@goteleport.com" // SessionIDQueryRequestV2 is sent by clients to ask servers if they // will generate and share their own session ID when a new session // channel is accepted, rather than when the shell/exec channel is. // // TODO(Joerger): DELETE IN v21.0.0 // all v19+ servers set the session ID directly after accepting the session channel. // clients should stop checking in v21, and servers should stop responding to the query in v22. SessionIDQueryRequestV2 = "session-id-query-v2@goteleport.com" // ForceTerminateRequest is an SSH request to forcefully terminate a session. ForceTerminateRequest = "x-teleport-force-terminate" // TerminalSizeRequest is a request for the terminal size of the session. TerminalSizeRequest = "x-teleport-terminal-size" // TCPIPForwardRequest is an SSH request for the server to open a listener // for port forwarding. TCPIPForwardRequest = "tcpip-forward" // CancelTCPIPForwardRequest is an SSHRequest to cancel a previous // TCPIPForwardRequest. CancelTCPIPForwardRequest = "cancel-tcpip-forward" // MFAPresenceRequest is an SSH request to notify clients that MFA presence is required for a session. MFAPresenceRequest = "x-teleport-mfa-presence" // EnvSSHJoinMode is the SSH environment variable that contains the requested participant mode. EnvSSHJoinMode = "TELEPORT_SSH_JOIN_MODE" // EnvSSHSessionReason is a reason attached to started sessions meant to describe their intent. EnvSSHSessionReason = "TELEPORT_SESSION_REASON" // EnvSSHSessionInvited is an environment variable listing people invited to a session. EnvSSHSessionInvited = "TELEPORT_SESSION_INVITED_USERS" // EnvSSHSessionDisplayParticipantRequirements is set to true or false to indicate if participant // requirement information should be printed. EnvSSHSessionDisplayParticipantRequirements = "TELEPORT_SESSION_PARTICIPANT_REQUIREMENTS" // SSHSessionJoinPrincipal is the SSH principal used when joining sessions. // This starts with a hyphen so it isn't a valid unix login. SSHSessionJoinPrincipal = "-teleport-internal-join" ) const ( // EnvKubeConfig is environment variable for kubeconfig EnvKubeConfig = "KUBECONFIG" // KubeConfigDir is a default directory where k8s stores its user local config KubeConfigDir = ".kube" // KubeConfigFile is a default filename where k8s stores its user local config KubeConfigFile = "config" // KubeRunTests turns on kubernetes tests KubeRunTests = "TEST_KUBE" // KubeSystemAuthenticated is a builtin group that allows // any user to access common API methods, e.g. discovery methods // required for initial client usage KubeSystemAuthenticated = "system:authenticated" // UsageKubeOnly specifies certificate usage metadata // that limits certificate to be only used for kubernetes proxying UsageKubeOnly = "usage:kube" // UsageAppOnly specifies a certificate metadata that only allows it to be // used for proxying applications. UsageAppsOnly = "usage:apps" // UsageDatabaseOnly specifies certificate usage metadata that only allows // it to be used for proxying database connections. UsageDatabaseOnly = "usage:db" // UsageWindowsDesktopOnly specifies certificate usage metadata that limits // certificate to be only used for Windows desktop access UsageWindowsDesktopOnly = "usage:windows_desktop" // UsageLinuxDesktopOnly specifies certificate usage metadata that limits // certificate to be only used for Linux desktop access UsageLinuxDesktopOnly = "usage:linux_desktop" // UsageAccessGraphAPIOnly specifies certificate usage metadata that limits // certificate to be only used for Access Graph API access. UsageAccessGraphAPIOnly = "usage:access_graph_api" ) // ErrNodeIsAmbiguous serves as an identifying error string indicating that // the proxy subsystem found multiple nodes matching the specified hostname. var ErrNodeIsAmbiguous = &trace.NotFoundError{Message: "ambiguous host could match multiple nodes"} const ( // NodeIsAmbiguous serves as an identifying error string indicating that // the proxy subsystem found multiple nodes matching the specified hostname. // TODO(tross) DELETE IN v20.0.0 // Deprecated: Prefer using ErrNodeIsAmbiguous NodeIsAmbiguous = "err-node-is-ambiguous" // MaxLeases serves as an identifying error string indicating that the // semaphore system is rejecting an acquisition attempt due to max // leases having already been reached. MaxLeases = "err-max-leases" ) const ( // OpenBrowserLinux is the command used to open a web browser on Linux. OpenBrowserLinux = "xdg-open" // OpenBrowserDarwin is the command used to open a web browser on macOS/Darwin. OpenBrowserDarwin = "open" // OpenBrowserWindows is the command used to open a web browser on Windows. OpenBrowserWindows = "rundll32.exe" // BrowserNone is the string used to suppress the opening of a browser in // response to 'tsh login' commands. BrowserNone = "none" ) const ( // WaitSubCommand is the sub-command Teleport uses to wait // until a domain name stops resolving. Its main use is to ensure no // auth instances are still running the previous major version. WaitSubCommand = "wait" // VnetAdminSetupSubCommand is the sub-command tsh vnet uses to perform // a setup as a privileged user. VnetAdminSetupSubCommand = "vnet-admin-setup" ) const ( // ChanDirectTCPIP is an SSH channel of type "direct-tcpip". ChanDirectTCPIP = "direct-tcpip" // ChanForwardedTCPIP is an SSH channel of type "forwarded-tcpip". ChanForwardedTCPIP = "forwarded-tcpip" // ChanSession is an SSH channel of type "session". ChanSession = "session" ) const ( // SFTPSubsystem is the SFTP SSH subsystem. SFTPSubsystem = "sftp" ) // A principal name for use in SSH certificates. type Principal string const ( // The localhost domain, for talking to a proxy or node on the same // machine. PrincipalLocalhost Principal = "localhost" // The IPv4 loopback address, for talking to a proxy or node on the same // machine. PrincipalLoopbackV4 Principal = "127.0.0.1" // The IPv6 loopback address, for talking to a proxy or node on the same // machine. PrincipalLoopbackV6 Principal = "::1" ) // UserSystem defines a user as system. const UserSystem = "system" const ( // internal application being proxied. AppJWTHeader = "teleport-jwt-assertion" // HostHeader is the name of the Host header. HostHeader = "Host" // XTeleportUsernameHeader is the name of the X-Teleport-Username header // used to pass the username to the Access Graph service. // This header is used to identify the user that is making the request // so that the Access Graph service can store information about the // user's preferences. XTeleportUsernameHeader = "X-Teleport-Username" ) // UserSingleUseCertTTL is a TTL for per-connection user certificates. const UserSingleUseCertTTL = time.Minute // StandardHTTPSPort is the default port used for the https URI scheme, // cf. RFC 7230 § 2.7.2. const StandardHTTPSPort = 443 const ( // KubeSessionDisplayParticipantRequirementsQueryParam is the query parameter used to // indicate that the client wants to display the participant requirements // for the given session. KubeSessionDisplayParticipantRequirementsQueryParam = "displayParticipantRequirements" // KubeSessionReasonQueryParam is the query parameter used to indicate the reason // for the session request. KubeSessionReasonQueryParam = "reason" // KubeSessionInvitedQueryParam is the query parameter used to indicate the users // to invite to the session. KubeSessionInvitedQueryParam = "invite" ) const ( // KubeLegacyProxySuffix is the suffix used for legacy proxy services when // generating their names Server names. KubeLegacyProxySuffix = "-proxy_service" ) const ( // DebugServiceSocketName represents the Unix domain socket name of the // debug service. DebugServiceSocketName = "debug.sock" ) const ( // OktaAccessRoleContext is the context used to name Okta Access role created by Okta access list sync OktaAccessRoleContext = "access-okta-acl-role" // OktaReviewerRoleContext is the context used to name Okta Reviewer role created by Okta Access List sync OktaReviewerRoleContext = "reviewer-okta-acl-role" ) const ( // EnvVarUnstableDisableSAMLRedirectDowngradeCheck allows disabling saml_connector // entity_descriptor_url check preventing following redirects via HTTP originating from // HTTPS route. EnvVarUnstableDisableSAMLRedirectDowngradeCheck = "TELEPORT_UNSTABLE_DISABLE_SAML_REDIRECT_DOWNGRADE_CHECK" // EnvVarUnstableForceInBandMFA is the environment variable that, when set to "yes", disables the legacy out-of-band // MFA flow and forces all connections to use in-band MFA. When unset or empty, both flows are supported during the // transition period. // // TODO(cthach): Remove in v20.0 when the legacy out-of-band MFA flow is removed and in-band MFA is the default. EnvVarUnstableForceInBandMFA = "TELEPORT_UNSTABLE_FORCE_IN_BAND_MFA" )