arver 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.textile CHANGED
@@ -1,4 +1,9 @@
1
- === 0.0.4 2012-04-30
1
+ === 0.1.0 2012-04-30
2
+
3
+ * Fixed documentation
4
+ * Let's call this a release!
5
+
6
+ === 0.0.5 2012-04-30
2
7
 
3
8
  * Updated to run with ruby 1.9
4
9
  * Validate gpg fingerprints
data/README.textile CHANGED
@@ -1,53 +1,73 @@
1
1
  h1. arver
2
2
 
3
- * https://git.codecoop.org/projects/arver
4
-
5
- h2. DESCRIPTION:
3
+ h2. Synopsis
6
4
 
7
5
  arver is a tool to manage encrypted harddisks.
8
6
 
9
- Imagine you are a collective with several admin members. Your servers have
10
- diffrent LUKS encrypted devices.
11
-
12
- Either you would need 1 password for every device which everyone needs to know
13
- or you use arver! Arver has 1 password for each device and for each member. This
14
- password is stored encrypted with the personal gpg-key in the data directory.
15
- The admins only need to know the password to the their own gpg secret key.
16
-
17
- This has the following advantages:
18
-
19
- * No need to share passwords or password patterns
20
- ** Often people share passwords amongst each another. This has the drawback that
21
- in case of an emergency every password needs to be changed. Which means that
22
- everyone else needs to learn a bunch of new passwords and changing these
23
- passwords is also quite cumbersome and time consuming.
24
- ** As the amount of passwords might grow with your disks and hosts you will start
25
- using a password pattern to derive passwords for each disk from that pattern.
26
- This has the drawback that you can hardly share only partial access to disks
27
- with a certain admin, as if she knows the pattern she will also likely have
28
- access to every other disk. Furthermore, if once one password is leaked and
29
- the patter is easily visible, all the other passwords are also compromised.
30
- * Managing your encrypted harddisks is scriptable, which means that you can
31
- recover much faster from outages
32
- * Revoking access for an admin is scriptable and therefore done in one call and
33
- also much safer than revoking manually for each disk.
34
- * Finer grained access. As for each user and each disk there will be a seperate
35
- password by design. You can also grant access to certain disks also only
36
- selectively. So for example new admins in your group can only open the disks
37
- for your most important services or for which they are respnsible, while access
38
- to the other disks is restriced to other admins.
7
+ It is tailored for fine-grained access control to LUKS encrypted harddisks by
8
+ many users. Additionally it supports automation through scripts and facilitates
9
+ key distribution.
10
+
11
+ As an example it can be used in an organisation to grant access to encrypted
12
+ partitions to a team of admins.
13
+
14
+ h2. Addressed Problems
15
+
16
+ In a traditional setup with multiple LUKS devices most organisations resort
17
+ to password sharing. This has multiple drawbacks, which arver tries to address:
18
+
19
+ * In case of an emergency or scheduled password change, everyone needs to learn
20
+ a bunch of new passwords and changing them is cumbersome and time consuming.
21
+ * If the password is leaked, all disks are compromised.
22
+ * As the amount of passwords grows with the number of disks, password patterns
23
+ are common. This has the drawback that you can't grant per-disk access to others.
24
+
25
+ Further arver can ease many associated tasks:
26
+
27
+ * Arver is scriptable - all actions support script hooks, which means that you can
28
+ recover much faster from outages.
29
+ * Revoking all access for an admin can be done with only one command.
30
+ * Since arver keys are encrypted using publickey cryptography it is very easy to
31
+ safely distribute arver keys.
39
32
 
40
33
  h1. Usage
41
34
 
42
35
  arver ships with a detailed man page, describing the usage in detail.
43
36
 
37
+ h1. Installation
38
+
39
+ The easiest way to install arver is by gem
40
+
41
+ sudo gem install arver
42
+
43
+ This will install all required dependecies automatically. If your distributions
44
+ contains an arver package we recommend installation by your package manager.
45
+
46
+ The following ruby gems are required for arver:
47
+
48
+ * gpgme 2
49
+ * activesupport 2
50
+ * escape
51
+
52
+ For development you will need the following additional gems:
53
+
54
+ * rake
55
+ * cucumber
56
+ * rspec
57
+
58
+ h1. Requirements
59
+
60
+ arver only works with cryptsetup-luks >= 1.0.5 as previous versions do not
61
+ support key slots properly for our usage.
62
+
44
63
  h1. Limitations
45
64
 
65
+ * arver only supports LUKS as backend.
46
66
  * arver supports only up to 8 users as LUKS has only 8 key slots (LUKS NUMKEYS).
47
67
 
48
- h1. Known Issues
68
+ h2. Known Issues
49
69
 
50
- h2. GPGME and gpg-agent
70
+ h3. GPGME and gpg-agent
51
71
 
52
72
  If arver asks you multiple times for the password, you might consider to use
53
73
  gpg-agent, so you can decrypt your keypair once and the use it for all your
@@ -68,31 +88,6 @@ script. An option is to add the following entry to your .bashrc
68
88
  export GPG_AGENT_INFO
69
89
  fi
70
90
 
71
- h1. Requirements
72
-
73
- arver only works with cryptsetup-luks >= 1.0.5 as previous versions do not
74
- support key slots properly for our usage.
75
-
76
- h1. Installation
77
-
78
- The easiest way to install arver is by gem
79
-
80
- sudo gem install arver
81
-
82
- This will install all required dependecies automatically. If your distributions
83
- contains an arver package we recommend installation by your package manager.
84
-
85
- The following ruby gems are required for arver:
86
-
87
- * gpgme 2
88
- * activesupport 2
89
- * escape
90
-
91
- For development you will need the following additional gems:
92
-
93
- * rake
94
- * cucumber
95
- * rspec
96
91
 
97
92
  h1. License
98
93
 
data/lib/arver/cli.rb CHANGED
@@ -27,16 +27,13 @@ module Arver
27
27
  Options:
28
28
  BANNER
29
29
  opts.on("-c", "--config-dir PATH", String,
30
- "Path to config dir.",
31
- "Default: .arver") { |arg| options[:config_dir] = arg }
30
+ "Path to arverdata dir.") { |arg| options[:config_dir] = arg }
32
31
  opts.on("-u", "--user NAME", String,
33
- "Username." ) { |arg| options[:user] = arg }
32
+ "Your username." ) { |arg| options[:user] = arg }
34
33
  opts.on("-h", "--help",
35
34
  "Show this help message.") { Arver::Log.write opts; return }
36
- opts.on("--dry-run",
37
- "Test your command.") { options[:dry_run] = true }
38
35
  opts.on("--ask-password",
39
- "Ask for Password when --add-user.") { options[:ask_password] = true }
36
+ "Ask for an existing LUKS password when adding a new user.") { options[:ask_password] = true }
40
37
  opts.on("-t", "--trust-all",
41
38
  "Use untrusted GPG Keys.") { options[:trust_all] = true }
42
39
  opts.on("--force",
@@ -47,33 +44,35 @@ module Arver
47
44
  "Verbose") { Arver::Log.level( Arver::LogLevels::Debug ) }
48
45
  opts.on("--vv",
49
46
  "Max Verbose") { Arver::Log.level( Arver::LogLevels::Trace ) }
50
- opts.on( "-l", "--list-targets",
51
- "List targets." ) { options[:action] = :list; }
52
- opts.on( "-g", "--garbage-collect",
53
- "Expunge old keys." ) { options[:action] = :gc; }
54
- opts.on( "-k TARGET", "--keys TARGET", String,
55
- "List local keys for this target.") { |arg| options[:argument][:target] = arg; options[:action] = :key_info; }
47
+ opts.on("--dry-run",
48
+ "Test your command.") { options[:dry_run] = true }
56
49
  opts.on("--test-mode",
57
50
  "Test mode (internal use)") { options[:test_mode] = true }
58
51
  opts.separator "Targets:"
59
52
  opts.on(
60
- " Possible Paths are: 'Group', 'Host', 'Device', 'Host/Device',\n"+
61
- " 'Group/Host/Device' or 'ALL'.\n"+
62
- " Multiple Parameters can be given as comma separated list.\n"+
63
- " Ambigues Target parameters will not be executed." )
53
+ " Possible targets are: '<Group>', '<Host>', '<Disk>', '<Host>/<Device>',\n"+
54
+ " '<Group>/<Host>/<Disk>' or 'ALL'.\n"+
55
+ " Multiple parameters can be given as comma separated list.\n"+
56
+ " Ambigues targets yield an error." )
64
57
  opts.separator "Actions:"
65
- opts.on_tail( "--create TARGET", String,
66
- "Create new arver partition on Target." ) { |arg| options[:argument][:target] = arg; options[:action] = :create; }
67
58
  opts.on_tail( "-o TARGET", "--open TARGET", String,
68
59
  "Open target." ) { |arg| options[:argument][:target] = arg; options[:action] = :open; }
69
60
  opts.on_tail( "-c TARGET", "--close TARGET", String,
70
61
  "Close target." ) { |arg| options[:argument][:target] = arg; options[:action] = :close; }
62
+ opts.on_tail( "--create TARGET", String,
63
+ "Create new arver partition on the target." ) { |arg| options[:argument][:target] = arg; options[:action] = :create; }
71
64
  opts.on_tail( "-a USER TARGET", "--add-user USER TARGET", String,
72
65
  "Add a user to target.") { |user| options[:action] = :adduser; options[:argument][:user] = user; }
73
66
  opts.on_tail( "-d USER TARGET", "--del-user USER TARGET", String,
74
67
  "Remove a user from target.") { |user| options[:action] = :deluser; options[:argument][:user] = user; }
68
+ opts.on_tail( "-g", "--garbage-collect",
69
+ "Expunge old keys." ) { options[:action] = :gc; }
70
+ opts.on_tail( "-k TARGET", "--keys TARGET", String,
71
+ "List local keys for this target.") { |arg| options[:argument][:target] = arg; options[:action] = :key_info; }
75
72
  opts.on_tail( "-i TARGET", "--info TARGET", String,
76
73
  "LUKS info about a target.") { |arg| options[:argument][:target] = arg; options[:action] = :info; }
74
+ opts.on_tail( "-l", "--list-targets",
75
+ "List targets." ) { options[:action] = :list; }
77
76
 
78
77
  begin
79
78
  opts.parse!(arguments)
data/lib/arver/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Arver
2
- VERSION = '0.0.5'
2
+ VERSION = '0.1.0'
3
3
  end
data/man/arver.5 CHANGED
@@ -10,8 +10,7 @@
10
10
  .
11
11
  .nf
12
12
 
13
- arver [\-u user] [\-c arverdata] [OPTIONS] \-t TARGET ACTION
14
- arver [\-u user] [\-c arverdata] [OPTIONS] ACTION
13
+ arver [\-u user] [\-c arverdata] [OPTIONS] ACTION [USER] [TARGET]
15
14
  .
16
15
  .fi
17
16
  .
@@ -26,12 +25,15 @@ There are some generic command line options:
26
25
  .
27
26
  .TP
28
27
  \fB\-u USER\fR, \fB\-\-user USER\fR
29
- By default \fBarver\fR will read \fB~/\.arver\fR to get your username\. Using \fB\-u USER\fR you can override or specify it aswell\.
28
+ By default \fBarver\fR will read \fB~/\.arver\fR to get your username\. Using \fB\-u USER\fR you can override it\.
30
29
  .
31
30
  .TP
32
31
  \fB\-c PATH\fR, \fB\-\-config\-dir PATH\fR
33
32
  By default \fBarver\fR will assume your data storage in \fB~/\.arverdata\fR\. However, if you have multiple data storage or you want to put it to a different location you can use the \fB\-c PATH\fR option\.
34
33
  .
34
+ .P
35
+ For more options see \fBarver \-h\fR
36
+ .
35
37
  .SH "ACTIONS"
36
38
  The following actions are supported:
37
39
  .
@@ -91,7 +93,7 @@ But the TARGET option accepts also partial names and lists\. E\.g
91
93
  .
92
94
  .nf
93
95
 
94
- \-t location1,location2/host2,host4,disk3
96
+ location1,location2/host2,host4,disk3
95
97
  .
96
98
  .fi
97
99
  .
@@ -423,6 +425,9 @@ If you use a version controll system to store your \fBarverdata\fR you should do
423
425
  \fBcryptsetup\fR(8)\. \fBgnupg\fR(7)\.
424
426
  .
425
427
  .P
428
+ Arver description: \fIhttps://tech\.immerda\.ch/2011/08/arver\-distributed\-luks\-key\-management/\fR
429
+ .
430
+ .P
426
431
  Arver project site: \fIhttps://git\.codecoop\.org/projects/arver/\fR
427
432
  .
428
433
  .P
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: arver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -15,7 +15,7 @@ date: 2012-04-30 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: gpgme
18
- requirement: &17808380 !ruby/object:Gem::Requirement
18
+ requirement: &12106580 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: 2.0.0
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *17808380
26
+ version_requirements: *12106580
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: escape
29
- requirement: &17807680 !ruby/object:Gem::Requirement
29
+ requirement: &12105920 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ! '>='
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 0.0.2
35
35
  type: :runtime
36
36
  prerelease: false
37
- version_requirements: *17807680
37
+ version_requirements: *12105920
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: activesupport
40
- requirement: &17807020 !ruby/object:Gem::Requirement
40
+ requirement: &12105360 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - <
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: 3.0.0
46
46
  type: :runtime
47
47
  prerelease: false
48
- version_requirements: *17807020
48
+ version_requirements: *12105360
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: cucumber
51
- requirement: &17806360 !ruby/object:Gem::Requirement
51
+ requirement: &12104740 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: 0.10.2
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *17806360
59
+ version_requirements: *12104740
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: rspec
62
- requirement: &17805500 !ruby/object:Gem::Requirement
62
+ requirement: &12104120 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ! '>='
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: 2.5.0
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *17805500
70
+ version_requirements: *12104120
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: rake
73
- requirement: &17803600 !ruby/object:Gem::Requirement
73
+ requirement: &12103560 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ! '>='
@@ -78,7 +78,7 @@ dependencies:
78
78
  version: 0.9.2
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *17803600
81
+ version_requirements: *12103560
82
82
  description: Arver helps you to manage a large amount of crypted devices easily and
83
83
  safe amongst a certain amount of members
84
84
  email: arver@lists.immerda.ch