ssh: Disallow managing keys for the root user

- Also, set 'username' and 'keys' arguments for the ssh action
  script as required.

Tests performed:
- Setting and deleting ssh keys for the 'tester' user via
  web interface works.
- trying to set keys for the root user
  `./actions/ssh set-keys --username root --keys abc`
  fails with an error.
- trying to get root user keys fails
  `./actions/ssh get-keys --username root`
- running ./actions/ssh get-keys and set-keys without parameters
  shows required arguments.

Signed-off-by: Veiko Aasa <veiko17@disroot.org>
Reviewed-by: Sunil Mohan Adapa <sunil@medhas.org>
This commit is contained in:
Veiko Aasa 2020-07-22 10:29:41 +03:00 committed by Sunil Mohan Adapa
parent 71cabff4d0
commit 8bfe1ce546
No known key found for this signature in database
GPG Key ID: 43EA1CFF0AA7C5F2

View File

@ -26,12 +26,12 @@ def parse_arguments():
get_keys = subparsers.add_parser('get-keys',
help='Get SSH authorized keys')
get_keys.add_argument('--username')
get_keys.add_argument('--username', required=True, type=_managed_user)
set_keys = subparsers.add_parser('set-keys',
help='Set SSH authorized keys')
set_keys.add_argument('--username')
set_keys.add_argument('--keys')
set_keys.add_argument('--username', required=True, type=_managed_user)
set_keys.add_argument('--keys', required=True)
subparsers.add_parser('get-password-config',
help='Get SSH password auth configuration')
@ -44,6 +44,14 @@ def parse_arguments():
return parser.parse_args()
def _managed_user(username):
"""Raise an error if the user is root."""
if pwd.getpwnam(username).pw_gid == 0:
msg = 'User {} is not managed by FreedomBox'.format(username)
raise argparse.ArgumentTypeError(msg)
return username
def subcommand_setup(arguments):
"""Setup Open SSH server.