This repository has been migrated to the self-hosted ari-web Forgejo instance: https://git.ari.lt/ari/kos
A simple SUID tool written in C++
- Pkg-config: https://www.freedesktop.org/wiki/Software/pkg-config/
- Libxcrypt: https://github.com/besser82/libxcrypt
- Very fast compilation times
- Small amount of dependencies
- GPLv3 License
- Quite simple
- Does not use PAM
- Bash completion (Install
completions/kos.bashinto/usr/share/bash-completion/completions/kos)
- Only supported on Linux
shadow.h is one of the requirements of kos which is a "linux thing",
so automatically won't work on something like OpenBSD, MacOS, SerenityOS or
any other OSes.
Kos will not work on any non-unix OSes as kos uses a lot of
unix stuff, for example pwd.h, meaning will not work on stuff
like Windows and other non-unix OSes.
Though this is not really a big issue, this app is meant to
be ran on linux and was made with the intention to be used on
and with linux...
- Overcomplicated
input_no_echo()function
I used that function because it's literally the only
way I know how to disable eching of STDIN in linux with
C++ without using some huge lib like GNU readline or something...
If you are root you do not need to use su, just run commands directly
CXX=g++ ./scripts/build.sh # Compiles with GCC instead of Clang (default)./scripts/strip.sh kos
su -c 'mkdir -p /usr/local/bin'
su -c 'chown root:root ./kos'
su -c 'install -Dm4111 ./kos /usr/local/bin'Man page installation
su -c 'mkdir -p /usr/share/man/man1'
su -c 'install -Dm0644 kos.1 /usr/share/man/man1/kos.1'
su -c 'mandb -qf /usr/share/man/man1/kos.1'su -c 'cp completions/kos.bash /usr/share/bash-completion/completions/kos'Before running the script you can optionally:
- Set the
DO_STRIPenvironment variable to strip the binary after compilation - Set the
INSTALL_MANenvironment variable to also install man page - Set the
INSTALL_BCOMPenvironment variable to also install bash completion
chmod a+rx ./scripts/setup.sh
su -c './scripts/setup.sh'- Arch Linux
Permission issues (ERROR: Failed getting groups for user ...)
The issue can be solved with one install command:
$ install -Dm4755 -o root "$srcdir/$pkgname-$pkgver/kos" "$pkgdir/usr/bin/kos"
Although this reduces security
- Gentoo Linux:
- Arch Linux
- If you're building for size make sure to build with
-Osor-OzinCXXFLAGSas it barely touches start times but it decreases the size largely, stripping can help too - If you every want to debug kos use
-g -O0CXXFLAGS
There are two scripts in the testing scripts directory,
one is noroot.sh and other root.sh, *.lib.sh are just
libs.
If you want to test it you just run the scripts, though which ones?
- If you have access to root run:
root.sh - If you have access to a non-privileged user run:
noroot.sh - If you have access to both run.. Well both
- Run valgrind on kos
CXXFLAGS='-Og -g' ./scripts/build.sh
valgrind ./kos
valgrind -s ./kosOr run valgrind.sh testing script, will test all compilers, tools and stuff, in general a much more in-depth test
Returns code 127 on failure (detection of a memory leak) and
you can see the log file in valgrind.log
- Clang
- GCC
- Coreutils
- Bash
- Net-tools (or a
hostnamecommand)
You can easily make your own hostname command which is the
only thing testing depends on:
#!/usr/bin/env sh
cat /etc/hostnameAdd this to /usr/bin/hostname and make it executable:
su -c 'chmod 755 /usr/bin/hostname'Just define KOS_H before including the main.cpp file
This section only applies if HAVE_PIPE is set
Kos supports piping to STDIN so you can easily just
pipe (|) the password to STDIN :)
For example:
echo 'Top-secret-passw0rd' | kos idOr even
printf '' | dmenu -l 0 -p 'Password: ' | kos id