diff --git a/client/core/controllers/serverController.cpp b/client/core/controllers/serverController.cpp
index 7219ff7d4..05283195d 100644
--- a/client/core/controllers/serverController.cpp
+++ b/client/core/controllers/serverController.cpp
@@ -757,10 +757,6 @@ ErrorCode ServerController::isServerPortBusy(const ServerCredentials &credential
ErrorCode ServerController::isUserInSudo(const ServerCredentials &credentials, DockerContainer container)
{
- if (credentials.userName == "root") {
- return ErrorCode::NoError;
- }
-
QString stdOut;
auto cbReadStdOut = [&](const QString &data, libssh::Client &) {
stdOut += data + "\n";
@@ -774,8 +770,16 @@ ErrorCode ServerController::isUserInSudo(const ServerCredentials &credentials, D
const QString scriptData = amnezia::scriptData(SharedScriptType::check_user_in_sudo);
ErrorCode error = runScript(credentials, replaceVars(scriptData, genVarsForScript(credentials)), cbReadStdOut, cbReadStdErr);
- if (!stdOut.contains("sudo"))
+ if (credentials.userName != "root" && stdOut.contains("sudo:") && !stdOut.contains("uname:") && stdOut.contains("not found"))
+ return ErrorCode::SudoPackageIsNotPreinstalled;
+ if (credentials.userName != "root" && !stdOut.contains("sudo") && !stdOut.contains("wheel"))
return ErrorCode::ServerUserNotInSudo;
+ if (stdOut.contains("can't cd to") || stdOut.contains("Permission denied") || stdOut.contains("No such file or directory"))
+ return ErrorCode::ServerUserDirectoryNotAccessible;
+ if (stdOut.contains("sudoers") || stdOut.contains("is not allowed to run sudo on"))
+ return ErrorCode::ServerUserNotAllowedInSudoers;
+ if (stdOut.contains("password is required"))
+ return ErrorCode::ServerUserPasswordRequired;
return error;
}
diff --git a/client/core/defs.h b/client/core/defs.h
index 6c85c65d2..e073d0302 100644
--- a/client/core/defs.h
+++ b/client/core/defs.h
@@ -54,6 +54,10 @@ namespace amnezia
ServerCancelInstallation = 204,
ServerUserNotInSudo = 205,
ServerPacketManagerError = 206,
+ SudoPackageIsNotPreinstalled = 207,
+ ServerUserDirectoryNotAccessible = 208,
+ ServerUserNotAllowedInSudoers = 209,
+ ServerUserPasswordRequired = 210,
// Ssh connection errors
SshRequestDeniedError = 300,
diff --git a/client/core/errorstrings.cpp b/client/core/errorstrings.cpp
index 2b9182cf7..a3d546012 100644
--- a/client/core/errorstrings.cpp
+++ b/client/core/errorstrings.cpp
@@ -20,8 +20,12 @@ QString errorString(ErrorCode code) {
case(ErrorCode::ServerContainerMissingError): errorMessage = QObject::tr("Server error: Docker container missing"); break;
case(ErrorCode::ServerDockerFailedError): errorMessage = QObject::tr("Server error: Docker failed"); break;
case(ErrorCode::ServerCancelInstallation): errorMessage = QObject::tr("Installation canceled by user"); break;
- case(ErrorCode::ServerUserNotInSudo): errorMessage = QObject::tr("The user does not have permission to use sudo"); break;
- case(ErrorCode::ServerPacketManagerError): errorMessage = QObject::tr("Server error: Packet manager error"); break;
+ case(ErrorCode::ServerUserNotInSudo): errorMessage = QObject::tr("The user is not a member of the sudo group"); break;
+ case(ErrorCode::ServerPacketManagerError): errorMessage = QObject::tr("Server error: Package manager error"); break;
+ case(ErrorCode::SudoPackageIsNotPreinstalled): errorMessage = QObject::tr("The sudo package is not pre-installed"); break;
+ case(ErrorCode::ServerUserDirectoryNotAccessible): errorMessage = QObject::tr("The server user's home directory is not accessible"); break;
+ case(ErrorCode::ServerUserNotAllowedInSudoers): errorMessage = QObject::tr("Action not allowed in sudoers"); break;
+ case(ErrorCode::ServerUserPasswordRequired): errorMessage = QObject::tr("The user's password is required"); break;
// Libssh errors
case(ErrorCode::SshRequestDeniedError): errorMessage = QObject::tr("SSH request was denied"); break;
diff --git a/client/server_scripts/check_user_in_sudo.sh b/client/server_scripts/check_user_in_sudo.sh
index e7ee953cd..974131dde 100644
--- a/client/server_scripts/check_user_in_sudo.sh
+++ b/client/server_scripts/check_user_in_sudo.sh
@@ -1,2 +1,13 @@
-CUR_USER=$(whoami);\
-groups $CUR_USER
\ No newline at end of file
+if which apt-get > /dev/null 2>&1; then pm=$(which apt-get); opt="--version";\
+elif which dnf > /dev/null 2>&1; then pm=$(which dnf); opt="--version";\
+elif which yum > /dev/null 2>&1; then pm=$(which yum); opt="--version";\
+elif which pacman > /dev/null 2>&1; then pm=$(which pacman); opt="--version";\
+else pm="uname"; opt="-a";\
+fi;\
+CUR_USER=$(whoami 2>/dev/null || echo ~ | sed 's/.*\///');\
+echo $LANG | grep -qE '^(en_US.UTF-8|C.UTF-8|C)$' || export LC_ALL=C;\
+sudo -K;\
+cd ~;\
+if [ "$CUR_USER" = "root" ] || ( groups "$CUR_USER" | grep -E '\<(sudo|wheel)\>' ); then \
+ sudo -nu $CUR_USER $pm $opt > /dev/null; sudo -n $pm $opt > /dev/null;\
+fi
diff --git a/client/server_scripts/prepare_host.sh b/client/server_scripts/prepare_host.sh
index c6defdb0d..22a50e312 100644
--- a/client/server_scripts/prepare_host.sh
+++ b/client/server_scripts/prepare_host.sh
@@ -1,4 +1,4 @@
-CUR_USER=$(whoami);\
+CUR_USER=$(whoami 2>/dev/null || echo ~ | sed 's/.*\///');\
sudo mkdir -p $DOCKERFILE_FOLDER;\
sudo chown $CUR_USER $DOCKERFILE_FOLDER;\
if ! sudo docker network ls | grep -q amnezia-dns-net; then sudo docker network create \
diff --git a/client/translations/amneziavpn_ar_EG.ts b/client/translations/amneziavpn_ar_EG.ts
index 1d88eea01..773f5d050 100644
--- a/client/translations/amneziavpn_ar_EG.ts
+++ b/client/translations/amneziavpn_ar_EG.ts
@@ -3334,8 +3334,8 @@ Already installed containers were found on the server. All installed containers
- The user does not have permission to use sudo
- ليس لدي المستخدم الصلحيات لأستخدام sudo
+ The user is not a member of the sudo group
+ المستخدم ليس عضوًا في مجموعة sudo
@@ -3399,7 +3399,7 @@ Already installed containers were found on the server. All installed containers
- Server error: Packet manager error
+ Server error: Package manager errorخطأ في الخادم: خطأ في مدير الحزم
diff --git a/client/translations/amneziavpn_fa_IR.ts b/client/translations/amneziavpn_fa_IR.ts
index c48606be9..c1bfce7e2 100644
--- a/client/translations/amneziavpn_fa_IR.ts
+++ b/client/translations/amneziavpn_fa_IR.ts
@@ -3468,8 +3468,8 @@ It's okay as long as it's from someone you trust.
- The user does not have permission to use sudo
- The user does not have permission to use sudo
+ The user is not a member of the sudo group
+ کاربر عضو گروه sudo نیست
@@ -3590,8 +3590,8 @@ It's okay as long as it's from someone you trust.
- Server error: Packet manager error
- Server error: Packet manager error
+ Server error: Package manager error
+ خطای سرور: خطای مدیر بسته
diff --git a/client/translations/amneziavpn_hi_IN.ts b/client/translations/amneziavpn_hi_IN.ts
index db095d5cd..a3fe20119 100644
--- a/client/translations/amneziavpn_hi_IN.ts
+++ b/client/translations/amneziavpn_hi_IN.ts
@@ -3434,13 +3434,13 @@ Already installed containers were found on the server. All installed containers
- The user does not have permission to use sudo
- उपयोगकर्ता के पास sudo का उपयोग करने की अनुमति नहीं है
+ The user is not a member of the sudo group
+ उपयोगकर्ता sudo समूह का सदस्य नहीं है
- Server error: Packet manager error
- सर्वर त्रुटि: पैकेट प्रबंधक त्रुटि
+ Server error: Package manager error
+ सर्वर त्रुटि: पैकेज प्रबंधक त्रुटि
diff --git a/client/translations/amneziavpn_my_MM.ts b/client/translations/amneziavpn_my_MM.ts
index 55243d1bc..09819cfe2 100644
--- a/client/translations/amneziavpn_my_MM.ts
+++ b/client/translations/amneziavpn_my_MM.ts
@@ -3330,8 +3330,8 @@ Already installed containers were found on the server. All installed containers
- The user does not have permission to use sudo
- ဤအသုံးပြုသူသည် sudo ကိုအသုံးပြုရန်ခွင့်ပြုချက်မရှိပါ
+ The user is not a member of the sudo group
+ ဤအသုံးပြုသူသည် sudo အုပ်စု၏အဖွဲ့ဝင်မဟုတ်ပါ
@@ -3395,8 +3395,8 @@ Already installed containers were found on the server. All installed containers
- Server error: Packet manager error
- ဆာဗာ မှားယွင်းမှု: Packet Manager မှားယွင်းမှု
+ Server error: Package manager error
+ ဆာဗာ အမှား- Package manager အမှား
diff --git a/client/translations/amneziavpn_ru_RU.ts b/client/translations/amneziavpn_ru_RU.ts
index ddf6a2129..c4ae0ffd6 100644
--- a/client/translations/amneziavpn_ru_RU.ts
+++ b/client/translations/amneziavpn_ru_RU.ts
@@ -4038,13 +4038,13 @@ and will not be shared or disclosed to the Amnezia or any third parties
- The user does not have permission to use sudo
- У пользователя нет прав на использование sudo
+ The user is not a member of the sudo group
+ Пользователь не входит в группу sudo
- Server error: Packet manager error
- Ошибка сервера: ошибка менеджера пакетов
+ Server error: Package manager error
+ Ошибка сервера: Ошибка менеджера пакетов
diff --git a/client/translations/amneziavpn_uk_UA.ts b/client/translations/amneziavpn_uk_UA.ts
index 3709e30a6..2875850cf 100644
--- a/client/translations/amneziavpn_uk_UA.ts
+++ b/client/translations/amneziavpn_uk_UA.ts
@@ -3700,13 +3700,13 @@ and will not be shared or disclosed to the Amnezia or any third parties
- The user does not have permission to use sudo
- The user does not have permission to use sudo
+ The user is not a member of the sudo group
+ Користувач не входить до групи sudo
- Server error: Packet manager error
-
+ Server error: Package manager error
+ Помилка сервера: Помилка менеджера пакетів
diff --git a/client/translations/amneziavpn_ur_PK.ts b/client/translations/amneziavpn_ur_PK.ts
index 95419cba9..e45ae5da3 100644
--- a/client/translations/amneziavpn_ur_PK.ts
+++ b/client/translations/amneziavpn_ur_PK.ts
@@ -3433,8 +3433,8 @@ Already installed containers were found on the server. All installed containers
- The user does not have permission to use sudo
- صارف کو sudo استعمال کرنے کی اجازت نہیں ہے
+ The user is not a member of the sudo group
+ صارف sudo گروپ کا رکن نہیں ہے
@@ -3498,7 +3498,7 @@ Already installed containers were found on the server. All installed containers
- Server error: Packet manager error
+ Server error: Package manager errorسرور خطا: پیکیج منیجر خطا
diff --git a/client/translations/amneziavpn_zh_CN.ts b/client/translations/amneziavpn_zh_CN.ts
index cd39c2a6c..fa6a87d13 100644
--- a/client/translations/amneziavpn_zh_CN.ts
+++ b/client/translations/amneziavpn_zh_CN.ts
@@ -3675,13 +3675,13 @@ and will not be shared or disclosed to the Amnezia or any third parties
- The user does not have permission to use sudo
- 用户没有root权限
+ The user is not a member of the sudo group
+ 用户不是 sudo 组的成员
- Server error: Packet manager error
-
+ Server error: Package manager error
+ 服务器错误:包管理器错误