added two files, TODO: things that still need to be taken care of that may be too long to write in the source code config.template: mockups of the config filenoproxy
parent
5ef9bd4200
commit
eefd0545cd
@ -0,0 +1,5 @@ |
||||
- Modify the following environment variables: (listed in environ(7)) |
||||
* USER -> to target user |
||||
* LOGNAME -> to target user |
||||
* SHELL -> to the target user's SHELL |
||||
* HOME -> to the target user's HOME |
@ -0,0 +1,96 @@ |
||||
SECURITY CONSIDERATIONS |
||||
======================= |
||||
|
||||
1. commands must be given by absolute path, that's because if you do otherwise |
||||
nopassword commands could be hijacked: |
||||
|
||||
in the config: |
||||
nopass badguy as root cmd zzz |
||||
in the shell: |
||||
~ $ export PATH=/home/badguy/test:$PATH |
||||
~ $ mkdir test |
||||
~ $ printf '#!/bin/sh\nrm -rf --no-preserve-root' > test/zzz |
||||
~ $ chmod +x test/zzz |
||||
~ $ us zzz #this deletes the filesystem without password! |
||||
|
||||
IDEA 1 |
||||
====== |
||||
|
||||
# this is a comment |
||||
# rules are goruped by user/group |
||||
# rules are structured somewhat like json, example: |
||||
|
||||
# Only 'command' is allowed to run without a password, all the rest is blocked |
||||
ale { |
||||
allow { |
||||
command nopass |
||||
} |
||||
|
||||
deny { |
||||
/.*/ |
||||
} |
||||
} |
||||
|
||||
IDEA 2 - THE DOAS WAY |
||||
===================== |
||||
|
||||
# this is a comment |
||||
# every line is a rule |
||||
# rules are structured like this: |
||||
|
||||
permit|deny [options] identity [as target] [cmd command [args ...]] |
||||
|
||||
# look at doas.conf(5) for more information |
||||
|
||||
IDEA 2-3 |
||||
======== |
||||
|
||||
# reverse-doas way |
||||
-> identity permit|deny [command [args ...]] [options] |
||||
|
||||
# but how would I distinguish between command and options? |
||||
-> identity [options] permit|deny [command [args ...]] |
||||
|
||||
# spaces are not a very good separatow when in comes to commands |
||||
-> identity,[options],permit|deny,[command [args ...]] |
||||
|
||||
# |
||||
# this is kinda similar to a crontab, basically options are required |
||||
# |
||||
|
||||
# config structure: |
||||
-> identity options as action [command [args ...]] |
||||
^ ^ ^ ^ |
||||
can be * | | permit, deny |
||||
can be nil (NULL) | |
||||
can be * |
||||
|
||||
# permit user "ale" to execute command "shutdown" as root without password: |
||||
-> ale nopass root permit shutdown |
||||
# permit members of the wheel group to execute any comands as any user: |
||||
-> :wheel nil * permit |
||||
# deny users of the wheel group to execute commands that begin with "sys": |
||||
# this could be circumvented by having the command inside a shell script |
||||
-> :wheel nil * deny /sys.*/ |
||||
# deny all users to execute all comands as any other user |
||||
-> * nil * deny |
||||
# |
||||
# let's scramble things up to make more sense |
||||
# |
||||
[action] options identity as [command [args ...]] |
||||
^ ^ ^ ^ |
||||
| | can both be * (any) |
||||
| can be none, comma separated |
||||
none: permit |
||||
'!': deny (negate rule) |
||||
|
||||
# allow users of the wheel group to execute any command as root: |
||||
-> none :wheel root |
||||
# deny all users to execute commands that start with "sys" |
||||
-> ! none * * /sys.*/ |
||||
|
||||
IDEA 3 - THE SUCKLESS WAY |
||||
========================= |
||||
|
||||
configuration should happen inside a source file called config.h, to apply |
||||
changes to the configuration the program has to be recompiled |
Loading…
Reference in new issue