diff -uNr apt-1.4.9/cmdline/apt.cc apt-1.4.9.mod/cmdline/apt.cc --- apt-1.4.9/cmdline/apt.cc 2019-01-18 12:42:07.000000000 +0200 +++ apt-1.4.9.mod/cmdline/apt.cc 2019-11-13 14:55:50.954692940 +0200 @@ -97,6 +97,12 @@ /*}}}*/ int main(int argc, const char *argv[]) /*{{{*/ { + if (getuid() == 0) { + std::cout << "You should not use command 'apt' as root." << std::endl; + std::cout << "This is dangerous as may damage your Termux installation and data." << std::endl; + return 1; + } + CommandLine CmdL; auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); diff -uNr apt-1.4.9/cmdline/apt-get.cc apt-1.4.9.mod/cmdline/apt-get.cc --- apt-1.4.9/cmdline/apt-get.cc 2019-01-18 12:42:07.000000000 +0200 +++ apt-1.4.9.mod/cmdline/apt-get.cc 2019-11-13 14:55:50.954692940 +0200 @@ -432,6 +432,12 @@ /*}}}*/ int main(int argc,const char *argv[]) /*{{{*/ { + if (getuid() == 0) { + std::cout << "You should not use command 'apt-get' as root." << std::endl; + std::cout << "This is dangerous as may damage your Termux installation and data." << std::endl; + return 1; + } + // Parse the command line and initialize the package library CommandLine CmdL; auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_GET, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); diff -uNr apt-1.4.9/cmdline/apt-key.in apt-1.4.9.mod/cmdline/apt-key.in --- apt-1.4.9/cmdline/apt-key.in 2019-11-13 14:55:25.431240010 +0200 +++ apt-1.4.9.mod/cmdline/apt-key.in 2019-11-13 15:04:25.853655116 +0200 @@ -15,8 +15,11 @@ aptkey_echo() { echo "$@"; } -requires_root() { - : +assert_no_root() { + if [ "$(id -u)" = "0" ]; then + apt_error "Refusing to run 'apt-key' as root to prevent damage to your Termux installation." + exit 1 + fi } command_available() { @@ -510,7 +513,6 @@ create_new_keyring() { if [ ! -r "$FORCED_KEYRING" ]; then TRUSTEDFILE='/dev/null'; FORCED_KEYRING="$TRUSTEDFILE"; fi; } ;; --fakeroot) - requires_root() { true; } ;; --quiet) aptkey_echo() { true; } @@ -706,7 +708,7 @@ case "$command" in add) warn_on_script_usage - requires_root + assert_no_root setup_merged_keyring aptkey_execute "$GPG" --quiet --batch --import "$@" merge_back_changes @@ -714,19 +716,19 @@ ;; del|rm|remove) # no script warning here as removing 'add' usage needs 'del' for cleanup - requires_root + assert_no_root foreach_keyring_do 'remove_key_from_keyring' "$@" aptkey_echo "OK" ;; update) warn_on_script_usage - requires_root + assert_no_root setup_merged_keyring update merge_back_changes ;; net-update) - requires_root + assert_no_root setup_merged_keyring net_update merge_back_changes diff -uNr apt-1.4.9/cmdline/apt-mark.cc apt-1.4.9.mod/cmdline/apt-mark.cc --- apt-1.4.9/cmdline/apt-mark.cc 2019-01-18 12:42:07.000000000 +0200 +++ apt-1.4.9.mod/cmdline/apt-mark.cc 2019-11-13 14:55:50.958026289 +0200 @@ -316,6 +316,12 @@ /*}}}*/ int main(int argc,const char *argv[]) /*{{{*/ { + if (getuid() == 0) { + std::cout << "You should not use command 'apt-mark' as root." << std::endl; + std::cout << "This is dangerous as may damage your Termux installation and data." << std::endl; + return 1; + } + CommandLine CmdL; auto const Cmds = ParseCommandLine(CmdL, APT_CMD::APT_MARK, &_config, &_system, argc, argv, &ShowHelp, &GetCommands);