8
8
expected_results = {
9
9
"postgres" : [
10
10
{"groupname" : "postgres" , "username" : "postgres" },
11
- {"groupname" : "ssl-cert" , "username" : "postgres" }
11
+ {"groupname" : "ssl-cert" , "username" : "postgres" },
12
12
],
13
13
"ubuntu" : [
14
- {'groupname' : 'adm' , 'username' : 'ubuntu' },
15
- {'groupname' : 'audio' , 'username' : 'ubuntu' },
16
- {'groupname' : 'cdrom' , 'username' : 'ubuntu' },
17
- {'groupname' : 'dialout' , 'username' : 'ubuntu' },
18
- {'groupname' : 'dip' , 'username' : 'ubuntu' },
19
- {'groupname' : 'floppy' , 'username' : 'ubuntu' },
20
- {'groupname' : 'lxd' , 'username' : 'ubuntu' },
21
- {'groupname' : 'netdev' , 'username' : 'ubuntu' },
22
- {'groupname' : 'plugdev' , 'username' : 'ubuntu' },
23
- {'groupname' : 'sudo' , 'username' : 'ubuntu' },
24
- {'groupname' : 'ubuntu' , 'username' : 'ubuntu' },
25
- {'groupname' : 'video' , 'username' : 'ubuntu' }
26
- ],
27
- "root" : [
28
- {"groupname" :"root" ,"username" :"root" }
29
- ],
30
- "daemon" : [
31
- {"groupname" :"daemon" ,"username" :"daemon" }
32
- ],
33
- "bin" : [
34
- {"groupname" :"bin" ,"username" :"bin" }
35
- ],
36
- "sys" : [
37
- {"groupname" :"sys" ,"username" :"sys" }
38
- ],
39
- "sync" : [
40
- {"groupname" :"nogroup" ,"username" :"sync" }
41
- ],
42
- "games" : [
43
- {"groupname" :"games" ,"username" :"games" }
44
- ],
45
- "man" : [
46
- {"groupname" :"man" ,"username" :"man" }
47
- ],
48
- "lp" : [
49
- {"groupname" :"lp" ,"username" :"lp" }
50
- ],
51
- "mail" : [
52
- {"groupname" :"mail" ,"username" :"mail" }
53
- ],
54
- "news" : [
55
- {"groupname" :"news" ,"username" :"news" }
56
- ],
57
- "uucp" : [
58
- {"groupname" :"uucp" ,"username" :"uucp" }
59
- ],
60
- "proxy" : [
61
- {"groupname" :"proxy" ,"username" :"proxy" }
62
- ],
63
- "www-data" : [
64
- {"groupname" :"www-data" ,"username" :"www-data" }
65
- ],
66
- "backup" : [
67
- {"groupname" :"backup" ,"username" :"backup" }
68
- ],
69
- "list" : [
70
- {"groupname" :"list" ,"username" :"list" }
71
- ],
72
- "irc" : [
73
- {"groupname" :"irc" ,"username" :"irc" }
74
- ],
75
- "gnats" : [
76
- {"groupname" :"gnats" ,"username" :"gnats" }
77
- ],
78
- "nobody" : [
79
- {"groupname" :"nogroup" ,"username" :"nobody" }
80
- ],
14
+ {"groupname" : "adm" , "username" : "ubuntu" },
15
+ {"groupname" : "audio" , "username" : "ubuntu" },
16
+ {"groupname" : "cdrom" , "username" : "ubuntu" },
17
+ {"groupname" : "dialout" , "username" : "ubuntu" },
18
+ {"groupname" : "dip" , "username" : "ubuntu" },
19
+ {"groupname" : "floppy" , "username" : "ubuntu" },
20
+ {"groupname" : "lxd" , "username" : "ubuntu" },
21
+ {"groupname" : "netdev" , "username" : "ubuntu" },
22
+ {"groupname" : "plugdev" , "username" : "ubuntu" },
23
+ {"groupname" : "sudo" , "username" : "ubuntu" },
24
+ {"groupname" : "ubuntu" , "username" : "ubuntu" },
25
+ {"groupname" : "video" , "username" : "ubuntu" },
26
+ ],
27
+ "root" : [{"groupname" : "root" , "username" : "root" }],
28
+ "daemon" : [{"groupname" : "daemon" , "username" : "daemon" }],
29
+ "bin" : [{"groupname" : "bin" , "username" : "bin" }],
30
+ "sys" : [{"groupname" : "sys" , "username" : "sys" }],
31
+ "sync" : [{"groupname" : "nogroup" , "username" : "sync" }],
32
+ "games" : [{"groupname" : "games" , "username" : "games" }],
33
+ "man" : [{"groupname" : "man" , "username" : "man" }],
34
+ "lp" : [{"groupname" : "lp" , "username" : "lp" }],
35
+ "mail" : [{"groupname" : "mail" , "username" : "mail" }],
36
+ "news" : [{"groupname" : "news" , "username" : "news" }],
37
+ "uucp" : [{"groupname" : "uucp" , "username" : "uucp" }],
38
+ "proxy" : [{"groupname" : "proxy" , "username" : "proxy" }],
39
+ "www-data" : [{"groupname" : "www-data" , "username" : "www-data" }],
40
+ "backup" : [{"groupname" : "backup" , "username" : "backup" }],
41
+ "list" : [{"groupname" : "list" , "username" : "list" }],
42
+ "irc" : [{"groupname" : "irc" , "username" : "irc" }],
43
+ "gnats" : [{"groupname" : "gnats" , "username" : "gnats" }],
44
+ "nobody" : [{"groupname" : "nogroup" , "username" : "nobody" }],
81
45
"systemd-network" : [
82
- {"groupname" :"systemd-network" ,"username" :"systemd-network" }
46
+ {"groupname" : "systemd-network" , "username" : "systemd-network" }
83
47
],
84
48
"systemd-resolve" : [
85
- {"groupname" :"systemd-resolve" ,"username" :"systemd-resolve" }
49
+ {"groupname" : "systemd-resolve" , "username" : "systemd-resolve" }
86
50
],
87
51
"systemd-timesync" : [
88
- {"groupname" :"systemd-timesync" ,"username" :"systemd-timesync" }
89
- ],
90
- "messagebus" : [
91
- {"groupname" :"messagebus" ,"username" :"messagebus" }
52
+ {"groupname" : "systemd-timesync" , "username" : "systemd-timesync" }
92
53
],
54
+ "messagebus" : [{"groupname" : "messagebus" , "username" : "messagebus" }],
93
55
"ec2-instance-connect" : [
94
56
{"groupname" : "nogroup" , "username" : "ec2-instance-connect" }
95
57
],
96
- "sshd" : [
97
- {"groupname" :"nogroup" ,"username" :"sshd" }
98
- ],
58
+ "sshd" : [{"groupname" : "nogroup" , "username" : "sshd" }],
99
59
"wal-g" : [
100
- {"groupname" :"postgres" ,"username" :"wal-g" },
101
- {"groupname" :"wal-g" ,"username" :"wal-g" }
60
+ {"groupname" : "postgres" , "username" : "wal-g" },
61
+ {"groupname" : "wal-g" , "username" : "wal-g" },
102
62
],
103
63
"pgbouncer" : [
104
- {"groupname" :"pgbouncer" ,"username" :"pgbouncer" },
105
- {"groupname" :"postgres" ,"username" :"pgbouncer" },
106
- {"groupname" :"ssl-cert" ,"username" :"pgbouncer" }
107
- ],
108
- "gotrue" : [
109
- {"groupname" :"gotrue" ,"username" :"gotrue" }
110
- ],
111
- "envoy" : [
112
- {"groupname" :"envoy" ,"username" :"envoy" }
113
- ],
114
- "kong" : [
115
- {"groupname" :"kong" ,"username" :"kong" }
116
- ],
117
- "nginx" : [
118
- {"groupname" :"nginx" ,"username" :"nginx" }
119
- ],
64
+ {"groupname" : "pgbouncer" , "username" : "pgbouncer" },
65
+ {"groupname" : "postgres" , "username" : "pgbouncer" },
66
+ {"groupname" : "ssl-cert" , "username" : "pgbouncer" },
67
+ ],
68
+ "gotrue" : [{"groupname" : "gotrue" , "username" : "gotrue" }],
69
+ "envoy" : [{"groupname" : "envoy" , "username" : "envoy" }],
70
+ "kong" : [{"groupname" : "kong" , "username" : "kong" }],
71
+ "nginx" : [{"groupname" : "nginx" , "username" : "nginx" }],
120
72
"vector" : [
121
- {"groupname" :"adm" ,"username" :"vector" },
122
- {"groupname" :"postgres" ,"username" :"vector" },
123
- {"groupname" :"systemd-journal" ,"username" :"vector" },
124
- {"groupname" :"vector" ,"username" :"vector" }
73
+ {"groupname" : "adm" , "username" : "vector" },
74
+ {"groupname" : "postgres" , "username" : "vector" },
75
+ {"groupname" : "systemd-journal" , "username" : "vector" },
76
+ {"groupname" : "vector" , "username" : "vector" },
125
77
],
126
78
"adminapi" : [
127
- {"groupname" :"admin" ,"username" :"adminapi" },
128
- {"groupname" :"adminapi" ,"username" :"adminapi" },
129
- {"groupname" :"envoy" ,"username" :"adminapi" },
130
- {"groupname" :"kong" ,"username" :"adminapi" },
131
- {"groupname" :"pgbouncer" ,"username" :"adminapi" },
132
- {"groupname" :"postgres" ,"username" :"adminapi" },
133
- {"groupname" :"postgrest" ,"username" :"adminapi" },
134
- {"groupname" :"root" ,"username" :"adminapi" },
135
- {"groupname" :"systemd-journal" ,"username" :"adminapi" },
136
- {"groupname" :"vector" ,"username" :"adminapi" },
137
- {"groupname" :"wal-g" ,"username" :"adminapi" }
138
- ],
139
- "postgrest" : [
140
- {"groupname" :"postgrest" ,"username" :"postgrest" }
141
- ],
142
- "tcpdump" : [
143
- {"groupname" :"tcpdump" ,"username" :"tcpdump" }
144
- ],
79
+ {"groupname" : "admin" , "username" : "adminapi" },
80
+ {"groupname" : "adminapi" , "username" : "adminapi" },
81
+ {"groupname" : "envoy" , "username" : "adminapi" },
82
+ {"groupname" : "kong" , "username" : "adminapi" },
83
+ {"groupname" : "pgbouncer" , "username" : "adminapi" },
84
+ {"groupname" : "postgres" , "username" : "adminapi" },
85
+ {"groupname" : "postgrest" , "username" : "adminapi" },
86
+ {"groupname" : "root" , "username" : "adminapi" },
87
+ {"groupname" : "systemd-journal" , "username" : "adminapi" },
88
+ {"groupname" : "vector" , "username" : "adminapi" },
89
+ {"groupname" : "wal-g" , "username" : "adminapi" },
90
+ ],
91
+ "postgrest" : [{"groupname" : "postgrest" , "username" : "postgrest" }],
92
+ "tcpdump" : [{"groupname" : "tcpdump" , "username" : "tcpdump" }],
145
93
"systemd-coredump" : [
146
- {"groupname" :"systemd-coredump" ,"username" :"systemd-coredump" }
147
- ]
94
+ {"groupname" : "systemd-coredump" , "username" : "systemd-coredump" }
95
+ ],
148
96
}
149
97
150
98
151
99
# This program depends on osquery being installed on the system
152
100
# Function to run osquery
153
101
def run_osquery (query ):
154
- process = subprocess .Popen (['osqueryi' , '--json' , query ], stdout = subprocess .PIPE , stderr = subprocess .PIPE )
102
+ process = subprocess .Popen (
103
+ ["osqueryi" , "--json" , query ], stdout = subprocess .PIPE , stderr = subprocess .PIPE
104
+ )
155
105
output , error = process .communicate ()
156
- return output .decode (' utf-8' )
106
+ return output .decode (" utf-8" )
157
107
158
108
159
109
def parse_json (json_str ):
@@ -173,7 +123,9 @@ def compare_results(username, query_result):
173
123
if query_result == expected_result :
174
124
print (f"The query result for user '{ username } ' matches the expected result." )
175
125
else :
176
- print (f"The query result for user '{ username } ' does not match the expected result." )
126
+ print (
127
+ f"The query result for user '{ username } ' does not match the expected result."
128
+ )
177
129
print ("Expected:" , expected_result )
178
130
print ("Got:" , query_result )
179
131
sys .exit (1 )
@@ -191,23 +143,68 @@ def check_nixbld_users():
191
143
parsed_result = parse_json (query_result )
192
144
193
145
for user in parsed_result :
194
- if user ['groupname' ] != 'nixbld' :
195
- print (f"User '{ user ['username' ]} ' is in group '{ user ['groupname' ]} ' instead of 'nixbld'." )
146
+ if user ["groupname" ] != "nixbld" :
147
+ print (
148
+ f"User '{ user ['username' ]} ' is in group '{ user ['groupname' ]} ' instead of 'nixbld'."
149
+ )
196
150
sys .exit (1 )
197
151
198
152
print ("All nixbld users are in the 'nixbld' group." )
199
153
200
154
201
155
def main ():
202
156
parser = argparse .ArgumentParser (
203
- prog = 'Supabase Postgres Artifact Permissions Checker' ,
204
- description = 'Checks the Postgres Artifact for the appropriate users and group memberships' )
205
- parser .add_argument ('-q' , '--qemu' , action = 'store_true' , help = 'Whether we are checking a QEMU artifact' )
157
+ prog = "Supabase Postgres Artifact Permissions Checker" ,
158
+ description = "Checks the Postgres Artifact for the appropriate users and group memberships" ,
159
+ )
160
+ parser .add_argument (
161
+ "-q" ,
162
+ "--qemu" ,
163
+ action = "store_true" ,
164
+ help = "Whether we are checking a QEMU artifact" ,
165
+ )
206
166
args = parser .parse_args ()
207
167
qemu_artifact = args .qemu or False
208
168
209
169
# Define usernames for which you want to compare results
210
- usernames = ["postgres" , "ubuntu" , "root" , "daemon" , "bin" , "sys" , "sync" , "games" ,"man" ,"lp" ,"mail" ,"news" ,"uucp" ,"proxy" ,"www-data" ,"backup" ,"list" ,"irc" ,"gnats" ,"nobody" ,"systemd-network" ,"systemd-resolve" ,"systemd-timesync" ,"messagebus" ,"sshd" ,"wal-g" ,"pgbouncer" ,"gotrue" ,"envoy" ,"kong" ,"nginx" ,"vector" ,"adminapi" ,"postgrest" ,"tcpdump" ,"systemd-coredump" ]
170
+ usernames = [
171
+ "postgres" ,
172
+ "ubuntu" ,
173
+ "root" ,
174
+ "daemon" ,
175
+ "bin" ,
176
+ "sys" ,
177
+ "sync" ,
178
+ "games" ,
179
+ "man" ,
180
+ "lp" ,
181
+ "mail" ,
182
+ "news" ,
183
+ "uucp" ,
184
+ "proxy" ,
185
+ "www-data" ,
186
+ "backup" ,
187
+ "list" ,
188
+ "irc" ,
189
+ "gnats" ,
190
+ "nobody" ,
191
+ "systemd-network" ,
192
+ "systemd-resolve" ,
193
+ "systemd-timesync" ,
194
+ "messagebus" ,
195
+ "sshd" ,
196
+ "wal-g" ,
197
+ "pgbouncer" ,
198
+ "gotrue" ,
199
+ "envoy" ,
200
+ "kong" ,
201
+ "nginx" ,
202
+ "vector" ,
203
+ "adminapi" ,
204
+ "postgrest" ,
205
+ "tcpdump" ,
206
+ "systemd-coredump" ,
207
+ ]
211
208
if not qemu_artifact :
212
209
usernames .append ("ec2-instance-connect" )
213
210
0 commit comments