Hey Lennart, I have a good addition to your project, it’s called
myballsd
and it’s a daemon that automatically formats your drives and replaces them with images of my cock and balls every time you have a shit ideaMaybe give it a whirl, maybe you’d stop with your dogshit ideas
Sounds reasonable. But I don’t like the
0
in the name.Did they think about how far I would have to move my hand to type it? Sudo is only in two easy to reach places on the keyboard, run0 is 4 separate areas of the keyboard, one two rows from home and none on the home row.
I’m only partially joking.
i’m fine with this nor do i have a problem with systemd in genereal
I never understood the hate, tbh. A lot of users don’t even care if Sysd is used, as long as it works. So… Since the majority of distros use it… I think it works enough.
It seems to me to be mainly from people who are dedicated to the Unix philosophy that programs should do only one thing, and do it well. Tying everything up into systemd doesn’t follow that. I don’t care either, and I don’t mind systemd, but some people care about it enough to throw paragraphs of hate on it wherever it’s mentioned online. And apparently it’s “bloat”, and to some " bloat" is worse than the devil himself.
If you dig deeper into systemd, it’s not all that far off the Unix philosophy either. Some people seem to think the entirety of systemd runs as PID1, but it really only spawns and tracks processes. Most systemd components are separate processes that focus on their own thing, like journald and log management. It’s kinda nice that they all work very similarly, it makes for a nice clean integrated experience.
Because it all lives in one repo doesn’t mean it makes one big fat binary that runs as PID1 and does everything.
This is what turned me around: investigating and realizing that it is following the unix philosophy, it’s just under the hood (under the other hood inside the bigger under the hood).
I think some of the hate is from the main systemd dev, Poettering, being so abrasive on social media. He’s got a hateboner for certain distros (which don’t ship with systemd as the default).
Sounds good. It’s a win win. People that doesn’t like the system d implementation can use doas or keep sudo. I Hate the name though. Run0 is dumb can’t they just steal the name doas
Well, since doas has a Linux implementation, stealing that name would cause lots of issues to users who already use it or want to use doas instead of run0. This will be a default part of systemd; not a new package. The reason it’s called run0 is because it’s just a symbolic link to systemd-run, and instead of executing as an SUID binary, like sudo or doas, it runs using the current user’s UID.
I’ll just use an alias; sudo has been around for to long for me to change it and not be stressed about it.
Reminds me of when I aliased ‘man’ to ‘rtfm’
Best alias confirmed
proceeds to add it to .bashrc and .zshrc
You guys know that there’s an actual rtfm app that condenses the output of man to human-readable stuff right? Right??
Sir, your thinking is certainly what kids call “next-level”.
I really don’t care about the command I use to get elevated privileges. On my Debian servers I use
su
and maybe in future, if Fedora decides to make the switch, I will userun0
.Fuck off Poettering. Stop trying to absorb the whole system.
The vast majority of Linux users consider systemd as a good thing because it apparently makes system administration easier. They also don’t agree that systemd is monolithic, because it’s actually designed modular.
But of course there are detractors. The only thing I like about systemd is its declarative service definition and parallel service startup. But if I wanted to run an OS with bloated and inscrutable software (even with the source code), my choice wouldn’t be Linux or Systemd.
I also routinely switch parts of my OS. This is harder with systemd. Although it is modular, the modules are so tightly coupled that it will prevent the replacement of modular components with alternatives. Frankly, I think systemd is killing the innovation in system component development.
Yeah… Not sure how everyone lets them get away with calling it “modular” when it’s next to impossible to swap out the modules
because it’s actually designed modular
Oh? Try to use systemd without logind or journald. logind isn’t so bad, but journald was bad enough, that I gave up with systemd.
I use Gentoo with OpenRC. So my position in this matter should be clear. Anyway, check the last paragraph again to see what I think about systemd’s modularity.
Yes. I agreed with you. But I made it sound like something else. Bad wording on my side.
As I’m too Gentoo openrc user. I also use seatd+greetd instead of (e)logind and replacing sysvinit with openrc-init. The availability of choices made me do it!
Oh! I misunderstood. Sorry! Glad to meet a fellow Gentoo here!
He’s trying to turn Linux into Windows NT. And Microsoft hired him as a reward for doing so.
Not-invented-here
Will this be an integral part of systemd, or will they release it as a separate thing? I mean, if I like it, but I’m not using systemd (I do use it, but I’m just thinking about it), could I use this run0 (horrible name) without having to buy into all of systemd?
Most systems ship with systemd
They were very specifically talking about ones that don’t.
This is fine, but why does everything need to be part of Systemd? Like, seriously, why can’t this just be an independent project? Why must everything be tied into this one knot of interdependent programs, and what’s going to happen to all of them when the people who are passionate about it and actually understand all the stupid ways they interrelate move on with their lives? Are we looking at the formation of the next Xorg? Will everybody being scrambling to undo all of this in another 20 years when we all realize it’s become an unmaintainable mess?
It seems a fairly explicit goal of systemd to redefine Linux as a unified platform rather than as a kernel that can run any one of many implementations of many different services. I assume this is not just the systemd lead but also a goal of Red Hat.
Personally, while I am ok with systemd defining itself as a single source for all this functionality, I hate that they are taking away ( or making it hard at least ) to have independent implementations of these services.
What Chinera is doing with dinit and turnstile is really interesting. It would be nice to have feature comparable approaches to the systemd monolith that distributions could choose from.
What Chinera is doing with dinit and turnstile is really interesting. It would be nice to have feature comparable approaches to the systemd monolith that distributions could choose from.
Link for other readers about Chimera Linux, dinit, turnstile : https://chimera-linux.org/development
The article talks about
sudo
anddoas
being SUID binaries and having a larger attack surface thanrun0
would. Could someone ELI5 what this means?Basically, the SUID bit makes a program get the permissions of the owner when executed. If you set
/bin/bash
as SUID, suddenly every bash shell would be a root shell, kind of. Processes on Linux have a real user ID, an effective user ID, and also a saved user ID that can be used to temporarily drop privileges and gain them back again later.So tools like
sudo
anddoas
use this mechanism to temporarily become root, then run checks to make sure you’re allowed to use sudo, then run your command. But that process is still in your user’s session and process group, and you’re still its real user ID. If anything goes wrong between sudo being root and checking permissions, that can lead to a root shell when you weren’t supposed to, and you have a root exploit. Sudo is entirely responsible for cleaning the environment before launching the child process so that it’s safe.Run0/systemd-run acts more like an API client. The client, running as your user, asks systemd to create a process and give you its inputs and outputs, which then creates it on your behalf on a clean process tree completely separate from your user session’s process tree and group. The client never ever gets permissions, never has to check for the permissions, it’s systemd that does over D-Bus through PolKit which are both isolated and unprivileged services. So there’s no dangerous code running anywhere to exploit to gain privileges. And it makes run0 very non-special and boring in the process, it really does practically nothing. Want to make your own in Python? You can, safely and quite easily. Any app can easily integrate sudo functionnality fairly safely, and it’ll even trigger the DE’s elevated permission prompt, which is a separate process so you can grant sudo access to an app without it being able to know about your password.
Run0 takes care of interpreting what you want to do, D-Bus passes the message around, PolKit adds its stamp of approval to it, systemd takes care of spawning of the process and only the spawning of the process. Every bit does its job in isolation from the others so it’s hard to exploit.
Sounds good in theory.
But I’ve had so many issues with D-Bus fucking shit up on my systems that I’d be very reluctant to hinge my only way of recovering from failures upon something so brittle.
Granted, D-Bus hasn’t given me any trouble since moving to NixOS. The hell of trying to recover my arch systems from a perpetually failing D-Bus would make me very apprehensive to adopt this. I could see myself using run0 by default, but keeping sudo-rs or doas around with a much stricter configuration as a failsafe until the run0 + D-Bus + PolKit is absolutely stable and bulletproof.
I haven’t had D-Bus problems in quite a while but actually run0 should help with some of those issues. Like,
systemctl --user
will actually work when used with run0, or at least systemd-run can.Haven’t used it yet so it’s all theoretical, but it makes sense to me especially at work. I’ve used systemd-run to run processes in very precise contexts, it’s worth using even if just to smush together schedtool, numactl, nice, taskset and sudo in one command and one syntax. Anything a systemd unit can do, systemd-run and run0 can do as well.
I’m definitely going to keep
su
around just in case because I will break it the same I’ve broken sudo a few times, but I might give it a shot and see if it’s any good just for funsies.Just trying to explain what it does and what it can do as accurately as possible, because out of context “systemd adds sudo clone” people immediately jump to conclusions. It might not be the best idea in the end but it’s also worth exploring.
Thank you, i didnt really understand what this was about ubtil now
Can someone ELI3?
Some executables are special. When you run them, they automagically run as root instead! But if sudo isn’t very, very careful, you can trick it into letting you run things as root that you shouldn’t be able to.
Run0 DM’s systemd asking it to go fork a process as root for you, and serves as the middleman between you and the other process.
(I’ll attempt this based on my understanding of both)
Pouring a cup of juice is something an adult needs to be involved with.
sudo is when you ask for permission to pour your own cup of juice. You ask an adult, they give you the cup and the juice, and then you’re responsible for pouring it. If the adult isn’t paying attention they may leave the fridge open for you to go back for more juice or another beverage, but otherwise you’re limited to the amount of juice the adult has given you.
run0 is when the adult just gets you a cup of juice. You tell them what you want, they go and pour the juice, and just give you the cup with the juice in it. You never enter the kitchen, so you don’t have access to the fridge, just your cup of juice.
Okay now please ELI1
when in need, cry out for mommy!
Gagagoogoo Gagaga
This is an extremely good explanation.
Dude, you need a prize for this comment. Very well explained!
Why not just fix sudo then?
Some people are opposed to
sudo
being a fairly complex program with an awkward to understand configuration language and a couple of methods that can fetch config from elsewhere. Fixing upstreamsudo
can’t happen because those features exist and are presumably used by some subset of people, so straight up removing them is not good, but luckilydoas
andsudo-rs
exist as alternatives with a somewhat stripped featureset and less footguns.Others are opposed to the concept of SUID. Underneath all the SUID stuff lies far more complexity than is obvious at first sight. There’s a pretty decent chunk of code in glibc’s libdl that will treat all kinds of environment variables differently based on whether an executable is SUID, and when that goes wrong, it’s reported as a glibc bug (last year’s glibc CVE-2023-4911 was this). And that gets all the more weird when fancy Linux features like namespaces get involved.
Removing SUID requires an entirely different implementation and the service manager is the logical place for that. That’s not just Lennart’s idea; s6, as minimal and straight to the point as it tends to be, also implements
s6-sudo{,d,c}
. It’s a bit more awkward to use but is a perfectly “Unix philosophy” style implementation of this very same idea.Or just use
doas
, it’s still more secure than sudo
Suid is a bit set on executables that results in them being run as the user that owns the file without needing a password, for example, passwd as root.
Run0 ignores this bit
SUID stands for Set User ID. An SUID binary is a file that is always run with the UID of a specific user (almost always root). Note that this does not require that the user running them has root permissions, the UID is always changed. For instance, the
ping
command needs to set up network sockets, which requires root permissions, but is also often used by non-root users to check their network connections. Instead of having tosudo ping
, any normal user is able to just runping
, as it uses SUID to run as the root user.sudo
anddoas
also require functions that necessitate them running as root, and so if you can find out how to exploit these commands to run some arbitrary code without having to authenticate (since authentication happens after the binary has started running), there is a potential for vulnerabilities. Specifically, there is the privilege escalation, which is one of the most severe types of vulnerabilities.run0
starts usingsystemd-run
, which does not use SUID. Instead, it runs with the permissions of the current user, and then authenticates to the root user after the binary has already started to run. So this means that in order to exploit arbitrary code execution withrun0
as root, you have to actually authenticate first, removing the “before authentication” attack surface ofsudo
anddoas
.TL;DR SUID binaries will always run as root, even before any form of authentication.
run0
will start with the permissions of the current user, and then authenticate before running with root permissions.
Coming up:
systemd-antivirusd
Me: Oh, I get it, this “Lemmy” website – it’s like The Onion but for nerds?
My fellow lemmings: No, they’re serious. run0 is real.
Me: Hah. The Onion, but for nerds! I love it.
I personally don’t have a problem with run0 over sudo, however, I don’t want to have to remember to use a different command on the terminal. Just rename it “sudo”, and do the new stuff with it. Just don’t bother me having to remember new commands.
You can create aliases
You can uninstall the sudo application and add
sudo
as an alias forrun0
in your shell initialization script. That’s better than them renaming run0 to sudo, because that will prevent people from running the real sudo if they want it.
Never had an issue.
Might look for a replacement should an issue arise.
Been driving Linux since sarge.
Lol. Right after Microsoft added sudo to windows.
That wasn’t the “sudo”, MS just named something else “sudo”.