users
User promises are promises made aboutlocal users on a host. Theyexpress which users should be present on a system, and whichattributes and group memberships the users should have.
Every user promise has at least one attribute,policy, whichdescribes whether or not the user should be present on the system. Otherattributes are optional; they allow you to specify UID, home directory, loginshell, group membership, description, and password. Platform native tools areused to create/modify/delete users (C api on Windows, anduseraddusermoduserdel on Unix, Linux and similar platforms). User presence is determined bytheNetUserGetInfo function on Windows and reading/etc/passwd on Unix,Linux and similar platforms nix External/non-local for example LDAP are ignored.
A bundle can be associated with a user promise, such as when a user is createdin order to do housekeeping tasks in his/her home directory, like puttingdefault configuration files in place, installing encryption keys, and storinga login picture.
Note: This promise type does not create or delete groups (not even a usersprimary group). The groups the user is promised to be in need to be managedseparately.
History: Introduced in CFEngine 3.6.0
Example:
users:"jsmith"policy=>"present",description=>"John Smith",home_dir=>"/remote/home/jsmith",group_primary=>"users",groups_secondary=>{"printers","webadmin"},shell=>"/bin/bash";Attributes
Common attributes
Common attributes are available to all promise types. Full details for commonattributes can be found in theCommon promise attributes section ofthePromise types page. The common attributes are as follows:
action
classes
comment
depends_on
handle
if
unless
meta
with
description
Description: Thedescription string sets the descriptionassociated with a user.
The exact use of this string depends on the operating system,but most systems treat it as the full name of the user and thereforedisplay it on graphical login terminals.
Type:string
Allowed input range: (arbitrary string)
Example:
users:"jsmith"policy=>"present",description=>"John Smith";group_primary
Description: Thegroup_primary attribute sets the user's primary group.
Note: On Windows, no difference exists between primary andsecondary groups so specifying either one works.
Type:string
Allowed input range: (arbitrary string)
Example:
users:"jsmith"policy=>"present",group_primary=>"users";groups_secondary
Description: Thegroups_secondary attributes sets the user'ssecondary group membership(s), in addition to his/her primary group.
Note: On Windows, no difference exists between primary andsecondary groups so specifying either one works.
Type:slist
Allowed input range:.*
Example:
users:"jsmith"policy=>"present",groups_secondary=>{"site_a","tester"};home_bundle
Description: Thehome_bundle attribute specifies a bundle thatis evaluated when the user is created.
If the user already exists, the bundle is not evaluated.
The name of the promised user is not passed to the bundledirectly, but you can specify a bundle with parameters in order topass it in.
Note that this attribute does not set the home directory in the userdatabase. For that, you must use thehome_dir attribute.
Type:bundle
Example:
bundleagentmain{vars:"users"slist=>{"jack","john"};"skel"string=>"/etc/skel";users:!windows::"$(users)"policy=>"present",home_dir=>"/home/$(users)",home_bundle=>home_skel($(users),$(skel));}bundleagenthome_skel(user,skel){files:"/home/$(user)/."create=>"true",copy_from=>seed_cp($(skel)),depth_search=>recurse("inf");}This example uses implicit looping to create the two users, "jack"and "john." Each has his respective home directory that is created bythefiles promise.
home_bundle_inherit
Description: Thehome_bundle_inherit attribute specifies if classes setin the current bundle are inherited by the bundle specified in thehome_bundle attribute.
Type:boolean
Example:
bundleagentmain{vars:"user"string=>"jack";classes:"should_have_home_dir"expression=>regcmp("j.*","$(user)");users:"$(user)"policy=>"present",home_dir=>"/home/$(user)",home_bundle=>setup_home_dir("$(user)"),home_bundle_inherit=>"true";}bundleagentsetup_home_dir(user){files:should_have_home_dir::"/home/$(user)/."create=>"true";}The user "jack" will have his home directory created, since hisusername starts with "j".
home_dir
Description: Thehome_dir attribute associates a user with thegiven home directory.
Note that this attribute does not create the directory. For that youmust use thehome_bundle attribute. This just sets the homedirectory in the user database.
Type:string
Allowed input range:"?(/.*)
Example:
users:"jsmith"policy=>"present",home_dir=>"/home/j/jsmith";password
Description: Thepassword attribute specifies apassword bodythat contains information about a user's password.
Type:body password
Example:
bodypassworduser_password{format=>"hash";data=>"jiJSlLSkZuVLE";# "CFEngine"}See also:Common body attributes
format
Description: Specifies the format of the given password data.
If the value is "hash," then thedata attribute is expected tocontain a string with a password in hashed format. Note that CFEnginedoes not validate that the given hash format is supported bythe platform. The system administrator must verify this.However, CFEngine continues to run even in the event of anunsupported password format, so it can always be corrected by updatingthe policy.
If the value is "plaintext," then thedata attribute containsthe password in plain text.
Note: On Windows, only the "plaintext" password type is supported,due to a lack of support from the operating system for settinghashed passwords.
Type: (menu option)
Allowed input range:
plaintexthash
Example:
bodypassworduser_password{format=>"plaintext";data=>"CFEngine";}data
Description: Specifies the password data.
The format of the password data depends on theformat attribute.
Type:string
Allowed input range: (arbitrary string)
Example:
bodypassworduser_password{format=>"plaintext";data=>"CFEngine";}policy
Description: Thepolicy attribute specifies what state the useraccount has on the system.
If the policy ispresent, the user is present and activeon the system. Note that an unset password might still prevent the userfrom logging in.
If the policy islocked, and the user does not exist, it is created withpassword authentication disabled. If the user account already exists itspassword digest is prepended with a "!", disabling password authentication.Note that only logins via the PAM framework are prevented. This includes normalconsole logins and SSH logins on most systems.
If the policy isabsent, the user does not exist on the system. Notethat if a user previously existed, his/her files are notautomatically removed. You must create a separatefiles promise forthis.
Note: When CFEngine locks an account it does two things, it disablesthe login password, and it sets the account expiration date far in thepast. The expiration date is to prevent key based SSH logins. However,on Solaris it is not possible to set the account expiration date in thisway, hence SSH logins may still work there after an account is lockedand additional steps may be required.
Type: (menu option)
Allowed input range:
presentabsentlocked
Example:
users:"jsmith"policy=>"locked";shell
Description: Theshell attribute specifies the user's loginshell.
Type:string
Allowed input range:"?(/.*)
Example:
users:"jsmith"shell=>"/bin/bash";uid
Description: Theuid attribute specifies the user's UID number.
Note that if the UID of an existing user is changed, the files ownedby that user do not automatically change ownership. You must create aseparatefiles promise for this.
Type:int
Allowed input range:-99999999999,99999999999
Example:
users:"jsmith"uid=>"1357";- Overview
- Getting started
- Reference
- Components
- Functions
- accessedbefore
- accumulated
- ago
- and
- basename
- bundlesmatching
- bundlestate
- callstack_callers
- callstack_promisers
- canonify
- canonifyuniquely
- cf_version_after
- cf_version_at
- cf_version_before
- cf_version_between
- cf_version_maximum
- cf_version_minimum
- changedbefore
- classesmatching
- classfiltercsv
- classify
- classmatch
- concat
- countclassesmatching
- countlinesmatching
- data_expand
- data_readstringarray
- data_readstringarrayidx
- data_regextract
- data_sysctlvalues
- datastate
- difference
- dirname
- diskfree
- escape
- eval
- every
- execresult
- execresult_as_data
- expandrange
- file_hash
- fileexists
- filesexist
- filesize
- filestat
- filter
- findfiles
- findfiles_up
- findprocesses
- format
- getclassmetatags
- getenv
- getfields
- getgid
- getindices
- getuid
- getuserinfo
- getusers
- getvalues
- getvariablemetatags
- grep
- groupexists
- hash
- hash_to_int
- hashmatch
- host2ip
- hostinnetgroup
- hostrange
- hostsseen
- hostswithclass
- hubknowledge
- ifelse
- int
- intersection
- ip2host
- iprange
- irange
- isdir
- isexecutable
- isgreaterthan
- isipinsubnet
- islessthan
- islink
- isnewerthan
- isplain
- isreadable
- isvariable
- join
- lastnode
- laterthan
- ldaparray
- ldaplist
- ldapvalue
- length
- lsdir
- makerule
- maparray
- mapdata
- maplist
- max
- mean
- mergedata
- min
- network_connections
- none
- not
- now
- nth
- on
- or
- packagesmatching
- packageupdatesmatching
- parseintarray
- parsejson
- parserealarray
- parsestringarray
- parsestringarrayidx
- parseyaml
- peerleader
- peerleaders
- peers
- processexists
- product
- randomint
- read_module_protocol
- readcsv
- readdata
- readenvfile
- readfile
- readintarray
- readintlist
- readjson
- readrealarray
- readreallist
- readstringarray
- readstringarrayidx
- readstringlist
- readtcp
- readyaml
- regarray
- regcmp
- regex_replace
- regextract
- registryvalue
- regldap
- regline
- reglist
- remoteclassesmatching
- remotescalar
- returnszero
- reverse
- rrange
- selectservers
- shuffle
- some
- sort
- splayclass
- splitstring
- storejson
- strcmp
- strftime
- string
- string_downcase
- string_head
- string_length
- string_mustache
- string_replace
- string_reverse
- string_split
- string_tail
- string_trim
- string_upcase
- sublist
- sum
- sysctlvalue
- translatepath
- type
- unique
- url_get
- usemodule
- userexists
- validdata
- validjson
- variablesmatching
- variablesmatching_as_data
- variance
- version_compare
- Language concepts
- Masterfiles Policy Framework
- promises.cf
- .no-distrib/
- update.cf
- standalone_self_upgrade.cf
- cfe_internal/
- cfe_internal/CFE_cfengine.cf
- cfe_internal/core/
- cfe_internal/core/watchdog
- cfe_internal/core/watchdog/watchdog.cf
- cfe_internal/enterprise/
- cfe_internal/enterprise/federation/
- cfe_internal/enterprise/federation/federation.cf
- cfe_internal/recommendations.cf
- cfe_internal/update/
- cfe_internal/update/cfe_internal_dc_workflow.cf
- cfe_internal/update/cfe_internal_update_from_repository.cf
- cfe_internal/update/lib.cf
- cfe_internal/update/systemd_units.cf
- cfe_internal/update/update_bins.cf
- cfe_internal/update/update_policy.cf
- cfe_internal/update/update_processes.cf
- controls/
- controls/cf_agent.cf
- controls/cf_execd.cf
- controls/cf_hub.cf
- controls/cf_monitord.cf
- controls/cf_runagent.cf
- controls/cf_serverd.cf
- controls/def.cf
- controls/def_inputs.cf
- controls/reports.cf
- controls/update_def.cf
- controls/update_def_inputs.cf
- inventory/
- inventory/any.cf
- inventory/debian.cf
- inventory/freebsd.cf
- inventory/generic.cf
- inventory/linux.cf
- inventory/lsb.cf
- inventory/macos.cf
- inventory/os.cf
- inventory/redhat.cf
- inventory/suse.cf
- inventory/windows.cf
- lib/
- lib/autorun.cf
- lib/bundles.cf
- lib/cfe_internal.cf
- lib/cfe_internal_hub.cf
- lib/cfengine_enterprise_hub_ha.cf
- lib/commands.cf
- lib/common.cf
- lib/databases.cf
- lib/edit_xml.cf
- lib/event.cf
- lib/examples.cf
- lib/feature.cf
- lib/files.cf
- lib/guest_environments.cf
- lib/monitor.cf
- lib/packages.cf
- lib/paths.cf
- lib/processes.cf
- lib/reports.cf
- lib/services.cf
- lib/stdlib.cf
- lib/storage.cf
- lib/testing.cf
- lib/users.cf
- lib/vcs.cf
- modules/
- modules/mustache/
- modules/packages/
- modules/packages/vendored/
- modules/promises/
- modules/promises/cfengine.py
- modules/promises/cfengine.sh
- services/
- services/autorun/
- services/main.cf
- Macros
- Promise types
- Special variables
- All promise and body types
- Release notes
- Web UI
- Settings
- Health
- Hosts
- Alerts and notifications
- Custom actions for alerts
- Enterprise reporting
- Federated reporting
- Measurements app
- Hub administration
- Decommissioning hosts
- Extending Mission Portal
- Extending query builder in Mission Portal
- Adjusting schedules
- Backup and restore
- Configure a custom LDAP port
- Custom LDAPs certificate
- Custom SSL certificate
- Enable plain http
- Lookup license info
- Policy deployment
- Public key distribution
- Re-installing Enterprise hub
- Regenerate self signed SSL certificate
- Reset administrative credentials
- Debugging Mission Portal
- License
- Examples and tutorials
- Example snippets
- General examples
- Administration examples
- Measuring examples
- Software administration examples
- Commands, scripts, and execution examples
- File and directory examples
- File template examples
- Interacting with directory services
- Database examples
- Network examples
- System security examples
- System information examples
- System administration examples
- System file examples
- Windows registry examples
- File permissions
- User management examples
- Common promise patterns
- Aborting execution
- Change detection
- Check filesystem space
- Copy single files
- Create files and directories
- Customize message of the day
- Distribute ssh keys
- Ensure a process is not running
- Ensure a service is enabled and running
- Find the MAC address
- Install packages
- Mount NFS filesystem
- Restart a process
- Set up name resolution with DNS
- Set up sudo
- Set up time management through NTP
- Updating from a central policy server
- Tutorials
- JSON and YAML support in CFEngine
- Installing CFEngine Enterprise agent
- Managing local users
- Managing network time protocol
- Managing processes and services
- Package management
- Writing CFEngine policy
- Distributing files from a central location
- File editing
- Reporting and remediation of security vulnerabilities
- Masterfiles Policy Framework upgrade
- Tags for variables, classes, and bundles
- Custom inventory
- Dashboard alerts
- Integrating alerts with PagerDuty
- Integrating alerts with ticketing systems
- Integrating with Sumo Logic
- Rendering files with Mustache templates
- Reporting
- File comparison
- High availability
- Writing and serving policy
- Example snippets
- Resources
- FAQ
- Why knowledge management?
- Requesting a CFEngine Enterprise License
- Uninstalling / reinstalling
- Agent output email
- Debugging slow queries
- Enterprise Report Filtering
- Enterprise report collection
- Enterprise reporting database
- How can I tell what classes and variables are defined?
- How do I find the public key for a given host
- How do I fix trust after an IP change?
- How do I fix undefined body errors?
- How do I integrate custom policy?
- How do I pass a data type variable?
- Manual execution
- Mustache templating
- Unable to log into Mission Portal
- Users
- What is promise locking?
- Why are remote agents not updating?
- Why are some files inside masterfiles not being updated/distributed?
- Why does CFEngine install into /var/cfengine instead of following the FHS?
- Bootstrapping
- Tuning PostgreSQL
- What did CFEngine do?
- External resources
- Additional topics
- Best practices
- FAQ
- API
- Enterprise API examples
- Enterprise API reference
- Actions API
- Build API
- CMDB API
- Changes REST API
- Federated reporting configuration API
- File changes API
- Health diagnostic API
- Host REST API
- Import & export API
- Import & export compliance report API
- Inventory API
- LDAP authentication API
- Personal groups API
- Query REST API
- SQL schema
- SSH keys API
- Shared groups API
- Status and settings REST API
- Two-factor authentication API
- Users and access-control REST API
- VCS settings API
- Web RBAC API