diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | Makefile | 14 | ||||
-rw-r--r-- | README.md | 45 | ||||
-rw-r--r-- | nullshell.c | 47 |
4 files changed, 106 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..55457e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +nullshell diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..5a12c27 --- /dev/null +++ b/Makefile @@ -0,0 +1,14 @@ +PREFIX := /usr +CC := gcc +INSTALL := install +RM := rm +CFLAGS += -O2 -Wall -Werror + +nullshell: nullshell.c + $(CC) $(CFLAGS) $(LDFLAGS) nullshell.c -o nullshell + +install: nullshell + $(INSTALL) nullshell $(DESTDIR)$(PREFIX)/bin/nullshell + +clean: + $(RM) -f nullshell @@ -1,4 +1,47 @@ nullshell ========= -do nothing but print asterisks, can be used for login shell +**do nothing but print asterisks, can be used for login shell** + +This is a minimal program that does nothing but print asteriks every now +and then. It is intended to be used for login shell with accounts +accessible via secure shell that are used for secure tunneling but +should not allow to execute commands. + +Requirements +------------ + +To compile and run `nullshell` you need: + +* nothing (this is plain C) +* [markdown](http://daringfireball.net/projects/markdown/) (HTML documentation) + +Additionally it is expected to have `make` and a C compiler around to +successfully compile. + +Build and install +----------------- + +Building and installing is very easy. Just run: + +> make + +followed by: + +> make install + +This will place an executable at `/usr/bin/nullshell`. + +Usage +----- + +To create a new user `user` with `nullshell` as login shell just run: + +> useradd -s /usr/bin/nullshell user + +Or to make `nullshell` the login shell for an existing user `user`: + +> usermod -s /usr/bin/nullshell user + +Make sure `/usr/bin/nullshell` is listed in `/etc/shells` if your system +expects this. diff --git a/nullshell.c b/nullshell.c new file mode 100644 index 0000000..1c14d7c --- /dev/null +++ b/nullshell.c @@ -0,0 +1,47 @@ +/* + * (C) 2013 by Christian Hesse <mail@eworm.de> + * + * This software may be used and distributed according to the terms + * of the GNU General Public License, incorporated herein by reference. + * + * Based on ideas from Sleep Dummy Shell (SleepShell) + * by Mario A. Valdez-Ramirez (http://www.mariovaldez.net/) + */ + +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +#define SLEEPTIME 10 + +int main(int argc, char **argv) { + char *ssh_connection, *ssh_client, *ssh_tty; + + /* read environment variables */ + ssh_connection = getenv("SSH_CONNECTION"); + ssh_client = getenv("SSH_CLIENT"); + ssh_tty = getenv("SSH_TTY"); + + /* clear the screen */ + fputs("\033[2J\033[1;1H", stdout); + fflush(NULL); + + /* print some info if available */ + if (ssh_connection != NULL && ssh_client != NULL) { + printf("Connection: %s\nClient: %s\n", ssh_connection, ssh_client); + if (ssh_tty != NULL) + printf("Terminal: %s\n", ssh_tty); + } + + /* print an asterisk every SLEEPTIME seconds */ + while (1) { + sleep(SLEEPTIME); + putchar('*'); + fflush(NULL); + } + + /* we should never get here.... */ + return EXIT_SUCCESS; +} + +// vim: set syntax=c: |