mirror of
https://github.com/MrAle98/sliver
synced 2026-06-08 11:54:46 +00:00
d1d2415508
The install script previously assumed that users were each a member of a group named the same as their username. While this is a convention on some systems, it's not universal. This change determines users' primary group name for chown'ing their client config directory instead of making this assumption.
176 lines
5.9 KiB
Bash
176 lines
5.9 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
SLIVER_GPG_KEY_ID=4449039C
|
|
|
|
if [ "$EUID" -ne 0 ]
|
|
then echo "Please run as root"
|
|
exit
|
|
fi
|
|
|
|
if [ -n "$(command -v yum)" ]
|
|
then
|
|
yum -y install gnupg curl gcc gcc-c++ make mingw64-gcc
|
|
fi
|
|
|
|
if [ -n "$(command -v apt-get)" ]
|
|
then
|
|
DEBIAN_FRONTEND=noninteractive apt-get install -yqq \
|
|
gpg curl build-essential \
|
|
mingw-w64 binutils-mingw-w64 g++-mingw-w64
|
|
fi
|
|
|
|
# Curl
|
|
if ! command -v curl &> /dev/null
|
|
then
|
|
echo "curl could not be found"
|
|
exit 1
|
|
fi
|
|
# Awk
|
|
if ! command -v awk &> /dev/null
|
|
then
|
|
echo "awk could not be found"
|
|
exit 1
|
|
fi
|
|
# GPG
|
|
if ! command -v gpg &> /dev/null
|
|
then
|
|
echo "gpg could not be found"
|
|
exit 1
|
|
fi
|
|
|
|
cd /root
|
|
echo "Running from $(pwd)"
|
|
|
|
gpg --import <<EOF
|
|
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
|
|
|
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
|
|
=lxj2
|
|
-----END PGP PUBLIC KEY BLOCK-----
|
|
EOF
|
|
|
|
#
|
|
# Download and Unpack Sliver Server
|
|
#
|
|
ARTIFACTS=$(curl -s "https://api.github.com/repos/BishopFox/sliver/releases/latest" | awk -F '"' '/browser_download_url/{print $4}')
|
|
SLIVER_SERVER='sliver-server_linux'
|
|
SLIVER_CLIENT='sliver-client_linux'
|
|
|
|
|
|
for URL in $ARTIFACTS
|
|
do
|
|
if [[ "$URL" == *"$SLIVER_SERVER"* ]]; then
|
|
echo "Downloading $URL"
|
|
curl --silent -L $URL --output $(basename $URL)
|
|
fi
|
|
if [[ "$URL" == *"$SLIVER_CLIENT"* ]]; then
|
|
echo "Downloading $URL"
|
|
curl --silent -L $URL --output $(basename $URL)
|
|
fi
|
|
done
|
|
|
|
echo "Verifying signatures ..."
|
|
gpg --default-key $SLIVER_GPG_KEY_ID --verify /root/$SLIVER_SERVER.sig /root/$SLIVER_SERVER
|
|
gpg --default-key $SLIVER_GPG_KEY_ID --verify /root/$SLIVER_CLIENT.sig /root/$SLIVER_CLIENT
|
|
|
|
if test -f "/root/$SLIVER_SERVER"; then
|
|
mv /root/$SLIVER_SERVER /root/sliver-server
|
|
chmod 755 /root/sliver-server
|
|
/root/sliver-server unpack --force
|
|
else
|
|
exit 3
|
|
fi
|
|
|
|
if test -f "/root/$SLIVER_CLIENT"; then
|
|
chmod 755 /root/$SLIVER_CLIENT
|
|
cp -vv /root/$SLIVER_CLIENT /usr/local/bin/sliver
|
|
chmod 755 /usr/local/bin/sliver
|
|
else
|
|
exit 3
|
|
fi
|
|
|
|
# systemd
|
|
echo "Configuring systemd service ..."
|
|
cat > /etc/systemd/system/sliver.service <<-EOF
|
|
[Unit]
|
|
Description=Sliver
|
|
After=network.target
|
|
StartLimitIntervalSec=0
|
|
|
|
[Service]
|
|
Type=simple
|
|
Restart=on-failure
|
|
RestartSec=3
|
|
User=root
|
|
ExecStart=/root/sliver-server daemon
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
EOF
|
|
chown root:root /etc/systemd/system/sliver.service
|
|
chmod 600 /etc/systemd/system/sliver.service
|
|
systemctl start sliver
|
|
|
|
# Generate local configs
|
|
echo "Generating operator configs ..."
|
|
mkdir -p /root/.sliver-client/configs
|
|
/root/sliver-server operator --name root --lhost localhost --save /root/.sliver-client/configs
|
|
chown -R root:root /root/.sliver-client/
|
|
|
|
USER_DIRS=(/home/*)
|
|
for USER_DIR in "${USER_DIRS[@]}"; do
|
|
USER=$(basename $USER_DIR)
|
|
if id -u $USER >/dev/null 2>&1; then
|
|
mkdir -p $USER_DIR/.sliver-client/configs
|
|
/root/sliver-server operator --name $USER --lhost localhost --save $USER_DIR/.sliver-client/configs
|
|
chown -R $USER:"$(id -gn $USER)" $USER_DIR/.sliver-client/
|
|
fi
|
|
done
|