# SailPoint Linux Connector Documentation > Linux Connector Documentation # Documentation # Connecting SailPoint and Linux To connect SailPoint with Linux, perform the following tasks: ## Adding the Source in SailPoint To connect to SailPoint, perform the following steps. Once the connection is made, you can configure it to meet your company's needs. > [!IMPORTANT] > > By default, the provisioning feature is **disabled**, and the connector only supports read-only operations. To support provisioning operations, you must manually enable the feature in the source configuration. **To configure a new source:** 1. Sign in to SailPoint. 2. Go to **Admin \> Connections \> Sources**. 3. Select **Create New**. 4. Search for the connector by entering the name in the search box, and then select **Configure**. 5. In the **Source Name** field, enter a unique and descriptive name for your source. Source names cannot exceed 128 characters. 6. In the **Description** field, provide additional details about the source to help distinguish it from similar sources. This field allows a maximum of 2,000 characters. 7. In the **Source Owner** field, begin typing the name of an owner. Matches appear after you type two or more letters. For more information, refer to [Assigning a Source Owner](). 8. Under **Connection Type**, select **Direct Connection** or **Flat File**. - **Direct Connection** - A direct connection fetches data from the **Virtual Appliance Cluster** you choose as the application connector for the source. A direct connection configuration allows for real-time updates. For more information about configuring and deploying virtual appliances, refer to the [Virtual Appliance Reference Guide](). - **Flat File** - Select the flat file if no connector is available, or if another system restricts the connection. This option allows only reading and aggregating data as a generic/delimited application. Provisioning activity is unsupported, and additional configuration pages like connection settings and aggregation settings are unavailable. 9. If you selected **Direct Connection**, in **Virtual Appliance Cluster**, select the virtual appliance cluster that will be used as the application connector for the source. 10. (Optional) Select a governance group to grant its members [source]() or [role]() sub-admin level oversight of the source and its access. For more information, refer to [Creating and Managing Governance Groups](). 11. If this source represents a primary system containing your organization's personnel records, select the **Authoritative Source** checkbox. For more information, refer to [Creating Identity Profiles](). 12. Select **Continue**. The source is created, and you are navigated to the **Source Setup \> Base Configuration** page. Continue to configure your connected source there. ## Base Configuration Provide the base configuration parameters. Information you entered in the Create New Source dialog is automatically entered into the fields in the Base Configuration page. You can edit this information if necessary. 1. Enter a unique name and description for the source. 2. In the **Source Owner** dropdown list, select the identity that owns this source. - To find a source owner, begin entering their name. 3. In the **Virtual Appliance Cluster** dropdown list, select the virtual appliance to use when communicating with your organization's systems. For more information, refer to [SailPoint Virtual Appliances](). 4. (Optional) If enabled for your organization, select the **Use a Credential Provider** checkbox to manage the source's authentication using a credential provider. > **Note** > > To add a credential provider, go to **Admin \> Connections \> Credential Providers**. For more information about credential providers, refer to [Credential Providers](). 5. Configure the authentication to allow SailPoint to connect to the source. Refer to [Connection Settings](<#connection-settings>) for more information. 6. (Optional) In the **Governance Group for Source Management** dropdown list, select a governance group to associate with this source. For more information about governance groups, refer to [Associating Governance Groups with a Source](). 7. (Optional) Choose whether to enable or disable provisioning for the source. Provisioning is disabled by default. - **Enable Provisioning** - Set the toggle to **Enabled** to allow the source to create, update, and deactivate accounts in the connected source system. - **Disable Provisioning** - Set the toggle to **Disabled** to disable provisioning for the source. Disabling provisioning will prevent the creation, updating, or deactivating of accounts on this source. 8. Select **Save**. ## Connection Settings This section contains the information that the source uses to connect to and authenticate with the Linux managed system. After you select **Connection Settings**, the following page displays. > [!NOTE] > > **Screenshot** > > [![Connection Settings]()]() 1. In the **Unix Server Host** field, enter the Hostname/IP address of the computer. 2. In the **SSH Port** field, enter the configured SSH port. Default value: `22`. 3. In the **Username** field, enter the User ID of the machine conducting connector operations. If the specified User ID is not a root user, select the **Sudo User** checkbox. 4. In the **Password** field, enter the associated password for the User ID. 5. (*Optional*) In the **Set Prompt** field, enter the prompt that must be set up on the Linux system. 6. (*Optional*) In the **SSH Shell** field, enter the Linux Shell on which operation must be performed. > **Note** > > The default command for setting the shell prompt on the UNIX computer is: > > `` If the command for setting a shell prompt is different than the default command, change the value of the source attribute. > [!NOTE] > > - The Linux source is enhanced to prevent shell injection attacks. > - For the Linux source, if the wrong re-enter password is configured in the debug, a wrong password entry prompts an error message along with the end user's password on the UI and in the log files. Previously, these sources did not display passwords on the UI or in the log files. ## Additional Settings This section contains the information that the source requires to configure the other required parameters. After you select **Additional Settings** the following page displays. > [!NOTE] > > **Screenshot** > > [![Additional Settings]()]() 1. The Linux source only supports the SFTP file transfer protocol used during aggregation. 2. Enter the command as follows to enable the account: `passwd -u` 3. In the **Get Lock Status Command** field, set the command used to get the status of all locked user accounts. Default: `pam_tally2 | awk '{print $1} {print $2}'` 4. In the **Get Login Limit Command** field, set the command used to get the count limit of user logins. Default: `cat /etc/pam.d/system-auth` 5. In the **Unlock Account Command**, set the command used to unlock a user account. Default: `pam_tally2 -u` 6. In the **Get Account Failed Login Count Command** field, set the command used to obtain the count for failed login accounts. Default: `pam_tally2` > [!NOTE] > > The Linux source allows you to change the disable account attribute value to the `usermod -s /bin/false` command. ### Disable Accounts Password Change In the Linux source, you can deny **change password** operations for disabled accounts. You can reject the password change if the account is locked. You can use the REST API to enable the `denychangepassword` attribute for a disabled account as follows: `POST /api/source/update/` where: - `` is the URL for the customer's SailPoint instance - `` is the Source ID (number) obtained through the UI In the body of the POST, use the form-data as follows: - **Key** - `connector_denyChangePasswordForDisabledAccount` - **Value** - `true` ## Review and Test Perform a test to confirm the connection to SailPoint. 1. Go to **Review and Test**. 2. Confirm that the entries in each field are correct. If you note any mistakes, return to the section and make corrections. 3. Select **Test Connection**. ## SailPoint Application Onboarding SailPoint application onboarding enables you to easily onboard new applications and create sources following the successful onboarding of a discovery source. To use this feature, continue to **Discovered Applications** in the SailPoint user interface. For more information, refer to [Application Onboarding]() in the SailPoint SaaS documentation. # Integrating SailPoint with Linux Connecting SailPoint to your Linux system allows you to enable user to manage their Linux Account, Groups, and other resources. Linux system data is aggregated and users can edit entities and their attributes. > [!IMPORTANT] > > The Linux connector no longer supports the Ubuntu 16.04 LTS version. > [!NOTE] > > To view the latest features, enhancements, and fixes for all SaaS connectors, refer to the [SaaS Release Notes]() page. ## Supported Features > [!NOTE] > > Before you can use any item marked with an asterisk (\*), SailPoint must activate the feature for your site. The SailPoint Linux connector supports the following features. - Load and \*provision Linux accounts - \*Access Certifications (certification of entitlements connected to accounts) - \*Password management - Delete accounts For more information on features, refer to [Source Features](). ### Privilege Classification SailPoint Privilege Classification helps organizations systematically categorize and manage the privilege levels of entitlements within their sources. By classifying entitlements as high, medium, or low, administrators can better understand the potential risk and impact associated with specific access rights. This allows automatic assignment of privilege levels based on system recommendations, custom-defined criteria, or a same level across all entitlements. | Privilege Level | Description | | --- | --- | | High | Administrative level access to accounts | | Medium | Administrative level access for a specific role or function | | Low | Only basic access of data | > [!NOTE] > > To manage Privilege Classification, users must have administrative roles such as Org Admin, Source Admin or Source Sub-Admin. For more information, refer to [Managing Privilege Classification](). ## Supported Managed Systems The Linux connector supports the following managed system versions: - Ubuntu OS versions 20.04 and 22.04 LTS - Red Hat Enterprise Linux versions 8.5, 8.8, 9.1, and 9.2 - SUSE Linux Enterprise Server 15, 12, and 11 - Federal Information Processing Standard (FIPS) support with Red Hat Enterprise Linux version 9.2 > [!NOTE] > > For any issues related to SUSE Linux, refer to the [Troubleshooting]() section. ## Prerequisites - Configure at least one virtual appliance cluster and successfully test the connection. For more information, refer to the [Virtual Appliance Reference Guide](). Consider the following before configuring the Linux connector. - SSH should be installed on the Linux computer - Aggregate the sudo user's permissions: - The administrator user must have rights to execute the `/usr/bin/awk` command. Update the `/etc/sudoers` file entry for the administrator user with the `/usr/bin/awk` command. - Add new multi-valued schema attributes to the accounts and entitlement schemas as `sudoCommands`, which collect all the necessary user commands and stores them as a part of the attribute. - If you need to aggregate the `sudoCommands` from multiple sudo files, then you must provide a list of files as a separate configuration attribute. Separate each sudo file in the command with a comma (`,`). For example: - key - `sudoCmdFiles` - value - `/etc/sudoers.d/special_user.conf,/etc/sudoers.d/special_group.conf` The default command which collects the sudo commands is as follows: ```text awk '/^[^#]/' /etc/sudoers ``` In the above command, the commented lines are skipped and the remaining content of the `/etc/sudoers` file are aggregated in to a temporary file on the Linux computer. If you want to provide a new command for aggregating file data, then you can configure it as a part of the application XML file. For example: ```text key: sudoUserCommand and value : awk '/^[^#]/' /etc/sudoers ``` - For Red Hat Enterprise Linux version 9.1 and later, ensure that service account has **Bracketed paste mode** disabled. To disable the bracketed paste mode for a specific user, add the following line to `~/.inputrc`: ```text set enable-bracketed-paste off ``` ## Required Permissions - You can use a root user for managing your applications, however SailPoint recommends that you use a minimum permission user. For example, configure a sudo user to manage your applications. - If you want to use a sudo user to perform the operations, you must configure the sudo user with the rights and permissions to execute the following commands: ```text /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/sbin/groupadd, /usr/sbin/groupmod, /usr/sbin/groupdel, /usr/bin/passwd, /usr/bin/faillog, /usr/bin/groups, /bin/rm -f spt_tmp_*, /bin/echo, /usr/bin/chage, /bin/cat /etc/shadow, /bin/cat /etc/passwd, /bin/cat /etc/group, /bin/cat /etc/pam.d/system-auth, /usr/bin/getent, /bin/grep, /usr/bin/awk, /usr/bin/id, /usr/bin/lastlog, /usr/sbin/pam_tally2, /sbin/pam_tally2, /bin/cat /etc/pam.d/password-auth, /bin/cat /etc/pam.d/common-account, /bin/cat /etc/pam.d/common-auth, /usr/bin/printf, /usr/sbin/faillock, /bin/cat /etc/security/faillock.conf ``` An entry in `/etc/sudoers` file must look similar to the following: ```text username ALL = (root) PASSWD: /bin/chmod, /usr/sbin/useradd, /usr/sbin/usermod, /usr/sbin/userdel, /usr/sbin/groupadd, /usr/sbin/groupmod, /usr/sbin/groupdel,/usr/bin/passwd, /usr/bin/faillog, /usr/bin/groups, /bin/rm -f spt_tmp_*, /bin/echo, /usr/bin/chage, /bin/cat /etc/shadow, /bin/cat /etc/passwd, /bin/cat /etc/group, /bin/cat /etc/pam.d/system-auth, /usr/bin/getent, /bin/grep, /usr/bin/awk, /usr/bin/id, /usr/bin/lastlog, /usr/sbin/pam_tally2, /sbin/pam_tally2, /bin/cat /etc/pam.d/password-auth, /bin/cat /etc/pam.d/common-account, /bin/cat /etc/pam.d/common-auth, /usr/bin/printf, /usr/sbin/faillock, /bin/cat /etc/security/faillock.conf ``` > **Note** > > - All commands mentioned above are for the default configuration. If any of the commands are modified in the application definition, then you should also make similar changes in the `/etc/sudoers` file entry. > - Verify the command paths on Linux computers as they might differ from the values mentioned here. > - If you want to use a sudo user to handle provisioning operations, ensure that you grant them the proper write access for the home directory. If the sudo user is using the Guest home directory, then ensure it has proper write access for that directory as well. > - `/bin/chmod` permission is not required as SailPoint Linux connector does not support target collector. ### Read Only Permissions If you want to use the sudo user to perform read only operations, the sudo user must be configured with the following rights and permissions: > [!NOTE] > > **For Account Aggregation only** > > Rights to execute the following commands with root privilege: > > ```text > /bin/echo, /bin/cat /etc/group, /bin/rm -f spt_tmp_*, /bin/cat /etc/passwd, > /bin/grep, /bin/cat /etc/shadow, /bin/cat /etc/pam.d/system-auth, /bin/cat > /etc/pam.d/password-auth, /usr/bin/faillog, > /usr/sbin/pam_tally2, /sbin/pam_tally2, /usr/bin/lastlog, /usr/bin/awk, > /usr/sbin/faillock, /bin/cat /etc/security/faillock.conf > ``` > > > **Note** > > > > For a Linux server configured with `pam_tally2` and `Faillock`, the following permissions are required: > > > > - **pam\_tally2** - `/usr/sbin/pam_tally2`, `/sbin/pam_tally2` > > - **Faillock** - `/usr/sbin/faillock`, `/bin/cat /etc/security/faillock.conf` > > An entry in `/etc/sudoers` file must look similar to the following: > > ```text > username ALL = (root) PASSWD: /bin/echo, /bin/cat /etc/group, /bin/rm -f spt_tmp_*, /bin/cat /etc/passwd, /bin/grep, /bin/cat /etc/shadow, /bin/cat /etc/pam.d/system-auth, /bin/cat /etc/pam.d/password-auth, /usr/bin/faillog, /usr/sbin/pam_tally2, /sbin/pam_tally2, /usr/bin/lastlog, /usr/bin/awk > ``` > [!NOTE] > > **For Entitlement Aggregation only** > > Rights to execute the following commands with root privilege: > > ```text > /bin/echo, /bin/ cat /etc/group, /bin/rm -f spt_tmp_*, /bin/grep > ``` > > An entry in `/etc/sudoers` file must look similar to the following: > > ```text > username ALL = (root) PASSWD: /bin/echo, /bin/ cat /etc/group, /bin/rm -f spt_tmp_*, /bin/grep > ``` > > > **Note** > > > > If any of the commands are modified in the application definition, then you should also make similar changes in the `/etc/sudoers` file entry. Verify the command paths on Linux computers as they might differ from the values mentioned here. > [!NOTE] > > **For Test Aggregation only** > > Add below permission for read operations only like (Test, Connection, Account Aggregation, Group Aggregation and single account aggregation): > > ```text > newuser1 ALL= PASSWD: /usr/bin/awk, /bin/rm -f spt_tmp_*, /bin/cat /etc/shadow, /bin/cat /etc/passwd, /bin/cat /etc/group, /bin/grep, /bin/echo > ``` ### Supported Authentication Methods The Linux connector supports username and password authentication for root and sudo users. ## Upgrade Considerations This page provides information you need to consider when using different versions of SailPoint. ### 2023 > [!NOTE] > > **December** > > Linux does not support SCP transport protocol, and instead recommends that you use SFTP. Where applicable, new Linux sources have SFTP protocol selected by default. However, if your organization requires it, you can select SCP. There is no negative impact on existing sources which use SCP. # Machine Account Attributes Machine account attributes are used in provisioning configurations for machine accounts. After you have [created the required machine account subtypes](), you can use the machine account attributes to provision machine accounts in your SailPoint tenant. Refer to [Machine Identity Security Overview]() for more information. > [!NOTE] > > Attributes marked with an asterisk (\*) are mandatory. ## Machine Account Provisioning Attributes | Create Account Attribute | Description | | --- | --- | | username\* | The username for the account. | | password\* | The password for the account. | # Provisioning The Linux connector supports provisioning, allowing you to create and manage accounts and entitlements in Linux directly from SailPoint. **Prerequisite:** Your system is configured for provisioning. When SailPoint provisions new accounts to the source, it uses the attributes on the **Create Account** page as instructions or a template for what to include in the account. This page is also referred to as the *provisioning policy*. When new access is granted on a source where a user does not already have an account, SailPoint automatically includes account creation in the provisioning. This applies whether provisioning is started from an access request or from an automated role or lifecycle state assignment. For direct-connect sources, SailPoint automatically creates the account from this configuration. If the source is not configured as a direct-connect source, SailPoint creates and assigns a provisioning task to the source owner and includes the values for the source owner to use in manually creating the account. > [!IMPORTANT] > > This section describes the default **Create Account** configuration. SailPoint recommends that you work with Services to define a provisioning configuration specific to your company's needs. Be sure to verify large changes to the provisioning policy before implementation. Failure to do so might cause provisioning to fail. ## Default Create Account Attributes | Account Attribute | Description | | --- | --- | | username | Provided by the user when they log in. | | uid | Each user must be assigned a user ID (UID). UID `0` (zero) is reserved for the root. UIDs `1`-`99` are reserved for other predefined accounts. Further, UIDs `100`-`999` are reserved by the system for administrative and system accounts. | | home | The absolute path to the directory the user will be in when they log in. | | pwdlastchg | Number of days since Jan 1, 1970 that password was last changed | | pwdmin | The minimum number of days required between password changes. In other words, this is the number of days left before the user is allowed to change their password. | | pwdmax | The maximum number of days the password is valid, after which the user is forced to change their password | | pwdwarn | The number of days before a password is to expire that user is warned that their password must be changed | | comment | General text field where you can provide a description | | expiration | Days since Jan 1, 1970 that account is disabled. This is an absolute date specifying when the login may no longer be used. | | inactive | The number of days after a password expires that account becomes disabled | | lastlogin | Last login date and time of the account | | primgrp | Name of the user's primary group | | groups | Secondary groups of user | | shell | User's shell | | crthomedir | Connection to home directory | | lastlog | The last login details | | dupuid | The duplicate user ID | | forcepwdchg | Specify if user has to be forced to change password on next login | | password | This generator creates an initial password for the new account adhering to the password policy assigned to the associated Linux source in SailPoint. | # Schema Reference The application schema is used to configure the objects returned from a connector. > [!NOTE] > > - The **Account Schema** tab is used to define the attributes for each object type in the application being configured. The schema attributes can be defined as **Entitlement** or **Multi-Valued**. Refer to [Managing Source Account Schemas]() for more information. > - The schema attributes that are not present by [default](<#default-account-schema>) must be defined as strings if not specified. The Linux connector uses the following default correlation and object configurations. ## Default Account Schema Each source supports a variety of details, or attributes, about each user who has an account, such as their name, email address, manager name, and location. The set of account attributes each source stores and how they're organized is known as the account's *schema*. To best represent your data, you can configure sources to use an account schema matching the one you use in the external connector. Refer to [Managing Source Account Schemas]() for more information. ### Default Account ID SailPoint requires that certain attributes remain in your configuration. These attributes are referred to as *account IDs*. > [!CAUTION] > > Changing the attribute marked as the account ID after aggregating accounts can result in duplicate accounts being created. To avoid this, either reset the accounts on this source before editing the account ID attribute or edit the account ID attribute before aggregating accounts. > > To resolve issues caused by changing account IDs, reconfigure them to their default values. The following table lists the default account IDs for this connector: | Account ID | Schema Object Type | | --- | --- | | username | Account | | name | Group | ## Classification of Accounts The Linux connector has been enhanced with a new capability to differentiate between system users and regular users. This feature allows for precise management and control over user accounts. To use this feature, follow these steps to configure your system. 1. **Modify the Account Schema:** - Add a new attribute named `isSystemuser` to your account schema. - Ensure that the attribute type is set to string. This will flag whether an account is a system user. 2. **Update Source XML Configuration:** - Add a new attribute called `systemUsersUidRange` within the source XML configuration. - This attribute should contain a list of User Identifiers (UIDs) that you want to categorize as system accounts. By specifying these UIDs, the system automatically recognizes and treats them as system users, applying any relevant policies or restrictions accordingly. ```text [ { "op": "add", "path": "/connectorAttributes/systemUsersUidRange", "value": ["0-999", "1001"] } ] ``` In this configuration snippet, `0` signifies the minimum UID, and `999` the maximum, with a `-` symbol as the separator. This range defines the spectrum of system users, from the lowest to the highest UID within the specified range. The second entry `1001` signifies a standalone UID. ## Default Entitlement Attributes Entitlement attributes define the entitlements, such as groups or roles, that can be assigned to the managed system's user accounts. Refer to [Managing Entitlements]() for more information. > [!CAUTION] > > Changing the attribute marked as the Entitlement ID after aggregating accounts or entitlements can result in duplicate entitlements being created, or access profiles and roles breaking. To avoid this, edit the entitlement schema before performing any aggregations. ### Default Group Attributes The Linux connector also supports groups. The following attributes must be configured on the managed system and in the SailPoint source schema to manage groups. | Attribute Name | Description | | --- | --- | | groupid | GID. Each user must be assigned a group ID. You can see this number in your `/etc/group` file. | | name | The name of group. If you run the `ls -l` command, you will see this name printed in the group field. | # Enable Connector Logging This topic provides the steps needed to enable logging on SailPoint using REST APIs. > [!NOTE] > > This topic only applies to VA-based integrations. > [!NOTE] > > The examples provided might not match your configuration. Use the logging levels and logging classes reference at the bottom of the topic to configure your API responses to match your connector. This process is broken up into four steps: 1. Identify the Virtual Appliance (VA) cluster on which you want to enable logging. 2. Get the logging configuration for the existing VA cluster. 3. Update the VA cluster to enable logging levels. 4. Observe logging changes to the logging levels. ### Identify the Virtual Appliance Cluster Select the VA on which you need to enable logging using REST API. If you already know the VA application's `id`, proceed to [Get the Logging Configuration](<#get-the-logging-configuration>). 1. Make the following call to the REST API to return a list of available VA clusters: GET /v3/managed-clusters The REST API returns a response that looks similar to the following: ```json [ { "id": "2c9180866166b5b0016167c32ef31a66", "name": "Development Cluster", "description": "Development Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": null }, { "id": "2c9180846a93ce60016ab29f039944de", "name": "Cloud Cluster", "description": "Cloud Cluster", "clientType": "CCG", "ccgVersion": "373_535_70.2.0", "pinnedConfig": true, "logConfiguration": { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } } ] ``` > **Note** > > The previous example code shows two VA clusters. One VA cluster has a log configuration and the other does not (refer to the `logConfiguration` value in each returned VA cluster). This is because one of the clusters already has logging enabled. This is just an example configuration, and your environment may not have logging enabled on a cluster. 2. Identify the VA cluster that you want to enable logging on by its name or description and record its `id` attribute. ### Get the Logging Configuration Get your selected VA's cluster logging configuration and identify the values you need to update. 1. Make the following call to the REST API to return the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. GET /v3/managed-clusters/{id}/log-config - If the VA doesn't have a logging configuration currently set, it returns `204 No Content` as a response. - If the VA has an existing logging configuration, it returns something similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` You'll need to configure the following information in the response: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). ### Update Logging Configuration Update the VA cluster configuration returned by the REST API to update the logging settings as needed. 1. Make the following call to the REST API to update the VA cluster's logging configuration. Replace `{id}` with the VA cluster's `id` attribute value recorded earlier. PUT /v3/managed-clusters/{id}/log-config 2. Submit your configuration changes to the REST API in a JSON body. - If the VA cluster did not already have a logging configuration and you received a `204 No Content` response, you can create a new one. - If the VA returned a configuration, you can edit it to include the changes. The JSON body should be as follows: ```json { "durationMinutes": 60, "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` Consider the following as you edit the JSON: - `durationMinutes` is the number of minutes logging should remain enabled. - `rootLevel` is the default level for all logs. For more information, refer to [Logging Levels](<#logging-levels>). - `logLevels` is a map object with logging classes as keys and logging levels as values. - For keys, refer to [Logging Classes](<#logging-classes>) for commonly used logging classes. - For a list of available values, refer to [Logging Levels](<#logging-levels>). If the update was successful, the REST API should return a response similar to the following: ```json { "clientId": null, "durationMinutes": 60, "expiration": "2020-12-15T19:13:36.079Z", "rootLevel": "DEBUG", "logLevels": { "sailpoint.connector.ADLDAPConnector": "DEBUG" } } ``` ### Observe Logging Changes Approximately five minutes after you update the configuration, the VA cluster starts generating log files you can review. You can view the log files in **ccg.log**. ### References The tables in this reference section list information that can be helpful when creating the JSON body you'll use to configure the VA cluster's configuration file. #### Logging Levels | Logging Level | Description | | --- | --- | | ERROR | Designates error events that might still allow the connector to continue. | | WARN | Designates potentially harmful situations. | | INFO | Designates information messages that highlight process at a coarse-grain level. | | DEBUG | Very verbose. Fine grain logging levels used for development and debugging. | | TRACE | Most verbose. Finer grain logging levels than debugging. | #### Logging Classes | Connector | Logging Class | | --- | --- | | Active Directory | sailpoint.connector.ADLDAPConnector sailpoint.connector.LDAPConnector | | AIX | openconnector.connector.unix.AIXConnector openconnector.connector.unix.UnixConnector | | Amazon Web Services | logger.aws.name=openconnector.connector.aws logger.aws.level=trace logger.aws.additivity = false logger.aws.appenderRef.rolling.ref = STDOUT | | Atlassian Suite Cloud | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianConnector | | Atlassian Data Center | sailpoint.connector.OpenConnectorAdapter openconnector.connector.atlassian.AtlassianDataCenterConnector | | Microsoft Entra ID | sailpoint.connector.AzureADConnector | | Box | openconnector.connector.BoxNetConnector sailpoint.connector.OpenConnectorAdapter | | Cerner | openconnector.connector.CernerConnector sailpoint.connector.OpenConnectorAdapter | | Delimited File | logger.DelimitedFileConnector.name = sailpoint.connector.DelimitedFileConnector logger.DelimitedFileConnector.level = debug logger.DelimitedFileConnector.additivity = false logger.DelimitedFileConnector.appenderRef.rolling.ref = STDOUT | | Dropbox | openconnector.connector.DropBoxConnector sailpoint.connector.OpenConnectorAdapter | | Epic | openconnector.connector.EPICConnector sailpoint.connector.OpenConnectorAdapter | | GE Centricity | openconnector.connector.GECentricity sailpoint.connector.OpenConnectorAdapter | | Google Apps / G Suite | openconnector.connector.GoogleAppsDirect sailpoint.connector.OpenConnectorAdapter | | IBM i | openconnector.connector.IBMiConnector | | Lotus Domino | sailpoint.connector.LotusDomino | | JDBC | sailpoint.connector.JDBCConnector | | Sun One LDAP | sailpoint.connector.LDAPConnector | | Linux | openconnector.connector.unix.LinuxConnector sailpoint.connector.OpenConnectorAdapter sailpoint.connector.UnixConnector | | Microsoft Office365 | sailpoint.connector.Office365Connector | | Microsoft SQL Server | sailpoint.connector.mssql.serviceimpl.MSSQLServerConnectorV2 | | Okta | logger.openconnector.name = openconnector.connector.okta.OktaConnector logger.openconnector.level = debug logger.openconnector.additivity = false logger.openconnector.appenderRef.rolling.ref = STDOUT | | Oracle Database | sailpoint.connector.OracleDBConnector sailpoint.connector.JDBCConnector | | Oracle E-Business | sailpoint.connector.OracleEBSConnector sailpoint.connector.JDBCConnector | | Oracle Fusion HCM | openconnector.connector.oraclefusionhcm.OracleFusionHCMConnector sailpoint.connector.OpenConnectorAdapter | | Oracle HCM Cloud | sailpoint.connector.oraclehcmcloud.OracleHCMCloudConnector | | Oracle HRMS | sailpoint.connector.OracleAppsHRMSConnector sailpoint.connector.JDBCConnector | | Oracle Netsuite | openconnector.connector.netsuite.NetsuiteConnector | | PeopleSoft ERP | openconnector.connector.PeopleSoftConnector sailpoint.connector.OpenConnectorAdapter | | PeopleSoft HRMS | sailpoint.connector.PeopleSoftHRMSConnector | | RemedyForce | sailpoint.connector.ForceConnector | | RSA Authentication Manager | openconnector.connector.RSAConnector openconnector.connector.rsa.RSAHTTPClient sailpoint.connector.OpenConnectorAdapter | | Salesforce | sailpoint.connector.ForceConnector | | SAP Concur | openconnector.connector.sapconcur.SAPConcurConnector | | SAP - Direct | sailpoint.connector.SAPConnector sailpoint.connector.SAPInternalConnector | | SAP GRC | logger.SAPGRCConnector.name = sailpoint.connector.sapgrc logger.SAPGRCConnector.level = debug logger.SAPGRCConnector.additivity = false logger.SAPGRCConnector.appenderRef.rolling.ref = STDOUT | | SAP HR/HCM | sailpoint.connector.SAPHRInternalConnector | | SCIM 1.1 | openconnector.connector.SCIMConnector sailpoint.connector.OpenConnectorAdapter | | SCIM 2.0 | openconnector.connector.scim2.SCIM2Connector sailpoint.connector.OpenConnectorAdapter | | ServiceNow | openconnector.connector.servicenow.ServiceNowConnector openconnector.connector.servicenow.ServiceNowRestClient sailpoint.connector.OpenConnectorAdapter | | ServiceNow Service Desk Integration | openconnector.connector.servicedesk.ServiceNowServiceDeskConnector sailpoint.connector.OpenConnectorAdapter | | Siebel | openconnector.connector.SiebelConnector sailpoint.connector.OpenConnectorAdapter | | Snowflake | openconnector.connector.snowflake.SnowflakeConnector sailpoint.connector.OpenConnectorAdapter | | Solaris | openconnector.connector.unix.SolarisConnector openconnector.connector.unix.UnixConnector sailpoint.connector.OpenConnectorAdapter | | SuccessFactors | sailpoint.connector.SuccessFactorsConnector | | Sybase | sailpoint.connector.SybaseDirectConnector sailpoint.connector.JDBCConnector | | Webex | openconnector.connector.Webex sailpoint.connector.OpenConnectorAdapter | | Workday | openconnector.connector.WorkDay sailpoint.connector.OpenConnectorAdapter | | Workday Accounts | openconnector.connector.workdayaccounts openconnector.connector.workdayaccounts.WorkdayAccountsConnector sailpoint.connector.OpenConnectorAdapter | | Web Services | sailpoint.connector.WebServices | | XML | openconnector.connector.XMLConnector sailpoint.connector.OpenConnectorAdapter | | Yammer | openconnector.connector.YammerConnector sailpoint.connector.OpenConnectorAdapter | | Zoom | openconnector.connector.zoom.ZoomConnector sailpoint.connector.OpenConnectorAdapter | # Troubleshooting If you encounter any of the following issues or errors, SailPoint recommends that you follow the guidance provided below to resolve the error before contacting SailPoint Support. For issues or errors that are not addressed in this connector guide, refer to the following resources for troubleshooting information: - [SailPoint Identity Services Documentation]() - [SailPoint Support Knowledge Base]() - [SailPoint Developer Community]() ## Test connection and aggregation failing with Command failed. Status: `[?2004l0[?2004h`, Output: `[?2004h ]` Test connection and aggregation failing with below error - ```text Error in aggregation: java.lang.RuntimeException: [ InvalidResponseException ] [ Possible suggestions ] Make sure standalone command works with the UNIX terminal. The standalone command is - cat /etc/group | grep -v '^+' | grep -v '^-' [ Error details ] Command failed. Status: [?2004l0[?2004h , Output: [?2004h ``` **Resolution** - One of the possible reason could be of service account having Bracketed paste mode enabled. To disable the bracketed paste mode for a specific user, add the following line to `~/.inputrc`: ```text set enable-bracketed-paste off ``` ## Test Connection failed on SUSE computer with an error message Test connection failed on SUSE computer with the following error message: ```text [InvalidResponseException] [Possible Suggestion ]Make sure standalone command works with the UNIX terminal. The standalone command is - echo 'TestConnection'[Error details] Unexpected output captured. Host:xxx.xx.xx.xxx. Output: sword sudo: pam_authenticate: Module is unknown SAILPOINT> Password Sh: Password: command not found. ``` **Resolution** - When the test connection fails on the SUSE computer, the following setting must be changed in the `/etc/ssh/sshd_config` file: ```text PasswordAuthentication yes ``` Enter the following command to restart the `sshd` after updating the `sshd_config` file: ```text /etc/init.d/sshd restart ``` ## Password command failed with an error message Password command failed with the following error message: ```text sailpoint.connector.InvalidConfigurationException: [InvalidConfigurationException] [Possible suggestions] a) Make sure the provided password is correct as per the password policy defined on the UNIX machine. b) Make sure application configuration attribute 'PasswdPrompts' is set correctly. c) Tune the parameter 'sshWaitTime'. [Error details] Password prompt mismatch. Check the shell output for more details. ``` Password command fails if password prompts are not matching. **Resolution** - Verify the password command on the Linux computer for password prompts and confirm if the required prompts are present in your application. For example, `passwd Person2` Changing password for Person2: **New Password** - New Password is the prompt, so if this prompt is not present in your application, add or update it as follows: For example: ```text … … … .. .. … .. … ``` ## Aggregation or Test Connection fails with a timeout error Aggregation or Test Connection fails with the following timeout error: ```text Exception during aggregation of Object Type account on Application Reason: Unable to create iterator sailpoint.connector.TimeoutException: [TimeoutException] [Possible suggestions] Tune the parameter . [Error details] Timeout occurred while reading output stream for the executed command. ``` Test Connection fails with following timeout error: ```text [TimeoutException] [Possible suggestions] Tune the parameter . [Error details] Timeout occurred while reading output stream for the executed command. ``` **Resolution** - Change the value of the `sshWaitTime` application attribute (in millisecond) as per your requirement using the REST API: - **Key** - `connector_sshWaitTime` - **value** - `500` If setting `sshWaitTime` does not solve the issue, then connect to the Linux system using sudo user to check the system's behavior. For example, after executing the following command, it prompts for `%SAILPOINTSUDO` where you should enter the sudo user's password: ```text sudo -p %SAILPOINTSUDO echo TestConnection ``` For example, if the system prompts for the **CSO Password:**, set the following attribute using the REST API to understand that it should prompt for the sudo user's password: - **Key** - `connector_SudoPasswdPrompt` - **Value** - `` which is `CSO Password` ## Test Connection fails for key-based authentication with an error ### Test connection fails for key-based authentication with the following error while connecting to the host ```text Login failed. Error while connecting to host:. Cannot read key file. ``` **Resolution** - Perform the following steps to generate or convert private/public keys into a format supported by UNIX direct connectors: #### Generate keys using openssl. This method can be used for any version of SSH. 1. Create private key using the following command: ```text openssl -des3 -out 1024 ``` 2. Change the permission on the `` file as follows: ```text chmod 0600 ``` 3. Create public key from `private_key`: ```text ssh-keygen -y -f > ``` 4. Use the `` and `` files for authentication. #### Generate keys using ssh-keygen. For OpenSSH 5.8 or above. 1. Create private and public keys using the following command: ```text ssh-keygen -t -b 1024 ``` By default files with name `id_dsa/id_rsa` and `id_dsa.pub/id_rsa.pub` will be created. 2. Convert the `` to have the DES-EDE3-CBC encryption algorithm by using the following command: ```text openssl -in -out -des3 ``` 3. Change the permission on the `` file as follows: ```text chmod 0600 ``` 4. Create a public key file using the new private key as follows: ```text ssh-keygen -y -f > ``` 5. Use the `` and `` files for authentication. ### Test Connection fails for key-based authentication while configuring a RSA key with a FIPS-enabled Linux machine ```text Failed to authenticate provided ssh credentials to the host ``` **Resolution** - In RHEL FIPS mode, the system **ssh-keyscan** cannot retrieve server RSA keys. Ensure that you use **ECDSA** keys for public key authentication configuration. To create private and public keys, use the following command: ```text ssh-keygen -t ``` By default, files with the names; `id_ecdsa` and `id_ecdsa.pub` are created. Repeat the same steps as provided in the steps for generating keys. ## Enable user failed with an error Enable user failed with the following error: ```text sailpoint.connector.InvalidResponseException: [InvalidResponseException] [Possible suggestions] Make sure standalone command works with the UNIX terminal. The standalone command is - passwd -u "" [Error details] Command failed. Status: 254 , Output: Unlocking password for user . passwd: Warning: unlocked password would be empty. passwd: Unsafe operation (use -f to force). passwd: Unsafe operation (use -f to force) ``` **Resolution** - Update the following entry using the REST API: - **Key** - `connector_enable.account` - **Value** - `passwd -u -f` ## Test connection fails for SUSE Linux Test connection fails on SUSE Linux because Password Authentication was not enabled. ```text [InvalidConfigurationException] [Possible suggestions] Provide either publickey or password as an authentication method for the user. [Error details] No supported authentication methods found on the host XXX.XX.XX.XXX for user ``` **Resolution** - Perform the following steps to enable Password Authentication: 1. Change the value of Password Authentication from `no` to `yes` in `/etc/ssh/sshd_config` file as follows: ```text PasswordAuthentication no ``` To ```text PasswordAuthentication yes ``` 2. Restart the server using the following command: ```text /etc/init.d/sshd restart ``` ## Account Aggregation and Account provisioning displays an error for Lock/Unlock status **Resolution** - Perform the following: For RHEL 6.x and later: 1. Specify the maximum allowed failed login attempts before the account is locked by the system. Edit the configuration file pointed to by registry key: ```text ``` Default value - `/etc/pam.d/system-auth or /etc/pam.d/password-auth` Specify maximum allowed failed login using `deny=`. For example, add the following lines in `/etc/pam.d/system-auth` or `/etc/pam.d/password-auth`: ```text auth required pam_tally2.so onerr=fail deny=5 ``` ```text account required pam_tally2.so ``` 2. Ensure that the `pam_tally2` command, as required in the following registry key works correctly: ```text ``` 3. Ensure that the following command to get failed login works on the system: ```text ``` 4. Verify if unlock command specified in the registry correctly resets the failed login counter: Default settings - `` > [!NOTE] > > For RHEL versions prior to version, 6.0 where the `pam_tally2` module is not installed, replace `pam_tally2` with `faillog` in the above commands. ## Account Aggregation and Account Provisioning displays an incorrect user status During account aggregation and account provisioning, the user status is displayed as active for a Locked user when using the `pam_tally2` module for RHEL 8. **Resolution** - Perform the following: 1. Specify the maximum allowed failed login attempts before the account is locked by the system. Edit the configuration file pointed to by the registry key: ```text ``` **Default value** - `/etc/pam.d/system-auth` or `/etc/pam.d/password-auth` 2. Ensure that faillock command as required in the following registry key works correctly: ```text ``` 3. Ensure that the following command to get failed logins works on the system: ```text ``` 4. Verify if the unlock command specified in the registry correctly resets the failed login counter: ```text ``` **Default settings** - `` **Alternative:** **Resolution** - Specify the maximum allowed failed login attempts before the account is locked by the system. Edit the following configuration file pointed by registry key: ```text ``` If faillock is enabled using the **faillock.conf** file, use the following entry key: ```text ``` ## Test connection and aggregation failing with java.util.ConcurrentModificationException for credential provider enabled sources For sources with credential provider enabled, both test connection and aggregation fail with the following error: ```text java.util.ConcurrentModificationException ``` **Resolution**: Ensure that the source XML configuration includes the following entry: ```text ``` # Timeout Errors and Settings Timeout errors might occur when SailPoint is waiting for a response from the Virtual Appliance (VA). These errors are applicable to all connectors and tend to occur during the setup of sources or when sources are down. This document is designed to give specific information that can be used to resolve these errors. Each timeout attribute has a default time value that is listed in seconds or minutes. Increasing the time value may resolve the error as it will allow for longer communication time between the two systems, thus avoiding the timeout error. > [!IMPORTANT] > > Add the necessary attributes or values before performing the "replace" operation, as missing attributes will cause the operation to fail. To increase the communication time, increase the value of the appropriate timeout attribute. Then submit the change to the VA using the SailPoint REST API. > [!NOTE] > > For more information on SailPoint's REST APIs, refer to [Best Practices: REST API Authentication]() and [REST API - Update Source (Partial)]() in the SailPoint Developer Community. ### aggregateTimeout **Description:** This parameter is set for the aggregation timeout, measured in seconds. **Resolution:** Increase the `aggregateTimeout` value gradually to optimize aggregation. Start with 180, then increase to 600, 900, and finally 1800. The maximum value is 3600 seconds. For example: If your current time value is 180 seconds, update the `aggregateTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/aggregateTimeout", "value": 600 } ] ``` ### healthCheckTimeout **Description:** This parameter is set for the test connection and health check timeout. **Resolution:** The default value is 30 seconds. If the timeout error continues, increase the value in 15 second increments and try again. For example: If your current time value is 30 seconds, update the `healthCheckTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/healthCheckTimeout", "value": 45 } ] ``` ### provisioningTimeout **Description:** This parameter is set for provisioning timeout. **Resolution:** Increase the `provisioningTimeout` value gradually to optimize provisioning. Start with 180, then increase to 360, and finally 600. The maximum value is 600 seconds. For example: If your current time value is 180 seconds, update the `provisioningTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/provisioningTimeout", "value": 360 } ] ``` ### timeout **Description:** This parameter is set for pass-through authentication timeout. **Resolution:** The default value is 15 seconds. If the timeout error continues, increase this value in 15 second increments and try again. For example: If your current time value is 15 seconds, update the `timeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeout", "value": 30 } ] ``` ### apiTimeout **Description:** This parameter is set for API time tracking; customers can check it using an external tool. **Resolution:** The default value is 60 seconds. If the error continues, increase the value by 15 second increments and try again. For example: If your current time value is 60 seconds, update the `apiTimeout` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/apiTimeout", "value": "75" } ] ``` ### timeoutInSeconds **Description:** This parameter helps prevent the VA from waiting indefinitely for an API response, ensuring efficient handling of API requests. For example: If your current time value is 30 seconds, update the `timeoutInSeconds` attribute as follows: ```json [ { "op": "replace", "path": "/connectorAttributes/timeoutInSeconds", "value": "15" } ] ```