Update cookbooks and add wordpress cookbook
This commit is contained in:
@@ -1,35 +1,181 @@
|
||||
users Cookbook
|
||||
==============
|
||||

|
||||
# users Cookbook
|
||||
[](http://travis-ci.org/chef-cookbooks/users) [](https://supermarket.chef.io/cookbooks/users)
|
||||
|
||||
Creates users from a databag search.
|
||||
Manages OS users from databags.
|
||||
|
||||
## Scope
|
||||
|
||||
Requirements
|
||||
------------
|
||||
### Platforms
|
||||
- Debian, Ubuntu
|
||||
- CentOS, Red Hat, Fedora
|
||||
- FreeBSD
|
||||
This cookbook is concerned with the management of OS users and groups from databags. It also manages the distribution of ssh keys to a user's home directory.
|
||||
|
||||
A data bag populated with user objects must exist. The default data
|
||||
bag in this recipe is `users`. See USAGE.
|
||||
## Requirements
|
||||
|
||||
A data bag populated with user objects must exist. The default data bag in this recipe is `users`. See USAGE.
|
||||
|
||||
Usage
|
||||
-----
|
||||
To include just the LWRPs in your cookbook, use:
|
||||
### Chef
|
||||
|
||||
```ruby
|
||||
include_recipe "users"
|
||||
- Chef 11+
|
||||
|
||||
### Platform Support
|
||||
|
||||
The following platforms have been tested with Test Kitchen:
|
||||
|
||||
- Debian / Ubuntu and derivatives
|
||||
- RHEL and derivatives
|
||||
- Fedora
|
||||
- FreeBSD / OpenBSD
|
||||
- Mac OS X
|
||||
|
||||
### Cookbook Dependencies
|
||||
- none
|
||||
|
||||
## Usage
|
||||
To use the resource `users_manage`, make sure to add the dependency on the users cookbook by the following line to your wrapper cookbook's [metadata.rb](https://docs.chef.io/config_rb_metadata.html):
|
||||
|
||||
```
|
||||
depends 'users'
|
||||
```
|
||||
|
||||
or to pin to a specific version of the users cookbook, in this case any version of 2.X:
|
||||
|
||||
```
|
||||
depends 'users', '~> 2'
|
||||
```
|
||||
|
||||
Then in a recipe:
|
||||
|
||||
```ruby
|
||||
users_manage 'GROUPNAME' do
|
||||
group_id GROUPID
|
||||
action [:remove, :create]
|
||||
data_bag 'DATABAG_NAME'
|
||||
end
|
||||
```
|
||||
|
||||
Example:
|
||||
|
||||
```ruby
|
||||
users_manage 'testgroup' do
|
||||
group_id 3000
|
||||
action [:remove, :create]
|
||||
data_bag 'test_home_dir'
|
||||
end
|
||||
```
|
||||
|
||||
**Note**: If you do not specify the data_bag, the default will be to look for a databag called users.
|
||||
|
||||
## Databag Definition
|
||||
|
||||
A sample user object in a users databag would look like:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "test_user",
|
||||
"password": "$1$5cE1rI/9$4p0fomh9U4kAI23qUlZVv/",
|
||||
"ssh_keys": [
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU\nGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3\nPbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA\nt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En\nmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx\nNrRFi9wrf+M7Q== chefuser@mylaptop.local",
|
||||
"ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU\nGPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3\nPbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA\nt3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En\nmZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx\nNQCPO0ZZEa1== chefuser@mylaptop.local"
|
||||
],
|
||||
"groups": [ "testgroup", "nfsgroup" ],
|
||||
"uid": 9001,
|
||||
"shell": "\/bin\/bash",
|
||||
"comment": "Test User"
|
||||
}
|
||||
```
|
||||
|
||||
### Databag Key Definitions
|
||||
|
||||
* `id`: *String* specifies the username, as well as the data bag object id.
|
||||
* `password`: *String* specifies the user's password.
|
||||
* `ssh_keys`: *Array* an array of authorized keys that will be managed by Chef to the user's home directory in .ssh/authorized_keys
|
||||
* `groups`: *Array* an array of groups that the user will be added to
|
||||
* `uid`: *Integer* a unique identifier for the user
|
||||
* `shell`: *String* the user's shell
|
||||
* `comment`:*String* the [GECOS field](https://en.wikipedia.org/wiki/Gecos_field), generally the User's full name.
|
||||
|
||||
Other potential fields:
|
||||
|
||||
* `home`: *String* User's home directory. If not assigned, will be set based on platform and username.
|
||||
* `action`: *String* Supported actions are one's supported by the [user](https://docs.chef.io/resource_user.html#actions) resource. If not specified, the default action is `create`.
|
||||
* `ssh_private_key`: *String* manages user's private key generally ~/.ssh/id_*
|
||||
* `ssh_public_key`: *String* manages user's public key generally ~/.ssh/id_*.pub
|
||||
|
||||
|
||||
## Resources Overview
|
||||
|
||||
### users_manage
|
||||
|
||||
The `users_manage` resource manages users and groups based off of a data bag search and specified action.
|
||||
|
||||
#### Examples
|
||||
|
||||
Creates the `sysadmin` group and users defined in the `users` databag.
|
||||
|
||||
```ruby
|
||||
users_manage 'sysadmin' do
|
||||
group_id 2300
|
||||
action [:remove, :create]
|
||||
end
|
||||
```
|
||||
|
||||
Removes, then creates the `testgroup` group, and users defined in the `test_home_dir` databag.
|
||||
|
||||
```ruby
|
||||
users_manage 'testgroup' do
|
||||
group_id 3000
|
||||
action [:remove, :create]
|
||||
data_bag 'test_home_dir'
|
||||
end
|
||||
```
|
||||
|
||||
Removes, then creates the `nfsgroup` group, and users defined in the `test_home_dir` databag and does not manage nfs home directories.
|
||||
|
||||
```ruby
|
||||
users_manage 'nfsgroup' do
|
||||
group_id 4000
|
||||
action [:remove, :create]
|
||||
data_bag 'test_home_dir'
|
||||
manage_nfs_home_dirs false
|
||||
end
|
||||
```
|
||||
|
||||
#### Parameters
|
||||
|
||||
* `data_bag` *String* is the data bag to search
|
||||
* `search_group` *String* groups name to search for, defaults to resource name
|
||||
* `group_name` *String* name of the group to create, defaults to resource name
|
||||
* `group_id` *Integer* numeric id of the group to create, default is to allow the OS to pick next
|
||||
* `cookbook` *String* name of the cookbook that the authorized_keys template should be found in
|
||||
* `manage_nfs_home_dirs` *Boolean* whether to manage nfs home directories.
|
||||
|
||||
Otherwise, this cookbook is specific for setting up `sysadmin` group and users with the sysadmins recipe for now.
|
||||
|
||||
## Recipe Overview
|
||||
|
||||
`sysadmins.rb`: recipe that manages the group sysadmins with group id 2300, and adds users to this group.
|
||||
|
||||
To use:
|
||||
|
||||
```ruby
|
||||
include_recipe "users::sysadmins"
|
||||
```
|
||||
|
||||
The recipe is defined as follows:
|
||||
|
||||
```ruby
|
||||
users_manage "sysadmin" do
|
||||
group_id 2300
|
||||
action [ :remove, :create ]
|
||||
end
|
||||
```
|
||||
|
||||
This `users_manage` resource searches the `users` data bag for the `sysadmin` group attribute, and adds those users to a Unix security group `sysadmin`. The only required attribute is group_id, which represents the numeric Unix gid and _must_ be unique. The default action for the resource is `:create`.
|
||||
|
||||
The recipe, by default, will also create the sysadmin group. The sysadmin group will be created with GID 2300. This may become an attribute at a later date.
|
||||
|
||||
## Data bag Overview
|
||||
|
||||
**Reminder** Data bags generally should not be stored in cookbooks, but in a policy repo within your organization. Data bags are useful across cookbooks, not just for a single cookbook.
|
||||
|
||||
Use knife to create a data bag for users.
|
||||
|
||||
```bash
|
||||
@@ -38,7 +184,7 @@ $ knife data bag create users
|
||||
|
||||
Create a user in the data_bag/users/ directory.
|
||||
|
||||
When using an [Omnibus ruby](http://tickets.opscode.com/browse/CHEF-2848), one can specify an optional password hash. This will be used as the user's password.
|
||||
An optional password hash can be specified that will be used as the user's password.
|
||||
|
||||
The hash can be generated with the following command.
|
||||
|
||||
@@ -48,14 +194,14 @@ $ openssl passwd -1 "plaintextpassword"
|
||||
|
||||
Note: The ssh_keys attribute below can be either a String or an Array. However, we are recommending the use of an Array.
|
||||
|
||||
```javascript
|
||||
```json
|
||||
{
|
||||
"id": "bofh",
|
||||
"ssh_keys": "ssh-rsa AAAAB3Nz...yhCw== bofh",
|
||||
"ssh_keys": "ssh-rsa AAAAB3Nz...yhCw== bofh"
|
||||
}
|
||||
```
|
||||
|
||||
```javascript
|
||||
```json
|
||||
{
|
||||
"id": "bofh",
|
||||
"password": "$1$d...HgH0",
|
||||
@@ -66,12 +212,7 @@ Note: The ssh_keys attribute below can be either a String or an Array. However,
|
||||
"groups": [ "sysadmin", "dba", "devops" ],
|
||||
"uid": 2001,
|
||||
"shell": "\/bin\/bash",
|
||||
"comment": "BOFH",
|
||||
"nagios": {
|
||||
"pager": "8005551212@txt.att.net",
|
||||
"email": "bofh@example.com"
|
||||
},
|
||||
"openid": "bofh.myopenid.com"
|
||||
"comment": "BOFH"
|
||||
}
|
||||
```
|
||||
|
||||
@@ -113,32 +254,23 @@ And then change the action to "remove":
|
||||
}
|
||||
```
|
||||
|
||||
* Note only user bags with the "action : remove" and a search-able "group" attribute will be purged by the :remove action.
|
||||
|
||||
The sysadmins recipe makes use of the `users_manage` Lightweight Resource Provider (LWRP), and looks like this:
|
||||
|
||||
```ruby
|
||||
users_manage "sysadmin" do
|
||||
group_id 2300
|
||||
action [ :remove, :create ]
|
||||
end
|
||||
```
|
||||
|
||||
Note this LWRP searches the `users` data bag for the `sysadmin` group attribute, and adds those users to a Unix security group `sysadmin`. The only required attribute is group_id, which represents the numeric Unix gid and *must* be unique. The default action for the LWRP is `:create` only.
|
||||
- Note only user bags with the "action : remove" and a search-able "group" attribute will be purged by the :remove action.
|
||||
- As of v2.0.3 you can use the force parameter within the user data bag object for users with action remove. As per [user docs](https://docs.chef.io/resource_user.html) this may leave the system in an inconsistent state. For example, a user account will be removed even if the user is logged in. A user’s home directory will be removed, even if that directory is shared by multiple users.
|
||||
|
||||
If you have different requirements, for example:
|
||||
- You want to search a different data bag specific to a role such as
|
||||
- mail. You may change the data_bag searched.
|
||||
- data_bag `mail`
|
||||
|
||||
* You want to search a different data bag specific to a role such as
|
||||
mail. You may change the data_bag searched.
|
||||
- data_bag `mail`
|
||||
* You want to search for a different group attribute named
|
||||
`postmaster`. You may change the search_group attribute. This
|
||||
attribute defaults to the LWRP resource name.
|
||||
- search_group `postmaster`
|
||||
* You want to add the users to a security group other than the
|
||||
lightweight resource name. You may change the group_name attribute.
|
||||
This attribute also defaults to the LWRP resource name.
|
||||
- group_name `wheel`
|
||||
- You want to search for a different group attribute named
|
||||
- `postmaster`. You may change the search_group attribute. This
|
||||
- attribute defaults to the LWRP resource name.
|
||||
- search_group `postmaster`
|
||||
|
||||
- You want to add the users to a security group other than the
|
||||
- lightweight resource name. You may change the group_name attribute.
|
||||
- This attribute also defaults to the LWRP resource name.
|
||||
- group_name `wheel`
|
||||
|
||||
Putting these requirements together our recipe might look like this:
|
||||
|
||||
@@ -150,35 +282,26 @@ users_manage "postmaster" do
|
||||
end
|
||||
```
|
||||
|
||||
The latest version of knife supports reading data bags from a file and automatically looks in a directory called +data_bags+ in the current directory. The "bag" should be a directory with JSON files of each item. For the above:
|
||||
Knife supports reading data bags from a file and automatically looks in a directory called +data_bags+ in the current directory. The "bag" should be a directory with JSON files of each item. For the above:
|
||||
|
||||
```bash
|
||||
$ mkdir data_bags/users
|
||||
$EDITOR data_bags/users/bofh.json
|
||||
```
|
||||
|
||||
Paste the user's public SSH key into the ssh_keys value. Also make sure the uid is unique, and if you're not using bash, that the shell is installed. The default search, and Unix group is sysadmin.
|
||||
|
||||
The recipe, by default, will also create the sysadmin group. If you're using the chef sudo cookbook, they'll have sudo access in the default site-cookbooks template. They won't have passwords though, so the sudo cookbook's template needs to be adjusted so the sysadmin group has NOPASSWD.
|
||||
|
||||
The sysadmin group will be created with GID 2300. This may become an attribute at a later date.
|
||||
Paste the user's public SSH key into the ssh_keys value. Also make sure the uid is unique, and if you're not using bash, that the shell is installed.
|
||||
|
||||
The Apache cookbook can set up authentication using OpenIDs, which is set up using the openid key here. See the Chef Software 'apache2' cookbook for more information about this.
|
||||
|
||||
|
||||
Chef Solo
|
||||
---------
|
||||
## Chef Solo
|
||||
As of version 1.4.0, this cookbook might work with Chef Solo when using [chef-solo-search by edelight](https://github.com/edelight/chef-solo-search). That cookbook is not a dependency of this one as Chef solo doesn't support dependency resolution using cookbook metadata - all cookbooks must be provided to the node manually when using Chef Solo.
|
||||
|
||||
## License & Authors
|
||||
**Author:** Cookbook Engineering Team ([cookbooks@chef.io](mailto:cookbooks@chef.io))
|
||||
|
||||
License & Authors
|
||||
-----------------
|
||||
- Author:: Joshua Timberman (<joshua@chef.io>)
|
||||
- Author:: Seth Chisamore (<schisamo@chef.io>)
|
||||
|
||||
```text
|
||||
Copyright:: 2009-2015, Chef Software, Inc
|
||||
**Copyright:** 2009-2016, Chef Software, Inc.
|
||||
|
||||
```
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
Reference in New Issue
Block a user