diff --git a/README.html b/README.html index 6bfb605..35c0535 100644 --- a/README.html +++ b/README.html @@ -327,7 +327,7 @@ This is bashbot, the Telegram bot written entirely in bash. It features background tasks and interactive chats, and can serve as an interface for CLI programs.
For more Information on how to install, customize and use your new bot, read the Documentation
Since version 0.96 bashbot log commands received/send and connection errors. If you start bashbot in debug mode bash stdout, stderr and all send/received telegram message are logged also.
+Bashbot actions are logged in BASHBOT.log, Telegram send/receive errors are logged to ERROR.log. Start bashbot in debug mode to get all messages send to / received from Telegram and error messages of bash commands also.
To enable debug mode start bashbot with debug as third argument: bashbot start debug
├── logs
│ ├── BASHBOT.log # log what your bot is doing ...
@@ -340,28 +340,10 @@ It features background tasks and interactive chats, and can serve as an interfac
Running a Telegram Bot means it is connected to the public and you never know what's send to your Bot.
Bash scripts in general are not designed to be bullet proof, so consider this Bot as a proof of concept. Bash programmers often struggle with 'quoting hell' and globbing, see Implications of wrong quoting
Whenever you are processing input from untrusted sources (messages, files, network) you must be as careful as possible, e.g. set IFS appropriate, disable globbing (set -f) and quote everything. In addition delete unused scripts and examples from your Bot, e.g. scripts 'notify', 'calc', 'question', and disable all not used commands.
-Note: Up to version v0.941 (mai/22/2020) telegram-bot-bash had a remote code execution (RCE) bug, please update if you use an older version! see Issue #125
One of the most powerful features of unix shells is variable and command substitution using ${}
and $()
, but as they are expanded in double quotes, this can lead to RCE and information disclosing bugs in complex scripts like bashbot. So it's more secure to escape or remove '$' in input from user, files or network.
A powerful tool to improve your scripts is shellcheck
. You can use it online or install shellcheck locally. Shellcheck is used extensively in bashbot development to ensure a high code quality, e.g. it's not allowed to push changes without passing all shellcheck tests. In addition bashbot has a test suite to check if important functionality is working as expected.
Use printf whenever possible
If you're writing a script and it is taking external input (from the user as arguments or file system...), you shouldn't use echo to display it. Use printf whenever possible
-# very simple
- echo "text with variables. PWD=$PWD"
- printf '%s\n' "text with variables. PWD=$PWD"
- printf 'text with variables. PWD=%s\n' "$PWD"
- -> text with variables. PWD=/home/xxx
-
-# more advanced
- FLOAT="1.2346777892864" INTEGER="12345.123"
- echo "float=$FLOAT, integer=$INTEGER, PWD=$PWD"
- -> float=1.2346777892864, integer=12345.123, PWD=/home/xxx
-
-printf "text with variables. float=%.2f, integer=%d, PWD=%s\n" "$FLOAT" "$INTEGER" "$PWD"
- -> float=1.23, integer=12345, PWD=/home/xxx
-Do not use #!/usr/bin/env bash
-We stay with /bin/bash shebang, because it's more save from security perspective.
-Use of a fixed path to the system provided bash makes it harder for attackers or users to place alternative versions of bash and avoids using a possibly broken, mangled or compromised bash executable.
-If you are a BSD / MacOS user or must to use an other bash location, see Install Bashbot
Run your Bot as a restricted user
I recommend to run your bot as a user, with almost no access rights. All files your Bot have write access to are in danger to be overwritten/deleted if your bot is hacked. For the same reason every file your Bot can read is in danger to be disclosed. Restrict your Bots access rights to the absolute minimum.
Never run your Bot as root, this is the most dangerous you can do! Usually the user 'nobody' has almost no rights on unix/linux systems. See Expert use on how to run your Bot as an other user.
@@ -386,41 +368,28 @@ It features background tasks and interactive chats, and can serve as an interfac
Hey no Problem, if you are finished with your cool bot run dev/make-standalone.sh
to create a stripped down Version of your bot containing only 'bashbot.sh' and 'commands.sh'! For more information see Create a stripped down Version of your Bot
Can I send messages from CLI and scripts?
Of course, you can send messages from CLI and scripts, simply install bashbot as described here, send the message '/start' to set yourself as botadmin and stop the bot with ./bashbot.sh stop
.
-Run the following commands in your bash shell or script while you are in the installation directory:
-# prepare bash / script to send commands
-export BASHBOT_HOME="$(pwd)"
-source ./bashbot.sh source
-
-# send me a test message
-send_message "$(getConfigKey "botadmin")" "test"
-
-# send me output of a system command
-send_message "$(getConfigKey "botadmin")" "$(df -h)"
-For more information see Expert Use
+Bashbot provides some ready to use scripts ro send messages from command line in bin/
dir, e.g. send_message.sh
.
+bin/send_message.sh BOTADMIN "This is my first message send from CLI"
+
+bin/send_message.sh --help
+You can also source bashbot for use in your scripts, for more information see Expert Use
Blocked by telegram?
This may happen if to many or wrong requests are sent to api.telegram.org, e.g. using a invalid token or not existing API calls. If the block stay for longer time you can ask telegram service to unblock your IP-Adress.
You can check with curl or wget if you are blocked by Telegram:
-curl -m 10 https://api.telegram.org/bot
-#curl: (28) Connection timed out after 10001 milliseconds
-
-wget -t 1 -T 10 https://api.telegram.org/bot
-#Connecting to api.telegram.org (api.telegram.org)|46.38.243.234|:443... failed: Connection timed out.
-
-nc -w 2 api.telegram.org 443 || echo "your IP seems blocked by telegram"
-#your IP seems blocked by telegram
-Since Version 0.96 bashbot offers the option to recover from broken connections (aka blocked). Therefore you can provide a function named bashbotBlockRecover()
in mycommands.sh
. If the function exists it is called every time when a broken connection is detected.
-Possible actions are: Check if network is working, change IP-Adress or simply wait some time.
-If everything seems OK return 0 for retry or any non 0 value to give up.
-# called when bashbot sedn command failed because we can not connect to telegram
-# return 0 to retry, return non 0 to give up
-bashbotBlockRecover() {
-# place your commands to unblock here, e.g. change IP-Adess or simply wait
- sleep 60 && return 0 # may be temporary
- return 1
- }
+curl -m 10 https://api.telegram.org/bot
+#curl: (28) Connection timed out after 10001 milliseconds
+
+wget -t 1 -T 10 https://api.telegram.org/bot
+#Connecting to api.telegram.org (api.telegram.org)|46.38.243.234|:443... failed: Connection timed out.
+
+nc -w 2 api.telegram.org 443 || echo "your IP seems blocked by telegram"
+#your IP seems blocked by telegram
+Bashbot offers the option to recover from broken connections (blocked). Therefore you can provide a function named bashbotBlockRecover()
in mycommands.sh
, the function is called every time when a broken connection is detected.
+Possible actions are: Check if network is working, change IP-Adress or simply wait some time. See mycommnds.sh.dist
for an example.
+
@Gnadelwartz
That's it all guys!
If you feel that there's something missing or if you found a bug, feel free to submit a pull request!
-$$VERSION$$ v1.21-dev-15-ga1f7215
+$$VERSION$$ v1.21-dev-28-g43f5536