I have a few Linux servers at home that I regularly remote into in order to manage, usually logged into KDE Plasma as root. Usually they just have several command line windows and a file manager open (I personally just find it more convenient to use the command line from a remote desktop instead of directly SSH-ing into the system), but if I have an issue, I’ve just been absentmindedly searching stuff up and trying to find solutions using the preinstalled Firefox instance from within the remote desktop itself, which would also be running as root.

I never even thought to install uBlock Origin on it or anything, but the servers are all configured to use a PiHole instance which blocks the vast majority of ads. However, I do also remember using the browser in my main server to figure out how to set up the PiHole instance in the first place, and that server also happens to be the most important one and is my main NAS.

I never went on any particularly shady websites, but I also don’t remember exactly which websites I’ve been on as root, though I do seem to remember seeing ads during the initial pihole setup, because it didn’t go very smoothly and I was searching up error messages trying to get it to work.

This is definitely on me, but it never crossed my mind until recently that it might be a bad idea to use a browser as root, and searching online everyone just states the general cybersecurity doctrine to never do it (which I’m now realizing I shouldn’t have) but no one seems to be discussing how risky it actually is. Shouldn’t Firefox be sandboxing every website and not allowing anything to access the base system? Between “just stop doing it” and “you have to reinstall the OS right now there’s probably already a virus on there,” how much danger do you suppose I’m in? I’m mainly worried about the security/privacy of my personal data I have stored on the servers. All my servers run Fedora KDE Spin and have Intel processors if that makes a difference?

  • taladar@sh.itjust.works
    link
    fedilink
    arrow-up
    2
    arrow-down
    7
    ·
    1 year ago

    you should never directly login as root on any server, and those servers should be configured to not allow remote connections as the root user. You should always log in as a non-root user and only run commands as root using sudo or similar features

    That is commonly recommended but I have yet to see a good solution for sudo authentication in this case that works as well as public key only SSH logins with a passphrase encrypted key and ssh-agent on the client-side. With sudo you constantly have to use passwords anyway which is pretty much unworkable if you work on dozens of servers.

    • exu@feditown.com
      link
      fedilink
      English
      arrow-up
      4
      ·
      1 year ago

      You could implement NOPASS for the specific commands you need for a service user. Still better than just using root.

      • taladar@sh.itjust.works
        link
        fedilink
        arrow-up
        2
        arrow-down
        3
        ·
        1 year ago

        In what way would that be more secure? That would just allow anyone with access to the regular account to run those commands at any time.

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            arrow-down
            4
            ·
            1 year ago

            I am well aware that sudo can limit which commands you run but so can force_command in authorized_keys if you really need that functionality.

        • bluespin@lemmy.world
          link
          fedilink
          arrow-up
          5
          arrow-down
          1
          ·
          1 year ago

          Are you asking why it’s more secure to surface a few commands without password rather than all of them…?

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            arrow-down
            3
            ·
            1 year ago

            I am asking why it is considered to be more secure for the use case where you aren’t limiting access to a few commands because it is access meant for all kinds of admin tasks, not just one specific one (as in access for the people who need to fix unexpected problems among other things).

        • chameleon@kbin.social
          link
          fedilink
          arrow-up
          3
          ·
          1 year ago

          Realistically, there is only a trivial pure security difference between logging in directly to root vs sudo set up to allow unrestricted NOPASS access to specific users: the attacker might not know the correct username when trying to brute force. That doesn’t matter in the slightest unless you have password auth enabled with trivial passwords.

          But there is a difference in the ability to audit what happened after the fact if you have any kind of service storing system logs remotely or in a tamper-proof way. If there’s more than one admin user on a service, that is very very important. Knowing where the compromise happened is absolutely essential to make things safe.

          If there’s only ever going to be one administrative user (personal machine), logging in directly as root for manual administrative tasks is fine: you already know who the user is. If there’s any chance there might be more administrative users later (small but growing business), you should consider doing it right from the start.

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            ·
            1 year ago

            I was aware of the login UID for auditd logging as a difference but as you say, that is only really helpful if the logs are shipped somewhere else or tampering with them is otherwise prevented for admin users. It is not quite the same but the auth.log entries sshd produces on login also contain the key fingerprint used to login these days so on a more limited scale you can at least tell who logged in when from those (or whose key but that is no different than whose account for the sudo approach).

            you should consider doing it right from the start.

            Do you have any advice on how to use the sudo approach without having a huge slow down in every automated process that requires ssh user@host calls for manual password entry? I am aware of Ansible but I am honestly very sceptical of Python tools since they tend to break easily and often from my past experiences and I would like to avoid using additional ones for critical tasks. Plus Ansible in particular seemed to be very late with their Python 3 transition, as I recall I uninstalled it when it was one of the last tools left that did not work with Python 3.

            • chameleon@kbin.social
              link
              fedilink
              arrow-up
              2
              ·
              edit-2
              1 year ago

              Well, my recommendations for anything semi-automated would be Ansible and Fabric/Invoke. Fabric is also a Python tool (though it’s only used on the controlling side, unlike Ansible), so if that’s a no-go, I’m afraid I don’t have much to offer.

        • 4am@lemm.ee
          link
          fedilink
          arrow-up
          3
          arrow-down
          2
          ·
          1 year ago

          I thought your passwordless passphrase passkey ssh connection that is superior to passwords was secure. Is it not?

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            arrow-down
            3
            ·
            1 year ago

            It is. That is the whole point. Why would I make extra unprivileged accounts that can run any command I need to run as root at any time without a password on the system just to avoid it. That just increases the attack surface via any other vector by giving an attacker accounts to choose from to break into.

      • taladar@sh.itjust.works
        link
        fedilink
        arrow-up
        1
        arrow-down
        6
        ·
        1 year ago

        Of course I can store dozens of passwords but if every task that requires a single command to be run automatically on e.g. “every server with pending updates” requires entering each of those passwords that is unworkable.

        • ElderWendigo@sh.itjust.works
          link
          fedilink
          arrow-up
          6
          arrow-down
          2
          ·
          1 year ago

          Sounds like you’re doing things the hard way, making you believe that you are being forced into choosing between security and convenience.

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            arrow-down
            3
            ·
            1 year ago

            Then enlighten me, what is the easy way to do tasks that do require some amount of manual oversight? Tasks that can be completely automated are easy of course but with our relatively heterogeneous servers automation a la “do it on this one test system and if it works there run it completely automatically on the 100 identical production systems” is not available to us.

            • ElderWendigo@sh.itjust.works
              link
              fedilink
              arrow-up
              4
              arrow-down
              4
              ·
              1 year ago

              Not my circus, not my monkeys. You’re doing things the hard way and now it’s somehow my responsibility to fix your mess? I’m SUPER glad I don’t work with you.

              • taladar@sh.itjust.works
                link
                fedilink
                arrow-up
                4
                arrow-down
                5
                ·
                1 year ago

                You are the one who insists that there is a better way to do things but refuse to say what that better way is.

                • bluespin@lemmy.world
                  link
                  fedilink
                  arrow-up
                  4
                  arrow-down
                  1
                  ·
                  1 year ago

                  None of us can tell you the right approach for your specific system and use-case. People are simply pointing out that what you stated you’re doing is insecure and not recommended

                  • taladar@sh.itjust.works
                    link
                    fedilink
                    arrow-up
                    1
                    arrow-down
                    5
                    ·
                    1 year ago

                    And nobody in any of these threads has ever pointed out why it is considered to be insecure. The most probable origin for that idea I have come upon so far is that it is a left-over from pre-SSH days when people thought using the root password with su at something other than the start of their connection would make it harder to sniff. Literally nobody lists even one good reason why sudo should be more secure than direct root login with SSH public keys and password login disabled for full root access (as in not limited to just one or two commands).

        • 4am@lemm.ee
          link
          fedilink
          arrow-up
          4
          ·
          1 year ago

          FreeIPA and your password is the same on every machine: yours. (Make it good)

          Service accounts should have either no sudo password or use something like Ansible with vault and keep every one of them scrambled and rotate regularly (which you can do with Ansible itself)

          Yes, even if you have 2 VMs and a docker container, this is worth it.

          • taladar@sh.itjust.works
            link
            fedilink
            arrow-up
            1
            arrow-down
            4
            ·
            1 year ago

            FreeIPA and your password is the same on every machine: yours.

            Any network based system like that sucks when you need to fix a system that has some severe issue (network, DNS, disk,…) which is exactly when root access is the most important.