Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Enhance usability allowing password from stdin when not in a tty #82

Closed
endorama opened this issue Jul 19, 2018 · 3 comments
Closed

Enhance usability allowing password from stdin when not in a tty #82

endorama opened this issue Jul 19, 2018 · 3 comments

Comments

@endorama
Copy link
Contributor

Hello, first of all thank you for this project, its really helpful!

I would like to propose a change to increase integration possibilities of this tool with other security tools ( mainly a password manager ).

Currently due to the implementation of password read you face 2 choices:

  1. write the password when asked ( which ends with copy-paste if you have a complex password )
  2. use the keyring

The implementation is in aws_google_auth/__init__.py#L168:L178:

        # There is no way (intentional) to pass in the password via the command
        # line nor environment variables. This prevents password leakage.
        if config.keyring:
            keyring_password = keyring.get_password(
                "aws-google-auth", config.username)
            if keyring_password:
                config.password = keyring_password
            else:
                config.password = getpass.getpass("Google Password: ")
        else:
            config.password = getpass.getpass("Google Password: ")

Option 2 avoids copy-paste but lacks flexibility: if the password changes often, you still have no other choice than copy-paste.
Option 1 is tedious, as you have to copy-paste your password at each login. Plus working with multiple accounts makes this more tedious. More over the password is stored in the OS clipboard, which is prone to accidental paste in other places.

A general good strategy for managing passwords is a password manager. That could avoid usability issues in both option 1 and 2 ( password is always up to date and there could be no need to copy-paste ).

Unfortunately as aws-google-auth does not implement any non-tty input method, there is no way to directly pipe the output of the password manager in the getpass input. That would be really handy, and would increase security.

The objection that could be raised in letting user do this is that it allows passing the password from the command line. In my option however, there could be a way that respect your concerns for password leakage ( please note that copy-paste does not reduce that risk whatsoever ) while increasing usability.

The implementation I'm looking at is along the line of:

if sys.stdin.isatty():
    password = getpass.getpass("Google Password: ")
else:
    password = sys.stdin.readline()

This would allow to keep the current behaviour while allowing direct pipe from another software in this tool:

$ password-manager show password | aws-google-auth

In my option it also has enough friction to discourage users from writing the password in the terminal ( like echo "password" | aws-google-auth ): writing echo ... | is way less handy than using the interactive method.

Thank you for considering this feature request.

@nonspecialist
Copy link
Contributor

That's a reasonable proposal, I think ... as you say it doesn't stop people from intentionally shooting themselves in the foot, but that's not our role anyhow.

If you'd like to craft a pull request, we'll give it a whirl.

@mide
Copy link
Contributor

mide commented Jul 26, 2018

That’s a good point that I had previously not considered. We don’t need to prevent people from shooting themselves in the foot.

That said, maybe a warning (non blocking) when a password is passed in via the CLI?

@stevemac007
Copy link
Contributor

Merged fix a while ago.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants