Signal je aplikacija za varno in zasebno sporoΔanje, ki je brezplaΔna, odprtokodna in enostavna za uporabo. Uporablja moΔno Ε‘ifriranje od zaΔetne do konΔne toΔke (anlg. end-to-end), uporabljajo pa jo Ε‘tevilni aktivisti, novinarji, ΕΎviΕΎgaΔi, pa tudi drΕΎavni uradniki in poslovneΕΎi. Skratka vsi, ki cenijo svojo zasebnost. Signal teΔe na mobilnih telefonih z operacijskim sistemom Android in iOS, pa tudi na namiznih raΔunalnikih (Linux, Windows, MacOS) - pri Δemer je namizna razliΔica narejena tako, da jo poveΕΎemo s svojo mobilno razliΔico Signala. To nam omogoΔa, da lahko vse funkcije Signala uporabljamo tako na telefonu kot na namiznem raΔunalniku, prav tako se vsa sporoΔila, kontakti, itd. sinhronizirajo med obema napravama. Vse lepo in prav, a Signal je (ΕΎal) vezan na telefonsko Ε‘tevilko in praviloma lahko na enem telefonu poganjate samo eno kopijo Signala, enako pa velja tudi za namizni raΔunalnik. Bi se dalo to omejitev zaobiti? Vsekakor, a za to je potreben manjΕ‘i βhackβ. KakΕ‘en, preberite v nadaljevanju.
Poganjanje veΔ razliΔic Signala na telefonu
Poganjanje veΔ razliΔic Signala na telefonu je zelo enostavno - a samo, Δe uporabljate GrapheneOS. GrapheneOS je operacijski sistem za mobilne telefone, ki ima vgrajene Ε‘tevilne varnostne mehanizme, poleg tega pa je zasnovan na naΔin, da kar najbolje skrbi za zasebnost uporabnika. Je odprtokoden, visoko kompatibilen z Androidom, vendar s Ε‘tevilnimi izboljΕ‘avami, ki izredno oteΕΎujejo oz. kar onemogoΔajo tako forenziΔni zaseg podatkov, kot tudi napade z vohunsko programsko opremo tipa Pegasus in Predator.
GrapheneOS omogoΔa uporabo veΔ profilov (do 31 + uporabniΕ‘ki profil tim. gosta), ki so med seboj popolnoma loΔeni. To pomeni, da lahko v razliΔnih profilih nameΕ‘Δate razliΔne aplikacije, imate povsem razliΔen seznam stikov, na enem profilu uporabljate en VPN, na drugem drugega ali pa sploh nobenega, itd.
ReΕ‘itev je torej preprosta. V mobilnem telefonu z GrapheneOS si odpremo nov profil, tam namestimo novo kopijo Signala, v telefon vstavimo drugo SIM kartico in Signal poveΕΎemo z novo Ε‘tevilko.
Ko je telefonska Ε‘tevilka registrirana, lahko SIM kartico odstranimo in v telefon vstavimo staro. Signal namreΔ za komunikacijo uporablja samo prenos podatkov (seveda lahko telefon uporabljamo tudi brez SIM kartice, samo na WiFi-ju). Na telefonu imamo sedaj nameΕ‘Δeni dve razliΔici Signala, vezani na dve razliΔni telefonski Ε‘tevilki, in iz obeh razliΔic lahko poΕ‘iljamo sporoΔila (tudi med njima dvema!) ali kliΔemo.
Δeprav so profili loΔeni, pa lahko nastavimo, da obvestila iz aplikacije Signal na drugem profilu, dobivamo tudi ko smo prijavljeni v prvi profil. Le za pisanje sporoΔil ali vzpostavljanje klicev, bo treba preklopiti v pravi profil na telefonu.
Preprosto, kajne?
Poganjanje veΔ razliΔic Signala na raΔunalniku
Zdaj bi si seveda nekaj podobnega ΕΎeleli tudi na raΔunalniku. Skratka, ΕΎeleli bi si moΕΎnosti, da na raΔunalniku, pod enim uporabnikom poganjamo dve razliΔni instanci Signala (vsaka vezana na svojo telefonsko Ε‘tevilko).
No, tukaj je zadeva na prvi pogled malenkost bolj zapletena, a se s pomoΔjo virtualizacije da teΕΎavo elegantno reΕ‘iti. Seveda na raΔunalniku samo za Signal ne bomo poganjali kar celega novega virtualnega stroja, lahko pa uporabimo tim. kontejner.
V operacijskem sistemu Linux najprej namestimo aplikacijo systemd-container
(v sistemih Ubuntu je sicer ΕΎe privzeto nameΕ‘Δena).
Na gostiteljskem raΔunalniku omogoΔimo tim neprivilegirane uporabniΕ‘ke imenske prostore (angl. unprivileged user namespaces), in sicer z ukazom sudo nano /etc/sysctl.d/nspawn.conf
, nato pa v datoteko vpiΕ‘emo:
kernel.unprivileged_userns_clone=1
Zdaj je SistemD storitev treba ponovno zagnati:
sudo systemctl daemon-reload
sudo systemctl restart systemd-sysctl.service
sudo systemctl status systemd-sysctl.service
β¦nato pa lahko namestimo Debootstrap: sudo apt install debootstrap
.
Zdaj ustvarimo nov kontejner, v katerega bomo namestili operacijski sistem Debian (in sicer razliΔico stable
) - v resnici bo nameΕ‘Δena le minimalno zahtevana koda operacijskega sistema:
sudo debootstrap --include=systemd,dbus stable
Dobimo pribliΕΎno takle izpis:
/var/lib/machines/debian
I: Keyring file not available at /usr/share/keyrings/debian-archive-keyring.gpg; switching to https mirror https://deb.debian.org/debian
I: Retrieving InRelease
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Checking component main on https://deb.debian.org/debian...
I: Retrieving adduser 3.134
I: Validating adduser 3.134
...
...
...
I: Configuring tasksel-data...
I: Configuring libc-bin...
I: Configuring ca-certificates...
I: Base system installed successfully.
Zdaj je kontejner z operacijskim sistemom Debian nameΕ‘Δen. Zato ga zaΕΎenemo in nastavimo geslo korenskega uporabnika
:
sudo systemd-nspawn -D /var/lib/machines/debian -U --machine debian
Dobimo izpis:
Spawning container debian on /var/lib/machines/debian.
Press Ctrl-] three times within 1s to kill container.
Selected user namespace base 1766326272 and range 65536.
root@debian:~#
Zdaj se preko navideznega terminala poveΕΎemo v operacijski sistem in vpiΕ‘emo naslednja dva ukaza:
passwd
printf 'pts/0\npts/1\n' >> /etc/securetty
S prvim ukazom nastavimo geslo, drugi pa omogoΔi povezavo preko tim. lokalnega terminala (TTY). Na koncu vpiΕ‘emo ukaz logout
in se odjavimo nazaj na gostiteljski raΔunalnik.
Zdaj je treba nastaviti omreΕΎje, ki ga bo uporabljal kontejner. Najbolj enostavno je, Δe uporabimo kar omreΕΎje gostiteljskega raΔunalnika. VpiΕ‘emo naslednja dva ukaza:
sudo mkdir /etc/systemd/nspawn
sudo nano /etc/systemd/nspawn/debian.nspawn
V datoteko vnesemo:
[Network]
VirtualEthernet=no
Zdaj kontejner ponovno zaΕΎenemo z ukazom sudo systemctl start systemd-nspawn@debian
ali pa Ε‘e enostavneje - machinectl start debian
.
Seznam zagnanih kontejnerjev si lahko tudi ogledamo:
machinectl list
MACHINE CLASS SERVICE OS VERSION ADDRESSES
debian container systemd-nspawn debian 12 -
1 machines listed.
Oziroma se poveΕΎemo v ta virtualni kontejner: machinectl login debian
. Dobimo izpis:
Connected to machine debian. Press ^] three times within 1s to exit session.
Debian GNU/Linux 12 cryptopia pts/1
cryptopia login: root
Password:
Na izpisu se vidi, da smo se povezali z uporabnikom root
in geslom, ki smo ga prej nastavili.
Zdaj v tem kontejnerju namestimo Signal Desktop.
apt update
apt install wget gpg
wget -O- https://updates.signal.org/desktop/apt/keys.asc | gpg --dearmor > signal-desktop-keyring.gpg
echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/signal-desktop-keyring.gpg] https://updates.signal.org/desktop/apt xenial main' | tee /etc/apt/sources.list.d/signal-xenial.list
apt update
apt install --no-install-recommends signal-desktop
halt
Z zadnjim ukazom kontejner zaustavimo. Zdaj je v njem nameΕ‘Δena sveΕΎa razliΔica aplikacije Signal Desktop.
Mimogrede, Δe ΕΎelimo, lahko kontejner preimenujemo v bolj prijazno ime, npr. sudo machinectl rename debian debian-signal
. Seveda pa bomo potem isto ime morali uporabljati tudi za zagon kontejnerja (torej, machinectl login debian-signal
).
Zdaj naredimo skripto, s katero bomo kontejner pognali in v njem zagnali Signal Desktop na naΔin, da bomo njegovo okno videli na namizju gostiteljskega raΔunalnika:
Ustvarimo datoteko nano /opt/runContainerSignal.sh
(ki jo shranimo npr. v mapo /opt
), vsebina datoteke pa je naslednja:
#!/bin/sh
xhost +local:
pkexec systemd-nspawn --setenv=DISPLAY=:0 \
--bind-ro=/tmp/.X11-unix/ \
--private-users=pick \
--private-users-chown \
-D /var/lib/machines/debian-signal/ \
--as-pid2 signal-desktop --no-sandbox
xhost -local:
S prvim xhost
ukazom omogoΔimo povezovanje na naΕ‘ zaslon, vendar samo iz lokalnega raΔunalnika, drugi xhost
ukaz pa bo te povezave (na zaslon) spet blokiral). Nastavimo, da je skripta izvrΕ‘ljiva (chmod +x runContainerSignal.sh
), in to je to.
Dve ikoni aplikacije Signal Desktop
No, ne Ε‘e Δisto, saj bi skripto morali zaganjati v terminalu, veliko bolj udoben pa je zagon s klikom na ikono.
Naredimo torej .desktop
datoteko: nano ~/.local/share/applications/runContainerSignal.desktop
. Vanjo zapiΕ‘emo naslednjo vsebino:
[Desktop Entry]
Type=Application
Name=Signal Container
Exec=/opt/runContainerSignal.sh
Icon=security-high
Terminal=false
Comment=Run Signal Container
β¦namesto ikone security-high
, lahko uporabimo kakΕ‘no drugo, na primer:
Icon=/usr/share/icons/Yaru/scalable/status/security-high-symbolic.svg
Pojasnilo: skripta je shranjena v ~/.local/share/applications/
, torej je dostopa samo specifiΔnemu uporabniku in ne vsem uporabnikom na raΔunalniku.
Zdaj nastavimo, da je .desktop
datoteka izvrΕ‘ljiva: chmod +x ~/.local/share/applications/runContainerSignal.desktop
OsveΕΎimo tim. namizne vnose (angl. Desktop Entries): update-desktop-database ~/.local/share/applications/
, in to je to!
Dve instanci aplikacije Signal Desktop"
Ko bomo v iskalnik aplikacij vpisali βSignal Containerβ, se bo prikazala ikona aplikacije, sklikom na njo pa bomo zagnali Signal v kontejnerju (bo pa za zagon potrebno vpisati geslo).
Zdaj ta Signal Desktop samo Ε‘e poveΕΎemo s kopijo Signala na telefonu in ΕΎe lahko na raΔunalniku uporabljamo dve kopiji aplikacije Signal Desktop.
Kaj pa�
Ε½al pa v opisanem primeru ne deluje dostop do kamere in zvoka. Klice bomo torej Ε‘e vedno morali opravljati iz telefona.
IzkaΕΎe se namreΔ, da je povezava kontejnerja z zvoΔnim sistemom PipeWire in kamero gostiteljskega raΔunalnika neverjetno zapletena (vsaj v moji postavitvi sistema). Δe imate namig kako zadevo reΕ‘iti, pa mi seveda lahko sporoΔite. :)