From 63d42efc9dc3f5cf13856cf08aaa807bfd8982e5 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Fri, 20 Dec 2013 11:50:21 +0100 Subject: initial commit --- .gitignore | 1 + Makefile | 14 ++++++++++++++ README.md | 45 ++++++++++++++++++++++++++++++++++++++++++++- nullshell.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 nullshell.c 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 diff --git a/README.md b/README.md index 07c480d..335ca12 100644 --- a/README.md +++ b/README.md @@ -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 + * + * 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 +#include +#include + +#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: -- cgit v1.2.3-54-g00ecf