Post History
authorized_keys You can make restrictions, but it's clunky and not well-standardized. A command stanza on an authorized key works like the ForceCommand on SSHD Config. It runs the one specified co...
Answer
#4: Post edited
- ## *authorized_keys*
- You can make restrictions, but it's clunky and not well-standardized. A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND`, to the user's requested command.
- If the `ForceCommand` is a script, it can validate the original command and choose whether to execute it, to execute something else, or to just quit. There doesn't seem to be a standard for performing this validation.
- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
- ## *sudoers* doesn't work
- In the specific case of `sudo`, one might notice that there are IP and host restrictions mentioned in the documentation for the *sudoers* file. Those restrictions **do not help here.** They are for the IP or resolved name of the computer you SSH into, not the place you SSH from. Those restrictions help administrators make a single *sudoers* policy and push it to a whole network of computers.
- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
- ## *authorized_keys*
- You can make restrictions, but it's clunky and not well-standardized. A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND`, to the user's requested command.
- If the `ForceCommand` is a script, it can validate the original command and choose whether to execute it, to execute something else, or to just quit. There doesn't seem to be a standard for performing this validation.
- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- ```none
- from="1.2.3.4/26" ssh-rsa AAAAB3N9Q== Normal IP for you@example
- from="!1.2.3.4/26",command="sshdo" ssh-rsa AAAAB3N9Q== Weird IP for you@example
- ```
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
- ## *sudoers* doesn't work
- In the specific case of `sudo`, one might notice that there are IP and host restrictions mentioned in the documentation for the *sudoers* file. Those restrictions **do not help here.** They are for the IP or resolved name of the computer you SSH into, not the place you SSH from. Those restrictions help administrators make a single *sudoers* policy and push it to a whole network of computers.
- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
#3: Post edited
## `authorized_keys`- You can make restrictions, but it's clunky and not well-standardized. A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND`, to the user's requested command.
- If the `ForceCommand` is a script, it can validate the original command and choose whether to execute it, to execute something else, or to just quit. There doesn't seem to be a standard for performing this validation.
- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
## `sudoers` doesn't workIn the specific case of `sudo`, one might notice that there are IP and host restrictions mentioned in the documentation for the `sudoers` file. Those restrictions _do not help here._ They are for the IP or resolved name of the computer you SSH into, not the place you SSH from. Those restrictions help administrators make a single `sudoers` policy and push it to a whole network of computers.- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
- ## *authorized_keys*
- You can make restrictions, but it's clunky and not well-standardized. A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND`, to the user's requested command.
- If the `ForceCommand` is a script, it can validate the original command and choose whether to execute it, to execute something else, or to just quit. There doesn't seem to be a standard for performing this validation.
- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
- ## *sudoers* doesn't work
- In the specific case of `sudo`, one might notice that there are IP and host restrictions mentioned in the documentation for the *sudoers* file. Those restrictions **do not help here.** They are for the IP or resolved name of the computer you SSH into, not the place you SSH from. Those restrictions help administrators make a single *sudoers* policy and push it to a whole network of computers.
- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
#2: Post edited
**Yes.** A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND` to the user's requested command.If the `ForceCommand` is a script, it can validate the original command and choose to execute it, execute something else, or just quit. There doesn't seem to be a standard practice for these.- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
- ## `authorized_keys`
- You can make restrictions, but it's clunky and not well-standardized. A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND`, to the user's requested command.
- If the `ForceCommand` is a script, it can validate the original command and choose whether to execute it, to execute something else, or to just quit. There doesn't seem to be a standard for performing this validation.
- - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].)
- - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]).
- **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after.
- ## `sudoers` doesn't work
- In the specific case of `sudo`, one might notice that there are IP and host restrictions mentioned in the documentation for the `sudoers` file. Those restrictions _do not help here._ They are for the IP or resolved name of the computer you SSH into, not the place you SSH from. Those restrictions help administrators make a single `sudoers` policy and push it to a whole network of computers.
- [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand
- [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/
- [case-bad]: https://security.stackexchange.com/a/118694/56961
- [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/
- [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html
#1: Initial revision
**Yes.** A `command` stanza on an authorized key works like the [`ForceCommand` on SSHD Config][forcecommand]. It runs the one specified command _instead of_ your requested command or interactive session and then closes the connection. Obviously this is pretty restrictive, and no one would want to make one key per allowlisted command. But SSH sets an environment variable, `$SSH_ORIGINAL_COMMAND` to the user's requested command. If the `ForceCommand` is a script, it can validate the original command and choose to execute it, execute something else, or just quit. There doesn't seem to be a standard practice for these. - Some people roll [their own `case` statement][case] with a list of allowed commands. (Some people accidentally [do it wrong][case-bad].) - Other people have written longer scripts to manage the allowlists ([`only`][only], [`sshdo`][sshdo]). **Care should be taken not to allow the user to escalate their own privileges** or learn things to formulate a subsequent attack. If they can edit their _authorized_keys_ to remove the hobbling, they can do _anything else,_ right after. [forcecommand]: https://man.openbsd.org/OpenBSD-current/man5/sshd_config.5#ForceCommand [case]: https://web.archive.org/web/20101102234241/https://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/ [case-bad]: https://security.stackexchange.com/a/118694/56961 [only]:https://at.magma-soft.at/sw/blog/posts/The_Only_Way_For_SSH_Forced_Commands/ [sshdo]: https://raf.org/sshdo/manual/sshdo.8.html