amnesie 0.0.2 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b826ad698129628f09059fb95e85e661982d473377e1d8721155da1f4aaa0f6c
4
- data.tar.gz: 13c076ddfb5ffa659d320724238382cfecd6c3dca6cd96c1a04afa49fbec6248
3
+ metadata.gz: 32a693e395e10dae6902936ee92ccee0f5c88f26dd2c3f35b4af0aaf84d6336d
4
+ data.tar.gz: f9f3cc186a25d643add3f3856bbbe41d18bc876cfbad76f0451d6715a9d99359
5
5
  SHA512:
6
- metadata.gz: ebd14700e11fa9b919df3c22f1f13a520b7c1d71f916b8d597a9e3a4ca8923b604795326674d43d83a6a2e96ff6181ab96c2b1410f67e9f823b628b27806cbd4
7
- data.tar.gz: dec9e3c4c51e4444d1d448bb88357f55f6499672868813be1d3c70be1021ffcf6416ce95794887e737c346a9e062bcbbac9bc49f35744dcaa0ff80c056c811c6
6
+ metadata.gz: 87c5a5990c9a64110f2db7ae5346b76be2f1190e85984cc52bb6c28b8cf62051113e8a327ef9d701c221dafc448cdbf0d89c7b77a71ce249117c9bbe4caacb0e
7
+ data.tar.gz: 6c095d7d1be44fff68d0527cff8509db7d8a171d74ae5e1fcba75d5610396f4b16215e3c71251cc7b0517a36ea572594fae46170249b4f2527e6008e28d07a19
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -1,3 +1,27 @@
1
+ ## 0.0.7, release 2020-05-29
2
+ * Shortcut action for service (e/d)
3
+ * Correct permission on amnesie-mac@.service
4
+ * Enhance lib/amnesie/helper
5
+
6
+ ## 0.0.6, release 2020-05-20
7
+ * Init a doc with RDoc.
8
+ * Add -i|--init to start init process properly.
9
+ * Add dhcpcd to the mac@.service, dhclient doesn't seem necessary.
10
+ * Correct the mac@.service.
11
+
12
+ ## 0.0.5, release 2020-05-19
13
+ * Create a amnesie-mac@.service (work only if the gem is install system-wide)
14
+ * Add -p|--persist
15
+ * Replace Makefile by a Rakefile
16
+
17
+ ## 0.0.4, release 2020-05-16
18
+ * Debian10 need to reload ifup@card-name too
19
+ * Correct path where search dhclient (/bin,/sbin)
20
+ * Enhance stuff for kill and reload dhclient (tested on debian 10)
21
+
22
+ ## 0.0.3, release 2020-05-15
23
+ * Add stuff for kill and reload dhclient (tested on debian 10)
24
+
1
25
  ## 0.0.2, release 2020-05-15
2
26
  * Rakefile, add rake as dev dependencie
3
27
  * Check if process/program exist before kill/restart
data/README.md CHANGED
@@ -10,7 +10,7 @@ Inspiration come from a post found on [Qubes-OS](https://www.qubes-os.org/doc/an
10
10
  ## Install
11
11
  Amnesie is cryptographically signed, so add my public key (if you haven’t already) as a trusted certificate.
12
12
 
13
- $ gem cert --add <(curl -Ls https://raw.githubusercontent.com/szorfein/spior/master/certs/szorfein.pem)
13
+ $ gem cert --add <(curl -Ls https://raw.githubusercontent.com/szorfein/amnesie/master/certs/szorfein.pem)
14
14
 
15
15
  And install the gem
16
16
 
@@ -28,10 +28,14 @@ To change the MAC address for eth0:
28
28
 
29
29
  $ amnesie -n eth0 -m
30
30
 
31
+ Create or Disable all systemd services for a network card:
32
+
33
+ $ amnesie -p -n wlp2s0
34
+
31
35
  ## Left Over
32
36
 
33
37
  ### Issues
34
- For any questions, comments, feedback or issues, submit a [new issue](https://github.com/szorfein/spior/issues/new).
38
+ For any questions, comments, feedback or issues, submit a [new issue](https://github.com/szorfein/amnesie/issues/new).
35
39
 
36
40
  ### links
37
41
  + https://rubyreferences.github.io/rubyref
data/Rakefile CHANGED
@@ -2,9 +2,18 @@
2
2
  require "rake/testtask"
3
3
 
4
4
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/test_*.rb"]
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/test_*.rb"]
8
+ end
9
+
10
+ namespace :gem do
11
+ desc "build the gem"
12
+ task :build do
13
+ Dir["amnesie*.gem"].each {|f| File.unlink(f) }
14
+ system("gem build amnesie.gemspec")
15
+ system("gem install amnesie-0.0.7.gem -P MediumSecurity")
16
+ end
8
17
  end
9
18
 
10
19
  task :default => :test
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "amnesie"
3
- s.version = "0.0.2"
3
+ s.version = "0.0.7"
4
4
  s.summary = "A tool to make your computer amnesic"
5
5
  s.description = <<-EOF
6
6
  A tool to make your computer amnesic"
@@ -1,8 +1,10 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+
1
4
  module Helpers
2
5
  class Exec
3
6
  def initialize(name)
4
- @search_uid=`id -u`.chomp
5
- @search_uid ||= 1000 unless $?.success?
7
+ @search_uid= Process::Sys.getuid
6
8
  @name = name
7
9
  end
8
10
 
@@ -16,4 +18,54 @@ module Helpers
16
18
  end
17
19
  end
18
20
  end
21
+
22
+ class NewFile
23
+ def initialize(string, name, dest = "/tmp")
24
+ @string = string
25
+ @name = name
26
+ @dest = dest + "/" + @name
27
+ end
28
+
29
+ def add
30
+ @mv = Helpers::Exec.new("mv")
31
+ tmp = Tempfile.new(@name)
32
+ File.open(tmp.path, 'w') do |file|
33
+ file.puts @string
34
+ end
35
+ @mv.run("#{tmp.path} #{@dest}")
36
+ end
37
+
38
+ def perm(user, perm)
39
+ chown = Helpers::Exec.new("chown")
40
+ chmod = Helpers::Exec.new("chmod")
41
+ chown.run("#{user}:#{user} #{@dest}")
42
+ chmod.run("#{perm} #{@dest}")
43
+ end
44
+ end
45
+
46
+ class NewSystemd < NewFile
47
+ def initialize(string, name)
48
+ super
49
+ @systemd_dir = search_systemd_dir
50
+ @dest = @systemd_dir + "/" + @name
51
+ end
52
+
53
+ def add
54
+ @systemctl = Helpers::Exec.new("systemctl")
55
+ super
56
+ @systemctl.run("daemon-reload")
57
+ end
58
+
59
+ private
60
+ def search_systemd_dir
61
+ if Dir.exist? "/lib/systemd/system"
62
+ "/lib/systemd/system"
63
+ elsif Dir.exist? "/usr/lib/systemd/system"
64
+ "/usr/lib/systemd/system"
65
+ else
66
+ raise "No directory systemd found"
67
+ exit
68
+ end
69
+ end
70
+ end
19
71
  end
@@ -2,7 +2,7 @@ require 'optparse'
2
2
 
3
3
  module Amnesie
4
4
  class Options
5
- attr_reader :mac, :netcard
5
+ attr_reader :init, :mac, :netcard, :persist
6
6
 
7
7
  def initialize(argv)
8
8
  parse(argv)
@@ -11,6 +11,10 @@ module Amnesie
11
11
  def parse(argv)
12
12
  OptionParser.new do |opts|
13
13
 
14
+ opts.on("-i", "--init", "Used with init process (systemd, etc...)") do
15
+ @init = true
16
+ end
17
+
14
18
  opts.on("-m", "--mac", "What is my MAC address?") do
15
19
  @mac = true
16
20
  end
@@ -19,6 +23,10 @@ module Amnesie
19
23
  @netcard = net
20
24
  end
21
25
 
26
+ opts.on("-p", "--persist", "Enable systemd service") do |net|
27
+ @persist = true
28
+ end
29
+
22
30
  opts.on("-h", "--help", "Show this message") do
23
31
  puts opts
24
32
  exit
@@ -0,0 +1,94 @@
1
+ require 'fileutils'
2
+ require 'tempfile'
3
+ require 'tty-which'
4
+ require_relative 'helpers'
5
+
6
+ module Amnesie
7
+ class Persist
8
+
9
+ def initialize(card)
10
+ @card = card
11
+ @systemd_dir = search_systemd_dir
12
+ @systemctl = Helpers::Exec.new("systemctl")
13
+ end
14
+
15
+ def mac_exist?
16
+ File.exist? "#{@systemd_dir}/amnesie-mac@.service"
17
+ end
18
+
19
+ def to_s
20
+ @systemd_dir
21
+ end
22
+
23
+ def mac_service
24
+ dhcp=''
25
+ if TTY::Which.exist?('dhcpcd')
26
+ dhcp='dhcpcd.service'
27
+ end
28
+ @string=<<EOF
29
+ [Unit]
30
+ Description=Spoof MAC Address on %I
31
+ Wants=network-pre.target
32
+ Before=network-pre.target #{dhcp}
33
+ BindsTo=sys-subsystem-net-devices-%i.device
34
+ After=sys-subsystem-net-devices-%i.device
35
+
36
+ [Service]
37
+ Type=oneshot
38
+ ExecStart=/usr/bin/env bash -lc "amnesie -i -m -n %I"
39
+ TimeoutSec=30
40
+
41
+ [Install]
42
+ WantedBy=multi-user.target
43
+ EOF
44
+ end
45
+
46
+ def services
47
+ mac_service
48
+ new_service = Helpers::NewSystemd.new(@string, "amnesie-mac@.service")
49
+ new_service.add
50
+ new_service.perm("root", "644")
51
+ end
52
+
53
+ def update_mac
54
+ print "Found a old amnesie-mac@.service, update? (y|n) "
55
+ answer = gets.chomp
56
+ case answer
57
+ when /^y|^Y/
58
+ services
59
+ end
60
+ end
61
+
62
+ def menu_mac
63
+ print "Action on amnesie-mac@.service for #{@card} (enable/disable) ? (e/d) "
64
+ answer = gets.chomp
65
+ case answer
66
+ when /^e|^E/
67
+ mac_enable
68
+ when /^d|^D/
69
+ mac_disable
70
+ end
71
+ end
72
+
73
+ private
74
+
75
+ def mac_enable
76
+ @systemctl.run("enable amnesie-mac@#{@card}.service")
77
+ end
78
+
79
+ def mac_disable
80
+ @systemctl.run("disable amnesie-mac@#{@card}.service")
81
+ end
82
+
83
+ def search_systemd_dir
84
+ if Dir.exist? "/lib/systemd/system"
85
+ "/lib/systemd/system"
86
+ elsif Dir.exist? "/usr/lib/systemd/system"
87
+ "/usr/lib/systemd/system"
88
+ else
89
+ raise "No directory systemd found"
90
+ exit
91
+ end
92
+ end
93
+ end
94
+ end
@@ -3,25 +3,71 @@ require_relative 'helpers'
3
3
 
4
4
  module Amnesie
5
5
  class Process
6
- def initialize
7
- @procs = [ "dhcpcd", "tor" ]
6
+ def initialize(card)
8
7
  @systemctl = Helpers::Exec.new("systemctl")
9
8
  @pkill = Helpers::Exec.new("pkill")
9
+ @rm = Helpers::Exec.new("rm")
10
+ @card = card
10
11
  end
11
12
 
12
13
  def kill
14
+ kill_dhcpcd
15
+ kill_dhclient
16
+ end
17
+
18
+ def restart
19
+ restart_dhcpcd
20
+ restart_dhclient
21
+ restart_tor
22
+ end
23
+
24
+ private
25
+
26
+ def kill_dhcpcd
13
27
  return if not TTY::Which.exist?('dhcpcd')
14
- @pkill.run("dhcpcd")
28
+ `pgrep -x dhcpcd`
29
+ @pkill.run("dhcpcd") if $?.success?
15
30
  puts "Killed dhcpcd"
16
31
  end
17
32
 
18
- def restart
19
- return if not TTY::Which.exist?('systemctl')
20
- @procs.each do |p|
21
- if TTY::Which.exist?(p)
22
- @systemctl.run("restart #{p}")
23
- puts "Restarted #{p}"
24
- end
33
+ def kill_dhclient
34
+ return if not TTY::Which.exist?('dhclient', paths: ['/sbin'])
35
+ `pgrep -x dhclient`
36
+ @pkill.run("dhclient") if $?.success?
37
+ @rm.run("/run/dhclient.#{@card}.pid") if File.exist? "/run/dhclient.#{@card}.pid"
38
+ @rm.run("/var/lib/dhcp/dhclient.#{@card}.leases") if File.exist? "/var/lib/dhcp/dhclient.#{@card}.leases"
39
+ puts "Killed dhclient"
40
+ end
41
+
42
+ def restart_dhcpcd
43
+ return if not TTY::Which.exist?('dhcpcd')
44
+ if TTY::Which.exist?('systemctl')
45
+ @systemctl.run("restart dhcpcd")
46
+ else
47
+ dhcpcd = Helpers::Exec.new("dhcpcd")
48
+ dhcpcd.run("-q")
49
+ end
50
+ puts "Restarted dhcpcd"
51
+ end
52
+
53
+ def restart_dhclient
54
+ return if not TTY::Which.exist?('dhclient', paths: ['/sbin'])
55
+ dhclient = Helpers::Exec.new("dhclient")
56
+ # command tested on debian, not try on another system yet...
57
+ dhclient.run("-4 -v -i -pf /run/dhclient.#{@card}.pid -lf /var/lib/dhcp/dhclient.#{@card}.leases -I -df /var/lib/dhcp/dhclient6.#{@card}.leases #{@card}")
58
+ if TTY::Which.exist?('systemctl')
59
+ `systemctl is-active ifup@#{@card}`
60
+ @systemctl.run("restart ifup@#{@card}") if $?.success?
61
+ end
62
+ puts "Restarted dhclient"
63
+ end
64
+
65
+ def restart_tor
66
+ return if not TTY::Which.exist?('tor')
67
+ if TTY::Which.exist?('systemctl')
68
+ `systemctl is-active tor`
69
+ @systemctl.run("restart tor") if $?.success?
70
+ puts "Restarted tor"
25
71
  end
26
72
  end
27
73
  end
@@ -2,6 +2,7 @@ require_relative 'options'
2
2
  require_relative 'mac'
3
3
  require_relative 'process'
4
4
  require_relative 'network'
5
+ require_relative 'persist'
5
6
 
6
7
  module Amnesie
7
8
  class Runner
@@ -10,21 +11,37 @@ module Amnesie
10
11
  @options = Options.new(argv)
11
12
  @network = false
12
13
  end
14
+
13
15
  def run
14
16
  if @options.mac then
15
17
  if not @network
16
18
  @network = Amnesie::Network.new(@options.netcard)
17
19
  end
18
20
  puts @network.card
19
- process = Amnesie::Process.new
21
+ process = Amnesie::Process.new(@network.card)
20
22
  card = Amnesie::MAC.new(@network.card)
21
23
 
22
- process.kill
24
+ process.kill unless @options.init
23
25
  card.save_origin
24
26
  card.rand
25
27
  card.apply
26
28
  puts card.to_s
27
- process.restart
29
+ process.restart unless @options.init
30
+ end
31
+ if @options.persist then
32
+ if not @network
33
+ @network = Amnesie::Network.new(@options.netcard)
34
+ end
35
+ puts @network.card
36
+ persist = Amnesie::Persist.new(@network.card)
37
+ if ! persist.mac_exist?
38
+ puts "Create service..."
39
+ persist.services
40
+ elsif persist.mac_exist?
41
+ persist.update_mac
42
+ end
43
+ persist.menu_mac
44
+ puts persist.to_s
28
45
  end
29
46
  end
30
47
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amnesie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - szorfein
@@ -35,7 +35,7 @@ cert_chain:
35
35
  J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
36
36
  Tw==
37
37
  -----END CERTIFICATE-----
38
- date: 2020-05-15 00:00:00.000000000 Z
38
+ date: 2020-05-29 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rake
@@ -136,6 +136,7 @@ files:
136
136
  - lib/amnesie/mac.rb
137
137
  - lib/amnesie/network.rb
138
138
  - lib/amnesie/options.rb
139
+ - lib/amnesie/persist.rb
139
140
  - lib/amnesie/process.rb
140
141
  - lib/amnesie/runner.rb
141
142
  - test/test_mac.rb
@@ -161,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
161
162
  - !ruby/object:Gem::Version
162
163
  version: '0'
163
164
  requirements: []
164
- rubygems_version: 3.1.2
165
+ rubygems_version: 3.1.3
165
166
  signing_key:
166
167
  specification_version: 4
167
168
  summary: A tool to make your computer amnesic
metadata.gz.sig CHANGED
Binary file