[1]Christian Rebischke
[2]About [3]Contact [4]Posts
(BUTTON) (BUTTON)
* [5]About
* [6]Contact
* [7]Posts
Oct 19, 2016
Why suckless is wrong
Many people pointed me to this website [8]suckless when a discussion
about systemd began. Now I got tired of summarizing why this blogpost
is so wrong over and over again. This time I want to write it down that
other people have arguments when they got pointed to this website. This
can take a while so feel free to grab a coffee or a cold mate.
Let us begin with the second abstract:
What PID 1 Should Do
When your system boots up the kernel is executing a given binary in its
known namespace. To see what are the only tasks the application running
as pid 1 has to do, see sinit. Just wait for child process to reap and
run some other init scripts.
First of all: systemd was never, is not and will never be an init
system. It is a system-daemon. Thats why it’s called systemd. Moreover
we don’t live in 1980 anymore. The view and the purpose of computers
had changed completely since this time. We want to have access on logs
in pre-early-boot-time and we want to be sure that several things are
done during the boot process. Computers are not just a server in some
university anymore. Many people use GNU/Linux in their workstations or
notebooks nowadays.
systemd does {,U}EFI bootload
Should systemd’s PID be changed from 1 to a negative, or imaginary,
number? It now exists before the kernel itself, during a bootup. See
also systemd-boot.
Again. systemd is not only an init system. Is the same as if I said:
Should grub’s PID be changed from 4235 to a negative, or imaginary,
number? It Now exists before the kernel itself, during a bootup. See
also syslinux
As you see this sentence is absolutly ridiculous. Systemd has a module
and this module is managing the EFI entries in the EFI bootloader.
systemd-boot is not booting the system. It is just a boot-manager! EFI
does!
systemd replaces sudo and su
Please note the command name, machinectl and its features at the
manpage. In exchange for a program which contains sudo, su and kill
(and does some functions which historically ssh/telnet did), bare metal
users have a tons of bloat and a lot of things to disable, if even
possible, useful only to people which deal with virtual machines.
First of all: systemd-machined or better machinectl will never replace
sudo or su. Do not worry. Secondly machinectl is totally different than
sudo or su. machinectl gets its information from polkit via dbus.
polkit is a much nicer way to define permissions-rules. sudo and su has
different weak points, one of them is that sudo and su can not talk via
dbus nor any other IPC daemon. I think you know this moment when you
forgot to type sudo in front of a command. With polkit you don’t have
this situation because the system service will just ask for a
permission via IPC. And yes.. you will need this for some stronger
security policies than just kernel-based permissions. You can find more
about this topic here: [9]why-polkit
systemd-journald can do log-rotate
Being journal files binaries written with easily corruptable
transactions, does this feature make the log unreadable at times?
Nope. Sorry. It will not get unreadable. I am running systemd now for
years and I had never an unreadable log.
Transient units
Temporary services, because we love to reinvent procps, forking, nohup
and lsof.
What is so wrong with this feature? I think it is a good idea when an
Administrator can pass environment-variables to a service or set
security features via kernel capabilities.
systemd does socat/netcat
This feature is being used in the socket-activation. Something that is
pretty awesome. Why do you want socket-activation? Think about the boot
process. Let us say we start different services at the same time in
parallel. (This is what systemd does because it is increasing the speed
a lot. What is nicer than a laptop that boots up in 0.5 seconds?). When
we start different services in parallel it can happen that a service is
for example earlier ready when the log daemon. In this case socket
activation rescues your day. Because with socket activation the other
service does not need to wait for the log daemon. Every output from
this service will be buffered in the activated socket and will be
forwarded to the log daemon when the log daemon is ready.
systemd-logind does sighup and nohup
Logout is equivalent to shutting off the machine, so you will NOT have
any running program after logout, unless you inform your init system.
Why should it be the other way around? When a user logs out from a
session I want that every process by this user is killed. Especially
the gnome desktop had the problem that even after logouts zombie
processes survived or other artifacts that burn your ram. You do not
realize this on your single-user-system but ask someone who is managing
infrastructure for thousands of users. You don’t want to waste any
memory. And even when we say:
Ok! Let us do your way
We will have one problem. We will allow every program to survive a user
session. You have to see it out of the blacklist-whitelist-view. What
is better a whitelist or a blacklist? When I have 1000 of programs
should I whitelist everyone and blacklist just a few? What happens when
I forgot to blacklist one? Can I blacklist all programs on this planets
via picking every program and analyzing it? No, I can’t and thats why
we use a blacklist and whitelist the programs that are allowed to stay
running after logout. This way we can make sure that only these
whitelisted programs will run and not other stuff like malware, zombie
processes or the 16-years-old users porn torrents.
systemd-nspawn can patch at will any kind of file in a container
Paired with transient units and user escalation performable remotely,
this can mean that if you house VPS instances somewhere, your hosting
provider has means and tools to spy, modify, delete any kind of content
you store there. Encrypt everything, read your TOS.
First of all when I host stuff remotely there is no guarantee that it’s
not bugged even with disk-encryption. Even with disk-encryption the guy
with hardware access could do harmful things and modify, delete, spy
your stuff. This feature is necessary if we want to use namespaces in
containers.
systemd does UNIX nice
Let me quote the first sentence from the README there this feature is
mentioned:
The LimitNICE= setting now optionally takes normal UNIX nice values in
addition to the raw integer limit value.
What is so wrong about when we can limit a nice level for a specific
service? Imagine a service that starts consuming a lot of memory. This
way we can limit this service when it happens and give the other
processes a better place in the scheduling.
systemd locks down /etc and makes it read-only
This is absolutly out of context. systemd uses a capability that is
called ProtectSystem with this capability I can reduce the access for a
specific service that doesn’t need access to specific areas. This means
for /etc that /etc will be mounted read-only. But only for this
service. This way the service is not able to change configuration files
maliciously or unintentionally. I think this is a good feature to
secure your system.
systemd now does your DNS
We are not in North-Korea. DNS is something important nowadays that
every system that wants to do networking need. It was just an amount of
time that this will be included. Moreover you can turn that function
off and still use every other DNS service that you like. It’s also
important for the nspawn-containers. They rely on a proper DNS service.
And mostly: The systemd developers can finally enforce DNSSEC
everywhere with this option. That’s a good step to a more secure
internet.
systemd hates when you adapt your system (graphics on other than vt1)
Support has borders. You can’t support everything in a software and
standards are needed. The internet relies on standards because
standards make the world easy.
__________________________________________________________________
1358 Words
2016-10-19 12:13 +0000
Table of Contents
* [10]What PID 1 Should Do
* [11]systemd does {,U}EFI bootload
* [12]systemd replaces sudo and su
* [13]systemd-journald can do log-rotate
* [14]Transient units
* [15]systemd does socat/netcat
* [16]systemd-logind does sighup and nohup
* [17]systemd-nspawn can patch at will any kind of file in a
container
* [18]systemd does UNIX nice
* [19]systemd locks down /etc and makes it read-only
* [20]systemd now does your DNS
* [21]systemd hates when you adapt your system (graphics on other
than vt1)
[22] Newer
Hackover 2016 [23]Older
The raise of Javascript-droppers
© 2020 [24]Christian Rebischke · [25]CC BY-NC 4.0
Made with [26]Hugo · Theme [27]Hermit ·
References
Visible links
1.
https://shibumi.dev/
2.
https://shibumi.dev/about/
3.
https://shibumi.dev/contact/
4.
https://shibumi.dev/posts/
5.
https://shibumi.dev/about/
6.
https://shibumi.dev/contact/
7.
https://shibumi.dev/posts/
8.
http://suckless.org/sucks/systemd
9.
https://www.collabora.com/about-us/blog/2015/06/08/why-polkit-(or,-how-to-mount-a-disk-on-modern-linux)
10.
https://shibumi.dev/posts/why-suckless-is-wrong/#what-pid-1-should-do
11.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-uefi-bootload
12.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-replaces-sudo-and-su
13.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-journald-can-do-log-rotate
14.
https://shibumi.dev/posts/why-suckless-is-wrong/#transient-units
15.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-socatnetcat
16.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-logind-does-sighup-and-nohup
17.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-nspawn-can-patch-at-will-any-kind-of-file-in-a-container
18.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-unix-nice
19.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-locks-down-etc-and-makes-it-read-only
20.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-now-does-your-dns
21.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-hates-when-you-adapt-your-system-graphics-on-other-than-vt1
22.
https://shibumi.dev/posts/hackover-2016/
23.
https://shibumi.dev/posts/raise-of-the-javascript-droppers-part-1/
24.
https://shibumi.dev/
25.
https://creativecommons.org/licenses/by-nc/4.0/
26.
https://gohugo.io/
27.
https://github.com/Track3/hermit
Hidden links:
29.
https://twitter.com/sh1bumi
30. mailto:
[email protected]
31.
https://github.com/shibumi
32.
https://linkedin.com/in/shibumi
33.
https://shibumi.dev/posts/why-suckless-is-wrong/#what-pid-1-should-do
34.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-uefi-bootload
35.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-replaces-sudo-and-su
36.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-journald-can-do-log-rotate
37.
https://shibumi.dev/posts/why-suckless-is-wrong/#transient-units
38.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-socatnetcat
39.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-logind-does-sighup-and-nohup
40.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-nspawn-can-patch-at-will-any-kind-of-file-in-a-container
41.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-does-unix-nice
42.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-locks-down-etc-and-makes-it-read-only
43.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-now-does-your-dns
44.
https://shibumi.dev/posts/why-suckless-is-wrong/#systemd-hates-when-you-adapt-your-system-graphics-on-other-than-vt1
45.
https://shibumi.dev/posts/index.xml