feat: run_as_root / run_as_steam

This commit is contained in:
GenZmeY 2020-08-07 13:51:21 +03:00
parent 36f1d5514d
commit efb4094d13
28 changed files with 292 additions and 16 deletions

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () # $*: ban list function cmd_main () # $*: ban list
{ {
include "$LibDir/ban.lib" include "$LibDir/ban.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () # $*: ban list function cmd_main () # $*: ban list
{ {
include "$LibDir/ban.lib" include "$LibDir/ban.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/ban.lib" include "$LibDir/ban.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/ban.lib" include "$LibDir/ban.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/game.lib" include "$LibDir/game.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/game.lib" include "$LibDir/game.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/game.lib" include "$LibDir/game.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/game.lib" include "$LibDir/game.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
true
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/instance.lib" include "$LibDir/instance.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () # $*: Instance[s] function cmd_main () # $*: Instance[s]
{ {
include "$LibDir/maprotate.lib" include "$LibDir/maprotate.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () # $*: Instance[s] function cmd_main () # $*: Instance[s]
{ {
include "$LibDir/maprotate.lib" include "$LibDir/maprotate.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/password.lib" include "$LibDir/password.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/password.lib" include "$LibDir/password.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/workshop.lib" include "$LibDir/workshop.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/workshop.lib" include "$LibDir/workshop.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
false
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/workshop.lib" include "$LibDir/workshop.lib"

View File

@ -34,6 +34,16 @@ function cmd_help ()
echo "TODO: description" echo "TODO: description"
} }
function cmd_need_superuser ()
{
false
}
function cmd_need_steamuser ()
{
true
}
function cmd_main () function cmd_main ()
{ {
include "$LibDir/workshop.lib" include "$LibDir/workshop.lib"

View File

@ -37,19 +37,16 @@ function include () # $1: Lib
function is_help () # $1: Arg function is_help () # $1: Arg
{ {
echo "$1" | grep -Piqo '^(-h|--help|help)$' echo "$1" | grep -Piqo '^(-h|--help|help)$'
return $?
} }
function is_version () # $1: Arg function is_version () # $1: Arg
{ {
echo "$1" | grep -Piqo '^(-v|--version|version)$' echo "$1" | grep -Piqo '^(-v|--version|version)$'
return $?
} }
function function_exists () # $1: function name function function_exists () # $1: function name
{ {
type "$1" &> /dev/null type "$1" &> /dev/null
return $?
} }
function indent () # $1: Level function indent () # $1: Level
@ -148,7 +145,13 @@ elif [[ -d "$GroupPathname" ]]; then
fi fi
else else
if function_exists "cmd_main"; then if function_exists "cmd_main"; then
if function_exists "cmd_need_superuser" && cmd_need_superuser; then
run_as_root "$ScriptFullname" "$Group" "$Command" "$@"
elif function_exists "cmd_need_steamuser" && cmd_need_steamuser; then
run_as_steamuser "$ScriptFullname" "$Group" "$Command" "$@"
else
cmd_main "$@" cmd_main "$@"
fi
else else
echo "No implementation for the command $Command" echo "No implementation for the command $Command"
fi fi

View File

@ -19,6 +19,30 @@
# You should have received a copy of the GNU General Public License # You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>. # along with this program. If not, see <https://www.gnu.org/licenses/>.
function run_as_steamuser () # $@: command
{
include /etc/steamcmd/steamcmd.conf
if [[ "$USER" == "$SteamUser" ]]; then
"$@"
elif [[ -n $(groups "$USER" | grep -Fo 'wheel') ]] || [[ "$EUID" -eq 0 ]]; then
sudo -u "$SteamUser" "$@"
else
echo "You must be a $SteamUser, root or sudo-user to run this command."
fi
}
function run_as_root () # $@: command
{
if [[ "$EUID" -eq 0 ]]; then
"$@"
elif [[ -n $(groups "$USER" | grep -Fo 'wheel') ]]; then
sudo "$@"
else
echo "You must be root or sudo-user to run this command."
fi
}
InstallDir=":DEFINE_PREFIX:/games/kf2-srv${KF2POSTFIX}" InstallDir=":DEFINE_PREFIX:/games/kf2-srv${KF2POSTFIX}"
AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64" AppBin="$InstallDir/Binaries/Win64/KFGameSteamServer.bin.x86_64"

3
TODO
View File

@ -1,9 +1,8 @@
- selinux - selinux
- sudo for steamuser - sudo for steamuser
- kick by level - kick by level
- split the script into separate files
- man pages - man pages
- english help - write help pages for each command
- check ban EGS players (mb bugs) - check ban EGS players (mb bugs)
- ban history - ban history
- temporary ban - temporary ban