[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kate] /: Re-allow running Kate and KWrite as the actual root user (but still not using sudo)
From:       Nathaniel Graham <null () kde ! org>
Date:       2018-05-31 18:15:46
Message-ID: E1fOS70-0003Po-87 () code ! kde ! org
[Download RAW message or body]

Git commit bf6d5b7532968763bdc629aa90426c53500af13f by Nathaniel Graham.
Committed on 31/05/2018 at 18:15.
Pushed by ngraham into branch 'master'.

Re-allow running Kate and KWrite as the actual root user (but still not using sudo)

Summary:
The original change (9adcebd3c2e476c8a32e9b455cc99f46b0e12a7e) to prevent sudo usage \
broke the use case of running KWrite or Kate while logged in as the actual `root` \
user with a GUI session. This is how the Kali distro is set up by default, so the \
original change amounted to making Kate and KWrite not launch at all on this KDE \
distro.

This patch re-enables running as the actual root user, but keeps blocking usage via \
`sudo` or `kdesu`. There are no negative security implications associated with \
re-allowing usage via the root user, since if you're running a GUI session, you were \
already exposed to the original security threat and Kate and KWrite do not increase \
the attack surface.

I have submitted a similar change for Dolphin that has been accepted (D12795), but \
@elvisangelaccio wants that to go in at the same time as this, to keep them in sync.

BUG: 387973
FIXED-IN: 18.08.0

Test Plan:
- Log in as normal user and run `sudo kate` or `sudo kwrite`: you get an error \
                message.
- Log in as normal user and run `kdesu kate` or `kdesu kwrite`: you get an error \
                message.
- Log in as the root user and run Kate or KWrite normally: it works.

Reviewers: #kate, dhaumann, cullmann, #ktexteditor

Reviewed By: #kate, dhaumann, #ktexteditor

Subscribers: kwrite-devel, elvisangelaccio

Tags: #kate

Differential Revision: https://phabricator.kde.org/D13138

M  +8    -6    kate/main.cpp
M  +8    -6    kwrite/main.cpp

https://commits.kde.org/kate/bf6d5b7532968763bdc629aa90426c53500af13f

diff --git a/kate/main.cpp b/kate/main.cpp
index e20fcffc3..19f7a997b 100644
--- a/kate/main.cpp
+++ b/kate/main.cpp
@@ -61,13 +61,15 @@
 int main(int argc, char **argv)
 {
 #ifndef Q_OS_WIN
-    /**
-     * Check whether we are running as root
-     **/
+    // Prohibit using sudo or kdesu (but allow using the root user directly)
     if (getuid() == 0) {
-        std::cout << "Executing Kate as root is not possible. To edit files as root \
                use:" << std::endl;
-        std::cout << "SUDO_EDITOR=kate sudoedit <file>" << std::endl;
-        return 0;
+        if (!qEnvironmentVariableIsEmpty("SUDO_USER")) {
+            std::cout << "Executing Kate with sudo is not possible due to unfixable \
security vulnerabilities." << std::endl; +            return EXIT_FAILURE;
+        } else if (!qEnvironmentVariableIsEmpty("KDESU_USER")) {
+            std::cout << "Executing Kate with kdesu is not possible due to unfixable \
security vulnerabilities." << std::endl; +            return EXIT_FAILURE;
+        }
     }
 #endif
     /**
diff --git a/kwrite/main.cpp b/kwrite/main.cpp
index 62f4f2db4..d3f3ca9cc 100644
--- a/kwrite/main.cpp
+++ b/kwrite/main.cpp
@@ -50,13 +50,15 @@
 extern "C" Q_DECL_EXPORT int main(int argc, char **argv)
 {
 #ifndef Q_OS_WIN
-    /**
-     * Check whether we are running as root
-     **/
+    // Prohibit using sudo or kdesu (but allow using the root user directly)
     if (getuid() == 0) {
-        std::cout << "Executing KWrite as root is not possible. To edit files as \
                root use:" << std::endl;
-        std::cout << "SUDO_EDITOR=kwrite sudoedit <file>" << std::endl;
-        return 0;
+        if (!qEnvironmentVariableIsEmpty("SUDO_USER")) {
+            std::cout << "Executing Kate with sudo is not possible due to unfixable \
security vulnerabilities." << std::endl; +            return EXIT_FAILURE;
+        } else if (!qEnvironmentVariableIsEmpty("KDESU_USER")) {
+            std::cout << "Executing Kate with kdesu is not possible due to unfixable \
security vulnerabilities." << std::endl; +            return EXIT_FAILURE;
+        }
     }
 #endif
     /**


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic