Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии... Love Qubes OS, Graphene OS, SimpleX, Amethyst 😎 Добавьте себе эти дополнительные реле во входищие и локальные, и увидите намного больше контента в nostr (rss + fediverse): wss://nostr.data.haus wss://relay.ditto.pub wss://relay.momostr.pink wss://nostr.twinkle.lol
Public Key
npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl Profile Code
nprofile1qqsvxru0je5s93mxecm8em86prae9uatn9khgdf2nd2frv8afm2979gpp4mhxue69uhkummn9ekx7mqpzemhxue69uhhyetvv9ujuurjd9kkzmpwdejhgcz9zyx
Show more details
Published at
2026-09-02T12:48:02Z Event JSON
{
"id": "1608d081bed2b61536126f13d09e7a4779c64e36f81e6f58d6cdea87b20cdbe4" ,
"pubkey": "c30f8f966902c766ce367cecfa08fb92f3ab996d74352a9b5491b0fd4ed45f15" ,
"created_at": 1788353282 ,
"kind": 0 ,
"tags": [
[
"alt",
"User profile for linux_privacy"
],
[
"name",
"linux_privacy"
],
[
"picture",
"https://blossom.primal.net/3b0783e6ff4c57e9ed5886e3d58db31592c28d0c06d6aff9157fca59291d6523.webp"
],
[
"banner",
"https://image.nostr.build/6bd3db5d6ad9157665747bc1ccc12b121517d138eada4ec389d175e02b6b1bf5.jpg"
],
[
"about",
"Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии...\nLove Qubes OS, Graphene OS, SimpleX, Amethyst 😎\n\nДобавьте себе эти дополнительные реле во входищие и локальные, и увидите намного больше контента в nostr (rss + fediverse):\nwss://nostr.data.haus\nwss://relay.ditto.pub\nwss://relay.momostr.pink\nwss://nostr.twinkle.lol"
],
[
"lud16",
"[email protected] "
],
[
"client",
"Amethyst"
]
],
"content": "{\"name\":\"linux_privacy\",\"about\":\"Privacy, Cypherpunk, #bitcoin #nostr на русском. и немного философии...\\nLove Qubes OS, Graphene OS, SimpleX, Amethyst 😎\\n\\nДобавьте себе эти дополнительные реле во входищие и локальные, и увидите намного больше контента в nostr (rss + fediverse):\\nwss://nostr.data.haus\\nwss://relay.ditto.pub\\nwss://relay.momostr.pink\\nwss://nostr.twinkle.lol\",\"gender\":\"\",\"area\":\"\",\"picture\":\"https://blossom.primal.net/3b0783e6ff4c57e9ed5886e3d58db31592c28d0c06d6aff9157fca59291d6523.webp\",\"banner\":\"https://image.nostr.build/6bd3db5d6ad9157665747bc1ccc12b121517d138eada4ec389d175e02b6b1bf5.jpg\",\"lud16\":\"[email protected] \",\"pubkey\":\"c30f8f966902c766ce367cecfa08fb92f3ab996d74352a9b5491b0fd4ed45f15\",\"is_deleted\":false}" ,
"sig": "79ed9bd74420bea7d6b63b98978224c4308daadaea08e1c2cdfca0008e37a83e5f20450c4c46106449adcfc22cdc307ef951e9056986cf76589c920665f439a5"
}
Last Notes npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Maybe you could add a browser for nostr web clients, with clearing of cookies and history? Users could chats safely on Vector and use nostr as a social network. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @nprofile…wywf sets high standards for #nostr, and I love it. Nostr is no longer just Twitter — it’s a powerful social network. Other clients should take inspiration from Amethyst, otherwise, users will end up with a basic Twitter without cool features like calls, podcasts, music, browser, private lists, and more. Another client with high standards is Ditto. And it’s great that we can now use Ditto directly in Amethyst through the built-in browser. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Он примерно раз в месяц делает новые статьи. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Мне кажется, лучше vps с амнезией (которая нереально легко устанавливается) и раздавать родственникам. Или пусть берут амнезию премиум, где теперь появился обход белых списков. Это будет проверенным решением и там тоже есть рефералки. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Это просто нереально крутое приложение. Зашифрованная переписка в любом мессенджере, даже из белого списка. Шифрование сигнала, pgp, стеганография (текст в картинке). Само приложение с кучей защиты. В общем, это бомба! Есть и в f-droid, и в zapstore. Лайков и звезд этому разрабу! #privacy #signal #pgp https://github.com/swisslite/Kryptos npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Появился крутой инструмент для новичков в Qubes OS! Графический инструмент, который мощно добавит удобств! Накидайте ему лайки на гитхабе https://github.com/Gizooyx/qubes-os-helper https://forum.qubes-os.org/t/qubesos-helper-dom0-gui-for-qube-management-salt-formulas-luks-encrypted-pools-etc/42833 А еще рекомендую этот крутейший скриншотер https://github.com/Gizooyx/qubes-os-helper #privacy #security npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy It's not about a specific relay, but about how the app handles relays. The same relay list shows me all posts in the feed in other apps. But my friends and I both have issues in Amethyst feed with this bridge-relays. And I'll repeat myself again: a post only disappears from the feed, if I go to those authors' accounts, I can see all their posts, and after that, those old posts immediately reappear in the feed too npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Accounts and their notes load quickly. But there are no notes in the feed. I don't see any notes from relay.momostr.pink in the feed at all, and 80% notes from nostr.data.haus. This is the only bug that makes it unpleasant to use Amethyst — forcing you to check each account individually instead of scrolling through a feed. Otherwise, Amethyst is awesome. Maybe just add clear browser cookies. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Seems like it, yes, same. It seems like this bridge-relay "relay.momostr.pink" doesn't appear in the feed at all until you go into the authors' accounts. For example, here's npubs: npub1em3c48ch5y3vn6n3jrfrs8lnwc8myvdl6aw87f04asyglwhk29cqnp3u4v npub1hpwuqgk7w8cfcuyrjk7pwcl3gf652ssgnq8ylfmh3av489tuhl6q9qcd0d Try checking this account for example (posts are published frequently): npub1xumnple866kt7fzjryjqw37ucr4cxv4704hxpa2856p8sx6h8t8qhg3zsv And here's for "nostr.data.haus". These aren't all the missing npubs, just 2 examples: npub1ykhehcxdysg20y29f6k86panx7zadhv84azuugthhlljwjakeghsxqws3h npub15fx0k7893jcx8kqrw4d84zywglafzqr0fdjaxth4e5a59tltxvjqs4075n But these RSS accounts don't disappear and I always see their posts in the feed: npub1jadusj2qgcc2qr9xzeq5vmdt3qesqgrxtvzd65t689kqc0llqjwq8nwvuv npub1lqvjhgwv2ak92a6jatfk9pjlr49p9uj2zqst0wwwfvew6f7tmrws9wyvwp Try subscribing, then restart the app. If you go into the accounts or adjust something in the relay settings, all posts may temporarily appear. But if you close the app and launch it later, many posts will disappear from the feed again. I'm clarifying once more: the issue is only in the feed. I can see all posts if I personally visit the authors' accounts. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I cleared the cache and restarted Amethyst. Now it skipped a lot of posts from all my feeds - it scrolled through the timeline going back two days very quickly. It seems like Amethyst takes a very long time reading feed caches, which is causing the post issues. But I distinctly remember that last year there were no such problems with posts. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I didn't set up any filters. I even disabled the spam filter. I see some posts from these relays, but not all. A lot of posts disappear from the feed, but I can see all those posts if I go to the author's page. And it's definitely not a tagging issue. So far, I can say that wisp and 0xchat show all posts from both public and private contacts. I hope this will be fixed in Amethyst, because right now Amethyst seems almost perfect as a Nostr app in terms of functionality. Once, I somehow managed to fix this, but after restarting it stopped working again (maybe the cache wasn't saved). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Basically, message disappear from these relays nostr.data.haus relay.ditto.pub poorly displayed posts of bridge-accounts (mastodon, rss, mastodon). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy https://blossom.primal.net/de69ac1f299600fba1e0bb41586763ce3c7d7de79b140a84f14cdd067daf7def.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @nprofile…pt5w Some posts are disappearing in Amethyst. I don't know what's causing this, but if you visit the post author's account, the post will appear in feed. Wisp doesn't have this problem — I can see all posts from everyone I follow. Please check it. I haven't encountered this issue in older versions. Currently, I'm not seeing approximately 20% of posts — all necessary relays have been added. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Первая часть разбора шпионских функций приложений Яндекс. Иногда там всё страшнее, чем в максе. https://habr.com/ru/articles/1064698/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Уже прошла четвертая атака. Никогда не ленитесь увеличивать энтропию и проверяйте ее при выборе кошелька + добавляйте 25 слово. Сейчас лучший вариант - создать новый кошелёк на старом оффлайн телефоне с помощью Airgap Vault и отправить всё туда. Можно купить старый дешевый pixel 3a, установить туда линукс Droidian (очень легко устанавливается), и затем в нем запустить overlayfs в tmpfs или в эфемерно-зашифрованном контейнере, затем запустить Waydroid, который не сохранит никаких следов на диске после перезагрузки, поставить туда Airgap Vault и вырубить интернет, создать кошелек, сохранить адрес и сид фразу, и перезагрузиться. Итого, кошелек будет создан безопасно + на телефоне об этом не останется никаких следов и никакая криминалистическая экспертиза не сможет получить данные о кошельке. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Там блочат всё, что можно, чего даже официально нет в списках запрещенки. Поэтому надо подбирать реле, чтоб всё работало норм. Популярные реле могут вообще не работать во многих регионах. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy А твой реле случаем не из тех, которые пашут в рф без впн? А то я его быстро везде распиарю npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Amethyst бомба! #nevent1q…7mhj npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Encrypted AppVMs and Templates. Encrypted pool. Secret vault in a LUKS-Pool. :gear: Install: Make sure there is sufficient free space (more than 3 GB) in dom0. You can resize dom0 these commands: sudo lvresize --size 3G /dev/mapper/qubes_dom0-root sudo resize2fs /dev/mapper/qubes_dom0-root sudo lvresize -L +3G qubes_dom0/root-pool I recommend disabling disk swap for maximum security: Qubes OS uses zram for compressed RAM swap, but also maintains a fallback swap partition at /dev/dm-5 which is not encrypted. For a vault pool setup, this is a security risk - sensitive memory pages from your secret VMs could be written to disk in plaintext. sudo sed -i '/\/dev\/mapper\/swap/!{/^[[:space:]]*#/!{/\<swap\>/s/^/# /}}' /etc/fstab sudo sed -i '/\/dev\/mapper\/swap/b; /[[:space:]]\+swap[[:space:]]\+/s/^/# /' /etc/fstab sudo dracut --force Run this simple script for create 3 GB encrypted pool vault (edit POOL_SIZE="3G" if you need a different pool size) #!/bin/bash set -euo pipefail POOL_DIR="/var/lib/qubes/pools" POOL_IMG="$POOL_DIR/vault.img" POOL_SIZE="3G" VG_NAME="vault_vg" LV_NAME="vault_thin" MAPPER_NAME="vault_crypt" cleanup() { local dev="${LOOP_DEV:-}" if [ -n "$dev" ] && losetup -a | grep -q "$dev"; then echo "[*] Cleanup: detaching $dev" losetup -d "$dev" 2>/dev/null || true fi } trap cleanup EXIT echo "========================================" echo " Creating an encrypted Qubes pool" echo "========================================" echo if [ "$EUID" -ne 0 ]; then echo "[!] This script must be run as root (dom0)" exit 1 fi if [ -f "$POOL_IMG" ]; then echo "[!] File $POOL_IMG already exists." read -r -p " Delete and recreate? Type YES to confirm: " confirm if [ "$confirm" != "YES" ]; then echo "[!] Aborted by user" exit 1 fi rm -f "$POOL_IMG" fi echo "[*] Creating directory $POOL_DIR" mkdir -p "$POOL_DIR" echo "[*] Creating a loop file of size $POOL_SIZE" truncate -s "$POOL_SIZE" "$POOL_IMG" echo "[*] Attaching loop device" LOOP_DEV=$(losetup -f --show "$POOL_IMG") echo " Device: $LOOP_DEV" echo echo "[*] Encrypting device $LOOP_DEV" echo " Enter the LUKS passphrase (twice)" cryptsetup luksFormat "$LOOP_DEV" echo echo "[*] Opening the LUKS container" cryptsetup open "$LOOP_DEV" "$MAPPER_NAME" echo echo "[*] Creating LVM: PV -> VG -> Thin Pool" pvcreate "/dev/mapper/$MAPPER_NAME" vgcreate "$VG_NAME" "/dev/mapper/$MAPPER_NAME" lvcreate -T -n "$LV_NAME" -l +100%FREE "$VG_NAME" echo echo "[*] Detaching the loop device (LVM stays active)" losetup -d "$LOOP_DEV" unset LOOP_DEV qvm-pool --add vault lvm_thin \ -o volume_group=vault_vg,thin_pool=vault_thin,revisions_to_keep=2 echo echo "========================================" echo " Pool created successfully!" echo "========================================" cat > /usr/local/bin/vault-open << 'EOF' #!/bin/bash # open-and-register-vault.sh set -euo pipefail if [ "$EUID" -ne 0 ]; then echo "[!] Must be run as root" exit 1 fi # 1. Attach loop LOOP_DEV=$(losetup -f --show /var/lib/qubes/pools/vault.img) echo "[*] Loop: $LOOP_DEV" # 2. Unlock LUKS cryptsetup open "$LOOP_DEV" vault_crypt echo "[*] LUKS opened" # 3. Activate LVM vgchange -ay vault_vg echo "[*] LVM activated" # 4. Register pool in Qubes if not already present if ! qvm-pool --list | grep -q "^vault "; then echo "[*] Registering pool in Qubes" qvm-pool --add vault lvm_thin \ -o volume_group=vault_vg,thin_pool=vault_thin,revisions_to_keep=2 else echo "[*] Pool already registered" fi echo "[*] Done. Verification:" qvm-pool --info vault EOF cat > /usr/local/bin/vault-close << 'EOF' #!/bin/bash # close-vault.sh set -euo pipefail if [ "$EUID" -ne 0 ]; then echo "[!] Must be run as root" exit 1 fi # 1. Stop all running VMs from the vault pool RUNNING_VMS=$(qvm-ls --running --fields=name,pool | grep vault | awk '{print $1}' || true) if [ -n "$RUNNING_VMS" ]; then echo "[*] Stopping VMs from the vault pool..." for vm in $RUNNING_VMS; do echo " -> $vm" qvm-shutdown --wait "$vm" done echo "[*] All vault pool VMs stopped" fi # 2. Deactivate LVM vgchange -an vault_vg || true # 3. Close LUKS (wipes key from kernel memory) cryptsetup close vault_crypt || true # 4. Detach loop LOOP_DEV=$(losetup -j /var/lib/qubes/pools/vault.img 2>/dev/null | head -1 | cut -d: -f1) if [ -n "$LOOP_DEV" ]; then losetup -d "$LOOP_DEV" fi echo "[*] Pool locked and key wiped from memory" EOF Confirm creation: When prompted, type YES to proceed (this overwrites any existing vault pool file). Set your LUKS passphrase: Enter and confirm a strong passphrase when prompted - this will be required every time you unlock the pool. Open the pool when needed in dom0: sudo vault-open and enter your LUKS passphrase. Assign VMs to the vault pool via Qubes Manager: click clone qube and in Advanced select vault in Storage pool. Or create a new qube, and select vault Storage pool in the Advanced Options. 1 1751×251 21.3 KB Now your secret VMs can run. Close the pool when finished: sudo vault-close this shuts down all vault VMs, deactivates LVM, wipes the encryption key from kernel memory, and locks the container. :eyes: :eyes: Opening large pools takes time. If you created a large pool and it contains significant data (tens of GB), opening it with vault-open may take 10-20 seconds - this is normal, as LVM needs to scan and activate the thin pool metadata. Backup the container along with your VMs. You can copy the encrypted container file together with backups of your AppVMs from this pool. The container is located at: /var/lib/qubes/pools/vault.img Since the container is fully encrypted, you can store it on external media or in cloud storage without additional encryption - the LUKS passphrase protects all data inside. If you need additional disk swap, you can create an ephemeral encrypted swap - there’s a simple guide in the description of this guide. :bomb: Removing Encrypted Pool To completely remove the vault pool and all associated data, use this script. This will permanently delete all VMs stored in the pool. (When prompted, type DELETE to proceed - this permanently destroys all vault VMs and their data) #!/bin/bash set -euo pipefail POOL_NAME="vault" POOL_DIR="/var/lib/qubes/pools" POOL_IMG="$POOL_DIR/vault.img" VG_NAME="vault_vg" LV_NAME="vault_thin" MAPPER_NAME="vault_crypt" echo "========================================" echo " Removing encrypted pool" echo "========================================" echo if [ "$EUID" -ne 0 ]; then echo "[!] This script must be run as root (dom0)" exit 1 fi echo "[!] WARNING: ALL data in the pool will be destroyed!" read -r -p " Type DELETE to confirm: " confirm if [ "$confirm" != "DELETE" ]; then echo "[!] Aborted by user" exit 1 fi for vm in $(qvm-ls --raw-list 2>/dev/null); do if qvm-volume list "$vm" 2>/dev/null | grep -q "${POOL_NAME}"; then echo " -> Removing VM: $vm" qvm-kill "$vm" 2>/dev/null || true sleep 1 qvm-remove --force "$vm" 2>/dev/null || true sleep 1 fi done if lvs "$VG_NAME/$LV_NAME" &>/dev/null; then echo "[*] Deactivating thin pool $VG_NAME/$LV_NAME" lvchange -an "$VG_NAME/$LV_NAME" || true fi if vgs "$VG_NAME" &>/dev/null; then echo "[*] Deactivating Volume Group $VG_NAME" vgchange -an "$VG_NAME" || true fi if dmsetup info "$MAPPER_NAME" &>/dev/null; then echo "[*] Closing LUKS container /dev/mapper/$MAPPER_NAME" cryptsetup close "$MAPPER_NAME" || true else echo "[*] LUKS container already closed" fi if vgs "$VG_NAME" &>/dev/null; then echo "[*] Removing Volume Group $VG_NAME" vgremove -y "$VG_NAME" || true else echo "[*] Volume Group $VG_NAME not found or already removed" fi if [ -f "$POOL_IMG" ]; then LOOP_DEV=$(losetup -j "$POOL_IMG" 2>/dev/null | head -1 | cut -d: -f1) if [ -n "$LOOP_DEV" ]; then echo "[*] Detaching loop device $LOOP_DEV" losetup -d "$LOOP_DEV" 2>/dev/null || true else echo "[*] Loop device already detached" fi fi if [ -f "$POOL_IMG" ]; then echo "[*] Deleting container file $POOL_IMG" rm -f "$POOL_IMG" fi if [ -d "$POOL_DIR" ] && [ -z "$(ls -A "$POOL_DIR" 2>/dev/null)" ]; then echo "[*] Removing empty directory $POOL_DIR" rmdir "$POOL_DIR" 2>/dev/null || true fi qvm-pool remove $POOL_NAME echo echo "========================================" echo " Pool removed" echo "========================================" npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy This guide adds a hidden “nuke” password to your LUKS-encrypted disk. If you ever type this special password instead of your real one during boot, the system instantly and permanently destroys all encryption keys on the disk, making the data completely unrecoverable. Here’s how it works: During boot, your system asks for a password to unlock the disk. This guide installs a small wrapper that sits between the boot process and the standard disk-unlocking tool. Every time you enter a password, the wrapper quietly checks it against the nuke password hash stored on the system. If it’s your normal password, the wrapper simply passes it along to the regular unlocking tool and your disk opens as usual. But if it detects the nuke password, it immediately wipes all encryption key slots on the disk and overwrites the LUKS header with random data, effectively destroying the disk beyond recovery. The whole thing integrates seamlessly with the existing boot process, so the password prompt looks identical whether you’re entering your real password or the nuke one - there’s no visible indication that anything unusual happened until it’s too late. :warning: Warning! Do not test this script on your working system! You can install and configure the nuke module, but do not enter the nuke password for testing during Qubes OS boot! If you want to test the script, install a Fedora ISO and nuke it (I destroyed Fedora 43 and 44 with nuke password). Install: Install openssl: sudo qubes-dom0-update openssl Create dir for nuke password: sudo mkdir -p /etc/cryptsetup-nuke-ng sudo chmod 700 /etc/cryptsetup-nuke-ng Enter this command and then enter nuke password (hidden input): read -rs NUKE_PASS echo Generate random salt (enter this command and again enter nuke password (hidden input)): read -rs NUKE_PASS; echo; SALT=$(tr -dc 'a-zA-Z0-9' </dev/urandom | head -c 8); printf '%s' "$NUKE_PASS" | openssl passwd -6 -salt "$SALT" -stdin | sudo tee /etc/cryptsetup-nuke-ng/password_hash >/dev/null; sudo chmod 600 /etc/cryptsetup-nuke-ng/password_hash; NUKE_PASS=$(dd if=/dev/urandom bs=64 count=1 2>/dev/null | base64); unset NUKE_PASS Check hash format: sudo cat /etc/cryptsetup-nuke-ng/password_hash (should be: $6$salt$very_long_hash_string...) Password verification (enter this command and again enter nuke password (hidden input)): read -rs TEST_PASS; echo; HASH=$(sudo cat /etc/cryptsetup-nuke-ng/password_hash); SALT=$(echo "$HASH" | sed 's/^\$6\$\([^$]*\)\$.*/\1/'); printf '%s' "$TEST_PASS" | openssl passwd -6 -salt "$SALT" -stdin | grep -q "^$(sudo cat /etc/cryptsetup-nuke-ng/password_hash)$" && echo "✓ MATCH" || echo "✗ NO MATCH"; unset TEST_PASS (should be: ✓ MATCH) Create dracut module: sudo mkdir -p /usr/lib/dracut/modules.d/99nuke-systemd sudo tee /usr/lib/dracut/modules.d/99nuke-systemd/module-setup.sh << 'EOF' #!/bin/bash check() { if [ ! -f /etc/cryptsetup-nuke-ng/password_hash ]; then derror "nuke password hash not found" return 1 fi return 0 } depends() { echo systemd crypt return 0 } install() { inst /etc/cryptsetup-nuke-ng/password_hash inst_multiple dd mktemp rm cat printf stty cryptsetup openssl systemd-ask-password # Find the real systemd-cryptsetup local real_binary="" for path in "$initdir/usr/bin/systemd-cryptsetup" "$initdir/usr/lib/systemd/systemd-cryptsetup"; do if [ -f "$path" ] && [ ! -L "$path" ]; then real_binary="$path" break fi done if [ -z "$real_binary" ]; then real_binary=$(find "$initdir" -name "systemd-cryptsetup" -type f ! -type l 2>/dev/null | head -n1) fi if [ -z "$real_binary" ]; then dfatal "Cannot find real systemd-cryptsetup binary in initramfs" return 1 fi dinfo "Found systemd-cryptsetup at: $real_binary" # Save the original mv "$real_binary" "${real_binary}.real" # Create the wrapper cat > "$real_binary" << 'WRAPPER' #!/bin/bash set -e NUKE_HASH_FILE="/etc/cryptsetup-nuke-ng/password_hash" SYSTEMD_CRYPTSETUP="${0}.real" # If no hash present — just run the original if [ ! -f "$NUKE_HASH_FILE" ]; then exec "$SYSTEMD_CRYPTSETUP" "$@" fi NUKE_HASH=$(cat "$NUKE_HASH_FILE") NUKE_SALT=$(echo "$NUKE_HASH" | sed 's/^\$6\$\([^$]*\)\$.*/\1/') # Only for attach without keyfile if [ "$1" = "attach" ]; then KEYFILE="$4" DEVICE="$3" NAME="$2" # If keyfile is specified and not "-"/"none", the password is not requested interactively if [ -n "$KEYFILE" ] && [ "$KEYFILE" != "-" ] && [ "$KEYFILE" != "none" ]; then exec "$SYSTEMD_CRYPTSETUP" "$@" fi # Request password via systemd-ask-password (Plymouth compatible!) PASSWORD=$(systemd-ask-password --no-tty "Please enter passphrase for disk $NAME:" 2>/dev/null || true) # If systemd-ask-password didn't work, fallback to TTY if [ -z "$PASSWORD" ] && [ -t 0 ]; then printf 'Please unlock disk %s: ' "$NAME" >&2 stty -echo 2>/dev/null || true IFS= read -r PASSWORD stty echo 2>/dev/null || true printf '\n' >&2 fi # Verify nuke password via openssl if [ -n "$PASSWORD" ]; then COMPUTED=$(printf '%s' "$PASSWORD" | openssl passwd -6 -salt "$NUKE_SALT" -stdin) if [ "$COMPUTED" = "$NUKE_HASH" ]; then printf '[NUKE] Nuke password detected! Destroying keys...\n' >&2 # Destroy all keyslots for slot in 0 1 2 3 4 5 6 7; do cryptsetup luksKillSlot "$DEVICE" "$slot" 2>/dev/null || true done # Overwrite the header for extra certainty if command -v dd >/dev/null 2>&1; then dd if=/dev/urandom of="$DEVICE" bs=1M count=4 2>/dev/null || true fi printf '[NUKE] Device %s nuked.\n' "$DEVICE" >&2 exit 1 fi fi # Pass the password via temporary file (keyfile) KEYFILE=$(mktemp -p /dev/shm 2>/dev/null || mktemp) chmod 600 "$KEYFILE" printf '%s' "$PASSWORD" > "$KEYFILE" PASSWORD="" # Call the original with keyfile instead of interactive prompt set +e "$SYSTEMD_CRYPTSETUP" "$1" "$2" "$3" "$KEYFILE" "$5" STATUS=$? set -e # Clean up keyfile dd if=/dev/urandom of="$KEYFILE" bs=512 count=1 2>/dev/null || true rm -f "$KEYFILE" exit $STATUS fi # For all other commands — run the original exec "$SYSTEMD_CRYPTSETUP" "$@" WRAPPER chmod +x "$real_binary" # Update symlink if needed if [ -L "$initdir/usr/lib/systemd/systemd-cryptsetup" ]; then rm -f "$initdir/usr/lib/systemd/systemd-cryptsetup" ln -s "../../bin/systemd-cryptsetup" "$initdir/usr/lib/systemd/systemd-cryptsetup" fi dinfo "Installed nuke wrapper for systemd-cryptsetup" } EOF sudo chmod +x /usr/lib/dracut/modules.d/99nuke-systemd/module-setup.sh Dracut update: sudo dracut --force --verbose You will see this logs: ... dracut[I]: *** Including module: nuke-systemd *** dracut[I]: Found systemd-cryptsetup at: /var/tmp/dracut.o6togY/initramfs/usr/bin/systemd-cryptsetup dracut[I]: Installed nuke wrapper for systemd-cryptsetup ... :white_check_mark: Done! npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Duress password is integrated at two authentication points: the lightdm display manager for system login, and the xscreensaver lock screen for session unlock. This ensures the duress action can be triggered both at initial boot authentication and when unlocking an existing session. See this guide for creating a duress nuke-password for a LUKS-encrypted disk: Hidden “nuke” duress-password to LUKS-encrypted disk. Qubes OS LUKS self-destruct module Make backups of all your VMs beforehand. Download this repository in dvm: git clone https://github.com/nuvious/pam-duress.git then add it to a ZIP archive, for example pam.zip Send it to dom0 and extract archive qvm-run --pass-io dispXXX 'cat /home/user/pam.zip' > pam.zip unzip pam.zip Run these commands to build the module in dom0 and create duress-password: sudo qubes-dom0-update gcc gcc-c++ make cmake automake pam-devel openssl-devel cd pam-duress make sudo make install PAM_DIR=/usr/lib64/security make clean mkdir -p ~/.duress sudo mkdir -p /etc/duress.d Create a scripts with two scenarios: 1. Scenario: Delete some VMs and delete this script itself: cat > ~/remove_vm.sh << 'EOF' #!/bin/bash if ! [ -w /run/qubesd.sock ] && [ -z "$DURESS_REEXEC" ]; then exec sg qubes "DURESS_REEXEC=1 $0 $*" fi export PATH="/usr/bin:/usr/sbin:/bin:/sbin:$PATH" # Add the names of VMs to be deleted here 'test_vm' /usr/bin/qvm-remove --force test_vm EOF chmod +x ~/remove_vm.sh ( :backhand_index_pointing_up: Add the names of VMs to be deleted here ‘test_vm’) 2. Scenario: Total system destruction: cat > ~/remove_qubes.sh << 'EOF' #!/bin/bash # WARNING: This script irreversibly destroys data. Use only for duress password. if ! [ -w /run/qubesd.sock ] && [ -z "$DURESS_REEXEC" ]; then exec sg qubes "DURESS_REEXEC=1 $0 $*" fi export PATH="/usr/bin:/usr/sbin:/bin:/sbin:$PATH" # ========== PHASE 0: REMOVE RAM-WIPE MODULE ========== RAM_WIPE_DIR="/usr/lib/dracut/modules.d/40ram-wipe" if [ -d "$RAM_WIPE_DIR" ]; then echo "[*] Removing ram-wipe dracut module to prevent shutdown stall..." rm -rf "$RAM_WIPE_DIR" fi # ========== PHASE 1: DESTROY LUKS HEADER ========== LUKS_DEV="" for dev in /dev/nvme0n1p3 /dev/sda2 /dev/vda2 /dev/mapper/luks-*; do cryptsetup isLuks "$dev" 2>/dev/null && LUKS_DEV="$dev" && break done if [ -n "$LUKS_DEV" ]; then echo "[*] Erasing LUKS header on $LUKS_DEV..." if cryptsetup luksErase --batch-mode "$LUKS_DEV" 2>/dev/null; then echo "[*] LUKS header destroyed. Triggering emergency reboot..." echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger xl debug-keys R 2>/dev/null || true exit 0 fi fi # ========== PHASE 2: FALLBACK - DESTROY ALL VMs + CORRUPT LVM ========== echo "[!] LUKS erase failed or not found. Executing fallback destruction..." echo "[*] Removing all qubes..." qvm-remove --all -f 2>/dev/null || true echo "[*] Corrupting LVM metadata..." vgremove -ff qubes_dom0 2>/dev/null || true for pv in /dev/nvme0n1p3 /dev/sda2 /dev/vda2; do [ -b "$pv" ] && dd if=/dev/urandom of="$pv" bs=1M count=4 conv=notrunc 2>/dev/null && break done # ========== PHASE 3: INSTANT REBOOT ========== echo "[*] Triggering emergency reboot..." echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger xl debug-keys R 2>/dev/null || true EOF chmod +x ~/remove_qubes.sh Then add scripts in duress module: cat > ~/.duress/remove_passwd.sh << 'EOF' #!/bin/sh /home/user/remove_vm.sh rm -rf /home/user/remove_vm.sh rm -rf /var/log/qubes EOF cat > ~/.duress/remove_passwd2.sh << 'EOF' #!/bin/sh /home/user/remove_qubes.sh EOF then chmod 500 ~/.duress/remove_passwd.sh chmod 500 ~/.duress/remove_passwd2.sh duress_sign ~/.duress/remove_passwd.sh add alternative password for destroying VMs duress_sign ~/.duress/remove_passwd2.sh add alternative password for destroying system and then: chmod 400 ~/.duress/remove_passwd.sh.sha256 chmod 400 ~/.duress/remove_passwd2.sh.sha256 Check: ls -la ~/.duress/ Module created. Now we need to modify this file /etc/pam.d/system-auth sudo nano /etc/system-auth Add this line auth sufficient pam_duress.so so that the first 6 auth-lines look like this: auth required pam_env.so auth required pam_faildelay.so delay=2000000 auth sufficient pam_fprintd.so auth sufficient pam_unix.so nullok auth sufficient pam_duress.so auth required pam_deny.so then click Ctrl + C and Ctrl + X Done. :fire: Now first duress password will remove some VMs. :radioactive: Second duress password will destroy and forcibly shutdown the system. It should protect against forensics (disk will become unreadable). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Топовые гайды по Qubes OS в комментах (шпаргалка, чтоб не потерять) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Установка pam-duress на Droidian, чтобы создавать ложные пинкоды / пароли, которые уничтожат все опасные файлы и приложения при разблокировке телефона sudo apt-get update sudo apt-get install -y build-essential libpam0g-dev libssl-dev git clone https://github.com/nuvious/pam-duress.git cd pam-duress make sudo make install make clean mkdir -p ~/.duress sudo mkdir -p /etc/duress.d # сюда пишем аварийные команды для удаления / изменения cat > ~/.duress/remove_test.sh << 'EOF' #!/bin/sh rm -rf /home/droidian/test EOF chmod 500 ~/.duress/remove_test.sh duress_sign ~/.duress/remove_test.sh chmod 400 ~/.duress/remove_test.sh.sha256 # проверка ls -la ~/.duress/ # меняем полностью /etc/pam.d/common-auth sudo nano /etc/pam.d/common-auth # here are the per-package modules (the "Primary" block) auth [success=2 default=ignore] pam_unix.so nullok auth [success=1 default=ignore] pam_duress.so # here's the fallback if no module succeeds auth requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around auth required pam_permit.so # and here are more per-package modules (the "Additional" block) auth optional pam_cap.so # end of pam-auth-update config # проверка mkdir -p /home/droidian/test touch /home/user/test/test_file.txt npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy допольнительные тулзы для помощи RAM от перегрева. # OOM-менеджер: earlyoom sudo apt update sudo apt install earlyoom sudo systemctl enable --now earlyoom Настройка в /etc/default/earlyoom: EARLYOOM_ARGS="-m 8,8 -s 15,15 --prefer '(Web Content|Isolated Web|brave-browser|brave|firefox|firefox-esr|chromium|chromium-browser|waydroid|waydroid-full-ui)' --avoid '(phosh|phoc|systemd|ofono|NetworkManager|pulseaudio|lxc@android|gnome-session|dbus)' -r 3600" # Скрипт периодического сброса кэша под давлением: sudo nano /usr/local/bin/droidian-memory-guard.sh #!/bin/bash THRESHOLD=85 COOLDOWN=600 while true; do MEM_USED=$(free | awk '/Mem:/ {printf "%.0f", ($2-$7)/$2*100}') if [ "$MEM_USED" -gt "$THRESHOLD" ]; then NOW=$(date +%s) LAST=$(cat /run/droidian-memguard.last 2>/dev/null || echo 0) if [ $((NOW - LAST)) -gt "$COOLDOWN" ]; then sync echo 3 > /proc/sys/vm/drop_caches echo "$NOW" > /run/droidian-memguard.last logger -t droidian-memguard "Caches dropped at ${MEM_USED}%" fi fi sleep 60 done sudo chmod +x /usr/local/bin/droidian-memory-guard.sh sudo nano /etc/systemd/system/droidian-memguard.service [Unit] Description=Droidian Memory Guard After=network.target [Service] Type=simple ExecStart=/usr/local/bin/droidian-memory-guard.sh Restart=always [Install] WantedBy=multi-user.target sudo systemctl enable --now droidian-memguard # Вырубим анимацию в Phosh gsettings set org.gnome.desktop.interface enable-animations false # Еще можно установить предел памяти для waydroid: sudo nano /var/lib/waydroid/lxc/waydroid/config lxc.cgroup.memory.limit_in_bytes = 900M # Eсли хотите увеличить размер zram0, то: sudo su swapoff /dev/zram0 echo 1 > /sys/block/zram0/reset echo 2500M > /sys/block/zram0/disksize mkswap /dev/zram0 swapon /dev/zram0 -p 50 # или ставьте 100, если надо, чтобы zram0 работал на пределе без помощи swapfile npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Режим работы в памяти уже отличается сильно от мобиан - не получится просто так засунуть скрипт в initramfs, чтобы система, как в tails, запускалась в памяти при запуске. Поэтому будем пользоваться этим режимом в уже запущенной системе, создав переключатель, в котором надо будет просто ввести команду sudo overlay on. в скрипте в TARGET_DIRS можно указать либо весь корень, либо отдельные папки. Корень лучше не указывать, иначе swapfile не будет работать и напряг памяти увеличится. создайте скрипт в /usr/local/bin/overlay: #!/bin/bash # Toggle overlay mode for /etc and /var UPPER_BASE="/mnt/overlay-persistent" # Change to tmpfs path for ephemeral STATE_FILE="/run/overlay-active" TARGET_DIRS="/etc /var /home /root /usr /opt" toggle_on() { [ -f "$STATE_FILE" ] && { echo "Already active"; exit 1; } mkdir -p "$UPPER_BASE" mount -t tmpfs -o size=50% tmpfs "$UPPER_BASE" for dir in $TARGET_DIRS; do local name=$(echo "$dir" | tr '/' '-') local upper="$UPPER_BASE/$name-upper" local work="$UPPER_BASE/$name-work" local lower="$UPPER_BASE/$name-lower" mkdir -p "$upper" "$work" "$lower" # Bind-mount original to preserve access mount --bind "$dir" "$lower" mount --make-private "$lower" # Mount overlay mount -t overlay -o "lowerdir=$lower,upperdir=$upper,workdir=$work" overlay "$dir" echo "Overlay active: $dir" done touch "$STATE_FILE" echo "Overlay mode ON" } toggle_off() { [ ! -f "$STATE_FILE" ] && { echo "Not active"; exit 1; } for dir in $TARGET_DIRS; do umount "$dir" 2>/dev/null || true done # Clean up bind mounts for mnt in $(mount | grep "$UPPER_BASE" | awk '{print $3}' | tac); do umount "$mnt" 2>/dev/null || true done rm -f "$STATE_FILE" echo "Overlay mode OFF" sync reboot } show_status() { if [ -f "$STATE_FILE" ]; then echo "Overlay: ACTIVE" echo "Upperdir location: $UPPER_BASE" echo "Changes are stored on: $(df -T "$UPPER_BASE" | tail -1 | awk '{print $2}')" else echo "Overlay: INACTIVE" fi } case "$1" in on) toggle_on ;; off) toggle_off ;; status) show_status ;; *) echo "Usage: $0 {on|off|status}" ;; esac npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Дополнительный зашифрованный swap на 4 гига - для старых телефонов свопов много не бывает. Работать будет вместо с zram0: #!/bin/bash set -e SWAP_SIZE="4G" # Reduced for eMMC longevity echo "[*] Creating ${SWAP_SIZE} swap file..." # Use dd instead of fallocate for better compatibility with encrypted filesystems # fallocate may create holes that don't work well with encryption dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress chmod 600 /swapfile echo "[*] Creating encrypted swap script..." cat > /usr/local/bin/encrypted-swap.sh <<'SCRIPT' #!/bin/bash set -e # Ждём, пока zram будет создан for i in {1..30}; do if [ -b /dev/zram0 ]; then break fi sleep 1 done # Отключаем существующие swap swapoff /dev/zram0 2>/dev/null || true swapoff /dev/mapper/swapfile 2>/dev/null || true cryptsetup close swapfile 2>/dev/null || true losetup -D 2>/dev/null || true rm -f /run/encrypted-swap.loop # Настраиваем loop для swapfile LOOPDEV=$(losetup -f --show /swapfile) echo "$LOOPDEV" > /run/encrypted-swap.loop # Открываем с шифрованием cryptsetup open --type plain \ --key-file /dev/urandom \ --cipher aes-xts-plain64 \ --key-size 256 \ "$LOOPDEV" swapfile mkswap -f /dev/mapper/swapfile # Активируем ОБА swap с ОДИНАКОВЫМ приоритетом swapon -p 50 /dev/zram0 swapon -p 50 /dev/mapper/swapfile SCRIPT chmod +x /usr/local/bin/encrypted-swap.sh echo "[*] Creating systemd service..." cat > /etc/systemd/system/encrypted-swap.service <<'SERVICE' [Unit] Description=Encrypted Swap After=local-fs.target # Start after zram so we can set lower priority After=zramswap.service Wants=zramswap.service [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/local/bin/encrypted-swap.sh ExecStop=/bin/bash -c 'swapoff /dev/mapper/swapfile 2>/dev/null; cryptsetup close swapfile 2>/dev/null; LOOPDEV=$(cat /run/encrypted-swap.loop 2>/dev/null) && losetup -d $LOOPDEV 2>/dev/null || true; rm -f /run/encrypted-swap.loop' [Install] WantedBy=multi-user.target SERVICE echo "[*] Cleaning up crypttab and fstab..." sed -i '/swap/d' /etc/crypttab 2>/dev/null || true sed -i '/swap/d' /etc/fstab 2>/dev/null || true echo "[*] Configuring swap preferences..." # Moderate swappiness - let kernel decide, but prefer zram cat > /etc/sysctl.d/99-swap.conf <<'EOF' # Prefer zram over disk swap vm.swappiness=100 vm.vfs_cache_pressure=200 EOF echo "[*] Enabling encrypted swap service..." systemctl daemon-reload systemctl enable encrypted-swap.service echo "[*] Activating encrypted swap..." /usr/local/bin/encrypted-swap.sh echo "" echo "[*] Verification:" swapon --show cryptsetup status swapfile 2>/dev/null || echo "cryptsetup status failed, checking lsblk:" lsblk | grep -i swap || true free -h | grep -i swap echo "" echo "[*] Encrypted swap setup complete." echo "[*] New random key generated at each boot." echo "[*] Swap data is unrecoverable after shutdown." echo "[*] WARNING: Disk swap on eMMC wears storage. Consider larger zram instead." npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Droidian - более мобильный аналог Mobian. https://droidian.org/ Если Mobian - это чистый дебиан на телефоне, то droidian - это дебиан с ограничениями, но зато с хорошо работающими функциями телефона: камера, звонки, уведомления работают отлично. Установка очень простая - через UBports просто нажав пару кнопок, но важно, чтобы телефон был сброшен до определенной версии андроида. На телефоне пиксель 3а - это андроид 9. Устанавливаем пакеты: sudo apt install adb fastboot Заходим на сайт flash.android.com с гугл хрома (да, это бесит, но не страшно - можно засунуть хром в контейнер и трафик с тора пустить), подключаем телефон к юсб в режиме fastboot, даем разрешения сайту на отладку и выбираем андроид 9, затем нажимаем на карандаш и убираем галочку с "заблокировать загрузчик". минут 5 ждем и готово. Затем скачиваем UBports с сайта убунты тач https://devices.ubuntu-touch.io/installer/appimage (кстати, убунту тач - фигня полная), и запускаем там установку в простом графическом интерфейсе. ждем минут 5 и телефон перезагрузится в Droidian. Пинкод будет 1234, как в мобина. По мне так это самый удобный мобильный линукс в плане работы конкретно функций телефона. После включения идите в настройки и запускайте шифрование диска - система перенесется в новый зашифрованный раздел. https://blossom.primal.net/4fb6eda527c7329a5eb5720873aa2bf32fc83ab73339c15caf9bc0aae0886776.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy затем устанавливаем свой вариант overlayroot в initramfs для работы в RAM и потере данных при перезагрузке из режима overlayroot: sudo tee /etc/initramfs-tools/scripts/init-bottom/overlayroot >/dev/null <<EOF #!/bin/sh # Overlayroot initramfs hook для Debian/Mobian case "$1" in prereqs) echo "" exit 0 ;; esac . /scripts/functions PATH=/usr/sbin:/usr/bin:/sbin:/bin MYTAG="overlayroot" # === НАСТРОЙКИ === root_rw=/media/root-rw root_ro=/media/root-ro NEWROOT="${rootmnt:-/root}" OVERLAYROOT_DEBUG=1 # === ЛОГИРОВАНИЕ === log() { "log_${1}_msg" "$MYTAG: $2" _debug "[$1]:" "$2" } log_fail() { log failure "$*"; } log_success() { log success "$*"; } log_warn() { log warning "$*"; } fail() { [ $# -eq 0 ] || log_fail "$@" exit 0 } _debug() { if [ "${DEBUG_BUSTED:-0}" = "0" ]; then { echo "$@" >> "/dev/.initramfs/${MYTAG}.log"; } 2>/dev/null || { DEBUG_BUSTED=1; logwarn "debug is busted"; } fi } debug() { _debug "$@" [ "${OVERLAYROOT_DEBUG:-0}" = "0" ] && return echo "$MYTAG:" "$@" } # === ПАРСИНГ КОМАНДНОЙ СТРОКИ ЯДРА === # Читаем /proc/cmdline и ищем параметры overlayroot* parse_cmdline() { local cmdline="" read cmdline < /proc/cmdline || return 1 OVERLAY_MODE="" OVERLAY_CHROOT=0 for tok in $cmdline; do case "$tok" in overlayroot=off) OVERLAY_MODE="disabled" ;; overlayroot=chroot) OVERLAY_CHROOT=1 ;; overlayroot=tmpfs) OVERLAY_MODE="tmpfs" ;; overlayroot=*) OVERLAY_MODE="${tok#overlayroot=}" ;; esac done } # === ПРОВЕРКА ФЛАГОВ В ОРИГИНАЛЬНОМ КОРНЕ === check_disable_flags() { # Проверяем флаг-файл в оригинальном корне (до overlay) if [ -f "$NEWROOT/.overlayroot-disable" ]; then log_success "found .overlayroot-disable flag, disabling overlay" rm -f "$NEWROOT/.overlayroot-disable" return 0 fi # Проверяем флаг-файл для одноразового chroot if [ -f "$NEWROOT/.overlayroot-chroot" ]; then log_success "found .overlayroot-chroot flag, enabling chroot mode" OVERLAY_CHROOT=1 rm -f "$NEWROOT/.overlayroot-chroot" return 1 fi return 1 } # === МОНТИРОВАНИЕ TMPFS ДЛЯ OVERLAY === mount_overlay_tmpfs() { local size="${1:-50%}" mkdir -p "$root_rw" || fail "failed to create $root_rw" mount -t tmpfs -o mode=0755,size=80% tmpfs-root "$root_rw" || fail "failed to mount tmpfs on $root_rw" mkdir -p "$root_rw/overlay" "$root_rw/work" || fail "failed to create overlay dirs on tmpfs" } # === МОНТИРОВАНИЕ ОРИГИНАЛЬНОГО КОРНЯ === mount_original_root() { mkdir -p "$root_ro" || fail "failed to create $root_ro" # Если корень уже примонтирован в NEWROOT — биндим его if [ -d "$NEWROOT/bin" ]; then mount --bind "$NEWROOT" "$root_ro" || fail "failed to bind $NEWROOT to $root_ro" else fail "$NEWROOT is not mounted" fi } # === МОНТИРОВАНИЕ OVERLAY === mount_overlay() { local lowerdir="$1" local upperdir="$2" local workdir="$3" local target="$4" mkdir -p "$target" || fail "failed to create $target" # Проверяем версию ядра для workdir local mount_opts="lowerdir=$lowerdir,upperdir=$upperdir" case "$(uname -r)" in 2*|3.1[01234567]*|3.[0-9].*) # Старые ядра не требуют workdir ;; *) mount_opts="$mount_opts,workdir=$workdir" ;; esac mount -t overlay -o "$mount_opts" overlayroot "$target" || fail "failed to mount overlay on $target" } # === ПЕРЕМЕЩЕНИЕ MOUNTPOINT'ОВ === move_mounts() { local source="$1" local dest="$2" # Переносим все дочерние mountpoint'ы (кроме самого source) local mounts="" mounts=$(awk -v mnt="$source" '$2 ~ "^"mnt && $2 != mnt {print $2}' /proc/mounts | sort) for mp in $mounts; do local rel="${mp#$source}" [ -z "$rel" ] && continue mkdir -p "$dest$rel" || log_warn "failed to create $dest$rel" mount --move "$mp" "$dest$rel" || log_warn "failed to move $mp to $dest$rel" done } # === ОБНОВЛЕНИЕ FSTAB === update_fstab() { local root_ro="$1" local root_rw="$2" [ -f "${NEWROOT}/etc/fstab" ] || return 0 # Сохраняем оригинальный fstab cp "${NEWROOT}/etc/fstab" "${NEWROOT}/etc/fstab.orig" 2>/dev/null || true cat <<EOF >"${NEWROOT}/etc/fstab" # This fstab is in an overlayfs. # The real one can be found at ${root_ro}/etc/fstab # To permanently modify files, chroot into writable view: # sudo mount -o remount,rw ${root_ro} # sudo chroot ${root_ro} # EOF # Копируем оригинальные записи с изменёнными путями while read spec file vfstype opts pass freq; do # Пропускаем комментарии и пустые строки case "$spec" in \#*|""|swap) continue ;; esac # Корневую ФС заменяем на overlay if [ "$file" = "/" ]; then echo "overlayroot / overlay defaults 0 0" echo "${root_ro} ${root_ro} none bind,ro 0 0" echo "${root_rw} ${root_rw} none bind,rw 0 0" continue fi # Виртуальные ФС пропускаем case "$vfstype" in proc|sys|tmpfs|devtmpfs|devpts|overlay) continue ;; esac # Остальные монтируем в ro-слой echo "$spec ${root_ro}${file} $vfstype ro,$opts $pass $freq" done < "${NEWROOT}/etc/fstab.orig" >> "${NEWROOT}/etc/fstab" } # === СОЗДАНИЕ ТОЧЕК ДОСТУПА /live/* === create_live_access() { local root_ro="$1" local root_rw="$2" # Создаём /live/image (доступ к оригинальному ro корню) mkdir -p "${NEWROOT}/live/image" || log_warn "failed to create /live/image" mount --bind "$root_ro" "${NEWROOT}/live/image" || log_warn "failed to bind $root_ro to /live/image" # Создаём /live/cow (доступ к rw слою) mkdir -p "${NEWROOT}/live/cow" || log_warn "failed to create /live/cow" mount --bind "$root_rw" "${NEWROOT}/live/cow" || log_warn "failed to bind $root_rw to /live/cow" } # === ОСНОВНАЯ ЛОГИКА === # 1. Парсим командную строку ядра parse_cmdline # 2. Проверяем флаги отключения check_disable_flags if [ $? -eq 0 ]; then OVERLAY_MODE="disabled" fi # 3. Если overlay отключён — выходим case "${OVERLAY_MODE:-enabled}" in disabled|off|no) log_success "overlayroot disabled, booting normal root" exit 0 ;; esac # 4. Проверяем что корень смонтирован if [ ! -d "$NEWROOT/bin" ]; then log_fail "$NEWROOT is not mounted" exit 0 fi # 5. Создаём временные директории в RAM mkdir -p /run/overlay mount -t tmpfs -o mode=0755,size=100% tmpfs /run/overlay || fail "failed to mount tmpfs on /run/overlay" # 6. Монтируем оригинальный корень в ro-слой mount_original_root # 7. Монтируем tmpfs для rw-слоя mount_overlay_tmpfs # 8. Если запрошен chroot-режим — монтируем overlay отдельно if [ "$OVERLAY_CHROOT" = "1" ]; then log_warn "chroot mode requested, overlay will be available at /overlay" # Монтируем overlay в /overlay внутри нового корня mkdir -p "${NEWROOT}/overlay" mount_overlay "$root_ro" "$root_rw/overlay" "$root_rw/work" "${NEWROOT}/overlay" # Создаём точки доступа create_live_access "$root_ro" "$root_rw" # Переносим дочерние mountpoint'ы move_mounts "$NEWROOT" "${NEWROOT}/overlay" # Обновляем fstab update_fstab "$root_ro" "$root_rw" log_success "chroot overlay configured at /overlay" exit 0 fi # 9. Обычный режим: перемещаем корень в ro-слой, монтируем overlay на его место # Перемещаем оригинальный корень mount --move "$NEWROOT" "$root_ro" || fail "failed to move $NEWROOT to $root_ro" # Монтируем overlay на место оригинального корня mount_overlay "$root_ro" "$root_rw/overlay" "$root_rw/work" "$NEWROOT" # 10. Переносим mountpoint'ы внутрь overlay move_mounts "$root_ro" "$NEWROOT" # 11. Перемещаем ro и rw слои внутрь overlay (чтобы были доступны из системы) mkdir -p "${NEWROOT}${root_ro}" "${NEWROOT}${root_rw}" mount --move "$root_ro" "${NEWROOT}${root_ro}" || log_warn "failed to move $root_ro into overlay" mount --move "$root_rw" "${NEWROOT}${root_rw}" || log_warn "failed to move $root_rw into overlay" # 12. Создаём точки доступа /live/* create_live_access "${NEWROOT}${root_ro}" "${NEWROOT}${root_rw}" # 13. Обновляем fstab update_fstab "$root_ro" "$root_rw" # 14. Если ядро просило ro — перемонтируем read cmdline < /proc/cmdline case " $cmdline " in *\ ro\ *) mount -o remount,ro "$NEWROOT" || log_warn "failed to remount overlay read-only" ;; esac log_success "overlayroot configured with /live/image and /live/cow access" exit 0 EOF sudo chmod 755 /etc/initramfs-tools/scripts/init-bottom/overlayroot echo "overlay" | sudo tee -a /etc/initramfs-tools/modules sudo update-initramfs -u -k all sudo dpkg-reconfigure linux-image-$(uname -r) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy После запуска системы запускаем обновления. Затем отправляем весь трафик через Tor, запустив этот скрипт (оставляем только дырку для Waydroid, в который для торификации установите Invizible Pro и в настройках VPN включите блокировку трафика при отключении приложения): #!/bin/bash set -e TOR_UID=108 # Step 1: Install Tor echo "[*] Installing Tor..." sudo apt update sudo apt install -y tor # Step 2: Configure Tor echo "[*] Configuring Tor..." sudo tee /etc/tor/torrc >/dev/null <<'EOF' TransPort 127.0.0.1:9040 DNSPort 127.0.0.1:9053 AutomapHostsOnResolve 1 VirtualAddrNetworkIPv4 10.192.0.0/10 EOF # Step 3: Restart and enable Tor echo "[*] Restarting and enabling Tor service..." sudo systemctl restart tor sudo systemctl enable tor # Step 4: Verify Tor is listening echo "[*] Checking Tor listening ports..." sudo ss -tulpn | grep tor # Step 5: Configure nftables echo "[*] Writing nftables configuration..." sudo tee /etc/nftables.conf >/dev/null <<EOF #!/usr/sbin/nft -f flush ruleset define uid = ${TOR_UID} define waydroid_net = 192.168.240.0/24 define unrouteables = { 127.0.0.0/8, 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 0.0.0.0/8, 100.64.0.0/10, 169.254.0.0/16, 192.0.0.0/24, 192.0.2.0/24, 192.88.99.0/24, 198.18.0.0/15, 198.51.100.0/24, 203.0.113.0/24, 224.0.0.0/4, 240.0.0.0/4 } table ip nat { set unrouteables { type ipv4_addr flags interval elements = \$unrouteables } chain prerouting { type nat hook prerouting priority dstnat; policy accept; } chain postrouting { type nat hook postrouting priority srcnat; policy accept; oifname != "waydroid0" ip saddr \$waydroid_net counter masquerade } chain output { type nat hook output priority dstnat; policy accept; ct state established,related accept ip daddr \$waydroid_net return ip saddr \$waydroid_net return meta l4proto tcp ip daddr 10.192.0.0/10 redirect to :9040 ip daddr 127.0.0.1 udp dport 53 redirect to :9053 meta skuid \$uid return oifname "lo" return ip daddr @unrouteables return meta l4proto tcp redirect to :9040 } } table ip filter { set unrouteables { type ipv4_addr flags interval elements = \$unrouteables } chain input { type filter hook input priority filter; policy drop; ct state established,related accept iifname "lo" accept iifname "waydroid0" udp dport { 53, 67 } accept iifname "waydroid0" tcp dport { 53, 67 } accept counter log prefix "TOR-INPUT-DROP: " drop } chain forward { type filter hook forward priority filter; policy drop; ct state established,related accept iifname "waydroid0" oifname != "waydroid0" accept iifname != "waydroid0" oifname "waydroid0" ct state established,related accept } chain output { type filter hook output priority filter; policy drop; ct state established,related accept oifname "lo" accept ip daddr \$waydroid_net accept oifname "waydroid0" accept meta skuid \$uid accept ip daddr @unrouteables accept meta l4proto tcp accept udp dport 53 accept counter log prefix "TOR-KILLSWITCH: " drop } } EOF # Step 6: Validate and apply nftables echo "[*] Validating nftables configuration..." sudo nft -c -f /etc/nftables.conf echo "[*] Applying nftables rules..." sudo nft -f /etc/nftables.conf # Step 7: Enable and start nftables echo "[*] Enabling nftables service..." sudo systemctl enable nftables sudo systemctl start nftables # Step 8: Show active ruleset echo "[*] Current nftables ruleset:" sudo nft list ruleset # Step 9: Verify Tor connectivity echo "[*] Checking Tor connectivity..." curl -s https://check.torproject.org | grep -i "congratulations\|sorry" npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Tails на телефоне. Создаем зашифрованную мобильную ОС, которая будет терять все данные после перезагрузки. Сначала устанавливаем Mobian - дебиан для телефонов (проще всего на старый pixel 3a, который можно купить за 3 копейки). Для полнодискового шифрования нужно собрать ОС. устанавливаем зависимости и клонируем репозиторий sudo apt install debos bmap-tools xz-utils android-sdk-libsparse-utils yq mkbootimg cryptsetup git clone https://salsa.debian.org/Mobian-team/mobian-recipes.git -b mobian-trixie cd mobian-recipes и запускаем сборку указав свой пароль от диска (sdm670 - это для pixel) ./build.sh -t sdm670 -c -R <password> после сборки ставим образ в телефон sudo apt install adb fastboot google-android-platform-tools-installer включаем режим разработчика: Настройки → Система → Об устройстве → 7 раз нажми "Номер сборки" включаем OEM-разблокировку: Настройки → Система → Параметры разработчика → "Разблокировка OEM" перезагружаем в fastboot: power + volume down при выключенном устройстве. затем вводим эти команды fastboot flashing unlock fastboot flash boot mobian-*-phosh-*.boot-sargo.img #название созданного boot-sargo.img fastboot -S 100M flash userdata mobian-*-phosh-*.rootfs.img #название созданного rootfs.img fastboot erase dtbo fastboot oem uart enable fastboot reboot и вводим пароль шифрования при запуске системы. дефолтный пинкод будет 1234. система установлена, продолжение ниже. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy chainflip.io добавил поддержку сети tron и теперь это точно лучший кроссчейн-обменник для децентрализованной покупки чистого нативного биткоина на стейблкоины из сетей ethereum, solana, tron без kyc. chainflip имеет встроенный aml и хакерские битки там не пройдут. chainflip прошел кучу аудитов и имеет лучшие оценки безопасности для кроссчейнов с нативным битком на hindenrank. и там нет mev-атак при свопах ethereum. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy RuStore это не магазин, а пегасус с арсеналом шпионажа за телефоном похлеще гуглов. https://habr.com/ru/articles/1046710/ А это РуСтор "здорового человека" (хотя, сейчас все рус приложения - пегасусы: от яндексов до авито и сбера). https://codeberg.org/mi6e4ka/openstore npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy самый удобный открытокодный антидетект браузер из всех, что пока попадались. если говорить об удобстве и простоте. https://github.com/ProxyShard/ShardBrowser npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I can't see notes from private contacts, notes from relay-bridges (ditto.pub mostr.pub and nostr.data.haus). these problems didn't exist in the old versions 1.06 > App has improved a lot functionally, but now it is impossible to use it to read and search for notes - many notes have disappeared npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Zapstore - мой любимый магазин приложений. Заслужил грант. #note15a3…cjrl npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Скиньте дырову, когда он снова будет постить всякую хуйню про ультра-приватность в телеге. Аудит подъехал. Telegram's MTProto: Assessing Deanonymization Potential for a Network Attacker. Dr. Nadim Kobeissi Symbolic Software https://static.istories.media/uploaded/documents/d92f02fe94f64906887d290489e26d14.pdf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub142g…xrj0 also I don't see notes from relay.data.haus (rss). it works well in 0xchat and worked in the last version of Amethyst npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub142g…xrj0 @npub1gcx…nj5z I don't see notes from my private contacts in my feed, don't see notes from mastodon accounts with ditto-mostr relay, don't see some of my notes and some of my subscribers after the latest updates. check it please. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy я думаю, сейчас постепенно все клиенты ностр будут переходить к золотому стандарту: поддержка звонков, мармот е2ее чатов с прямой секретностью, тор/прокси, приватных подписок, шифрования локальной базы данных + всякие штуки из телеги: анимированные стикеры и тд. этот год будет поворотным в крутых обновлениях, будут закрыты последние баги, и ностр станет фантастической мега удобной соцсетью с высоченным уровнем приватности, децентрализации и свободы. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy бомба! аметист становится действительно топовым клиентом nostr. приватность, анонимность и куча крутых функций. #note1kxu…8cy8 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Amethyst, Wisp and 0xchat npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Nospeak added support for audio and video calls! very cool secure nostr messenger. @npub174t…mqm6 thanks! what's next? notes? marmot chats? Nospeak теперь один из лучших и стабильно работающих мессенджеров #nostr https://github.com/psic4t/nospeak npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Выявление слежки в 30 популярных российских приложениях https://rks.global/files/research/russian_apps_search_for_vpn_ru.pdf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Delta Chat может работать в белых списках. Вот что для этого нужно: Подготовка «транспорта»: Не используйте свой личный ящик, иначе Delta Chat смешает ваши почтовые письма с чатами. Зарегистрируйте новый чистый аккаунт, например, на яндекс почте или на вк почте. Разрешение доступа (Критический шаг): Современные почтовые сервисы запрещают подключение по IMAP с основным паролем от аккаунта в целях безопасности. Вам нужно создать Пароль приложения. В Яндексе: Зайдите в аккаунт -> Безопасность -> Пароли приложений. Создайте новый пароль (выберите тип “Почта”). Скопируйте сгенерированный 16-значный код. Убедитесь, что в настройках почтового ящика (Почтовые программы) включен доступ по IMAP. В VK Почте: Перейдите в настройки безопасности аккаунта VK ID -> Безопасность и вход -> Пароли для внешних приложений. Сгенерируйте пароль. Установка и первый запуск: Скачайте клиент Delta Chat. Приложения доступны для Android, iOS, Windows, macOS и Linux. При запуске выберите «Войти в свой аккаунт». Запустите приложение и выберите "Использовать электронную почту как релей". Введите ваш созданный e-mail и вставьте пароль приложения. Приложение автоматически подтянет настройки серверов Яндекса или VK. Крутая настройка для усиления приватности перед почтовым провайдером: Зайдите в Настройки Delta Chat -> Продвинутые настройки. Опционально можно включить скрытие заголовков Message-ID и Chat-Version, чтобы ваши письма даже для почтовых алгоритмов Яндекса выглядели максимально стандартно, без следов автоматизации мессенджером. В Delta Chat через ботов можно читать крупные публичные телеграм каналы и rss-ленты. В итоге, получится телеграм на минималках, но зато с шифрованием. Список публичных ботов Delta Chat: https://deltachat-bot.github.io/public-bots/#/home npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub180c…h6w6 Hello. Are Nostr messages using NIP-17, NIP-EE, or Marmot protected against extraction from the device or forensic analysis (including deleted messages)? Can intelligence agencies and police recover data after the application has been uninstalled? npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1wht…r3ec @npub1h0u…rwx8 White Noise and Keychat not compatible now? (different encryption protocols?) #nostr #signal #mls npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub1gcx…nj5z add ntfy support for notifications. amethyst has no notification in graphene os npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Nostr Mail должен позволить болтать с юзерами из Delta Chat. #note1dya…hvkc npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy #nostr https://dweb.link/ipfs/Qmc2RYRDsmzTbadvALNMZxRRjMGXuBzL65wDgQBLVDnhM7?filename=17756314221504841775631399613.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Telegram can be even worse than WhatsApp. The app sends unencrypted traffic - this traffic can leak your metadata and even geolocation to local police. WhatsApp doesn't have such traffic. https://rys.io/en/179.html https://www.whonix.org/wiki/Telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy dont use telegram. chats not encrypted, secret chats have backdoors, metadata not encrypted. telegram shares user data with police npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat.com #nostr #meme #memes https://dweb.link/ipfs/QmcCuap3BRdFy6JbhvJpPCfxuMRJbXiqi3NRfjcgQDGzCN?filename=1775467057500353IMG_20260406_091311.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy тут не каналы, а просто аккаунты, публикующие новости и прочий контент. искать можно в контактах сверху в поиске. включи реле, указанные в моем описании, чтоб видеть максимум контента (можешь включить даже вообще все реле среди предлагаемого списка в настройках. для поиска по постам используй поиск "moments" в тех же контактах. то есть, в самом 0xchat весь поиск всего и вся в разделе контакты. дополнительно можно использовать поиск в других приложениях ностр в napps - там самый крутой поиск в jumble, также можно искать в yakihonne. napps - это просто набор других приложений ностр, для удобства. чтобы тут на кого-то подписаться - добавляй его в контакты, в 0х автор аккаунта не увидит, что ты на него подписался. с друзьями обменивайся публичными ключами, приватный ключ никому не показывай и не теряй, иначе потеряешь аккаунт npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Keep away from telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I am Russian. You will laugh, but in Russia users idolize Telegram, they protect Telegram, and now they are trying to bypass the blocking of Telegram. Very very few users use Bitchat. 99.9% don't know about Nostr. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вместо кучи поддержки, как это было в 18м году, павел дыров получил очередной мощный критический разбор. уже от крупного админа телеги и ютубе с почти лямом подписчиков. почти по всем пунктам не поспоришь. за последние лет 6 дыров угробил репутацию и наконец-то многие стали просыпаться и понимать, что это всегда был небезопасный мессенджер без шифрования, а еще с кучей скама со стороны самого дырова https://www.youtube.com/watch?v=TGeyXjWgsZk npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy still high memory consumption. I ran noornote (deb) in debian-vm (qubes os) with 4 gb memory. then I looked my feed of posts for the last 4 hours - it used all 4 gb of memory. for comparison, 0xchat desktop (appimage) consumes 1.1 gb of memory when viewing a feed. by the way, I asked 0xchat dev add noornote web to 0xchat napps (0xchat nostr web apps) in the next release. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy by the way, I follow you on 0xchat, so you don’t see me in the followers) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I liked 0xchat and keychat better. these apps have many other web nostr apps (napps). it is very convenient when you have many nostr apps in one client. keychat also has nip-ee, like whitenoise. 0xchat has private subscriptions by default - no one sees which accounts you follow. I would like whitenoise to take the experience of these apps: you have an encrypted chat with friends, but also interact with other nostr users in web clients. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вот новую версию глянь. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub175n…g6w0 hello! Your linux desktop app very nice, but consumes a lot of memory. Reduce memory usage by half. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy p2p calls? npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy plans to add calls? npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy В Telegram обнаружили уязвимость нулевого дня, которая получила оценку 9,8 балла из 10 по шкале CVSS, что потенциально относит её к наивысшей категории опасности https://kod.ru/uyazvimost-zero-day-telegram npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy я всё жду, когда нато начнёт пиарить ностр в снг. видать, это будет на следующем этапе информационной войны. но когда же он наступит... когда тут появятся нормальные рус мемы, а то натовские мой разум принять и понять не может.. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Тут хочется вспомнить "этот народ не победить")) Это топ скачиваемых прилодений в рф! И я даже офигеваю не столько от того, что лохов развели классическим фишингом (telega). Откуда они берут эти ноунэйм впны??! Когда есть Amnezia VPN и рекомендации о ней заполонили не только ютуб, но даже вк, простолюдины массово качают какой-то неизвестный скам - у этой хрени скачиваний во много раз больше, чем у амнезии! Огонь впн 😂😂 В общем, фишинг телеги и фишинг впна - вот что нужно для счастья миллионам простолюдинов в рф) Уровень цифровой грамотности просто зашкаливает: одни молятся на дурова и его дырявый мессенджер, читающий всю переписку на серваках и сливающий метаданные вообще всем подряд, а другим дай фишинговые приложения и они будут прыгать от счастья, сливая фсбшникам каждый свой шаг в интернете и каждое написанное слово. #russia https://24242.io/6a5595e94dac29ab8711d5e490c43f87ac39c2c27b11a028424f7c117a2c0026.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy For what? Maybe it would be better to encrypt metadata? In my opinion, it is a big minus for privacy. And it is better to use 0xchat and Amethyst for communication. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Звучит, как троллинг. UI/UX у Simplex действительно пока плох, но уж кто бы говорил - Delta chat напоминает мессенджер 15 летней давности)) Simplex децентрализован и на личном сервере легко обойти блокировку, а по дефолту для обычных юзеров они рекомендуют впн - отличное решение (с AmneziaVPN). Или лучше обходить блокировки через биг-тех почты или вообще через яндекс-почту, выкладывая на блюде вообще все метаданные?)) Трафик у Simplex не гигантский даже близко - тоже уж кто бы говорил, сидя на email. Ну а по крипте: то есть, анонимно оплачивать серваки для расширенных функций - это прям плохо, а, опять таки, прыгать по email'ам это великолепие? особенно, если надо передать гигантские файлы без палева?) #note1egd…6c2l npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy cool! add x and open telegram channels. and ditto will be downloaded by millions of users) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Полный разбор приложения Telega - якобы телеграма, работающего без впн. «Технический анализ MITM‑атаки в клиенте Telega» https://dontusetelega.lol/analysis В статье показано, что создатели приложения Telega активировали скрытую функцию, которая позволяет перехватывать все данные между приложением и сервером Telegram. Данные проходят через серверы самой Telega, связанные с Vk. Идиоты, использующие эту хрень, вываливают фсбшникам абсолютно всё, подставляя и всех своих собеседников из обычной телеги. #telegram #telega npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy ностр-впн заказывали? #note1sgt…3d24 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Qubes OS for beginners. The best secure and privacy OS. The safest option for Windows (Windows template + Windows appVMs). The best for many VPNs. And the best for Nostr 😎 #nostr #qubes #linux #secure #privacy https://dweb.link/ipfs/QmSQ5kzUGm8DdkXMUyh4HMx9gvHskvyMtb38ge5Tu1ne3K?filename=1774258528723808IMG_20260323_091312.jpg https://dweb.link/ipfs/QmUHtfMHU91Px34ajmSf2N4679VstMcN8YdtugHLZPVogo?filename=1774258530962294IMG_20260323_091312_1.jpg https://dweb.link/ipfs/Qmcd7RZpiyETZ1fKgQnYFFMPNgfDdQXHeACGbSSAAQ2D4z?filename=1774258532588958IMG_20260323_091313.jpg https://dweb.link/ipfs/QmRxeuSsAhfLqkVp2CDEowJsGMCH9QDSmeL1kQk868Hw9g?filename=1774258533304292IMG_20260323_091313_2.jpg https://dweb.link/ipfs/QmaKytZ8gLYUgDVWmNhfMggju3TgwEqv12DcKv4G7ENrXv?filename=1774258534124623IMG_20260323_091313_3.jpg https://dweb.link/ipfs/QmaRpoLUMiM6PCZGwXN4zMwgwpBkQaKe834QHB3KzPbCt7?filename=1774258534661894IMG_20260323_091313_4.jpg https://dweb.link/ipfs/QmWmFLqsxtCPhU3UUj3hPqrRvz9fTvQG4wJfC1fWuwhmRZ?filename=1774258535154482IMG_20260323_091313_5.jpg https://dweb.link/ipfs/QmbJfT8x45NZ6QUhfymbgen2UfQAVE1FDcwF49ZpYp8WMA?filename=1774258535763309IMG_20260323_091313_6.jpg https://dweb.link/ipfs/Qmcn4iRNjevqMvcAxKzNwf2ZhvFysTPFX2TRn5VcseHdzv?filename=1774258536681629IMG_20260323_091313_7.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat: 1 app = 30 Nostr clients.. and 1000 websites 😎 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy How to create Linux distributions for gaming and video graphics work, and how to create an infinite number of ultra-secure Windows 11 instances in Qubes OS. Kак создать линуксы для игр и работы с видеографикой, и как создать бесконечное количество ультра защищенных виндовсов 11 в Qubes OS. Винда сможет перекидывать в линуксы файлы и буфер обмена по защищенному каналу. #security #privacy #linux #windows #qubes #games https://forum.qubes-os.org/t/running-linux-appvms-with-a-full-desktop-environment-and-complete-graphics-support-hvm-and-vnc-in-qubes-4-3/40082 https://doc.qubes-os.org/en/latest/user/templates/windows/qubes-windows.html https://doc.qubes-os.org/en/latest/user/templates/windows/qubes-windows-tools.html npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Hardening AmneziaWG. Упрощенная установка и усиленные настройки. Для новичков, желающий свой сэлф-хост впн с крутыми настройками. В описании есть рекомендуемый VPS всего за 25$ в год https://github.com/bivlked/amneziawg-installer npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy это говно скачали уже больше 5 лямов даунов, хотя инет напичкан обзорами и предупреждениями об этой шпионской фигне. реальная то телега читает все сообщения, а эта еще и передает их на серваки ok и vk, поэтому дауны палят все чаты и подставляют собеседников. если вдруг юзаете обычную телегу, то всегда спрашивайте что за приложение установлено у собеседника. #telegram #telega #note1ata…c2xf npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy awesome bridge #note1wvj…6ywt npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy на меня устроили спам-атаку армией ботов, пишущих в лс) они не знают, что для 0xchat это вообще не проблема - все незнакомцы отсеяны в отдельный чат и вообще не мешают обычному общению) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy MediaTek Flaw Exposes Data on Millions of Android Phones! Ledger researchers expose Android flaw enabling wallet seed theft in seconds! Pixel и будущая Motorola - лучший выбор для безопасности мобил, если не хотите, чтобы вашу крипту и пароли украли за 45 секунд https://www.findarticles.com/mediatek-flaw-exposes-data-on-millions-of-android-phones/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Zero SPOF file transfer over Nostr. End-to-end encrypted, decentralized, and private. #nostr Features: 🔒 End-to-End Encrypted - AES-GCM encryption, keys never leave the client 🌐 Zero SPOF - Decentralized storage across multiple Blossom servers 📦 NIP-17 Compliant - Standard file metadata format Безопасно отправляйте файлы в ностр! https://github.com/nogringo/file-transfer npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Fully Ephemeral Encryption for appVMs in Qubes OS! Fantastic privacy and secure! https://forum.qubes-os.org/t/qubes-os-live-mode-dom0-in-ram-non-persistent-boot-ram-wipe-protection-against-forensics-tails-mode-hardening-dom0-root-read-only-paranoid-security-ephemeral-encryption/38868 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy вокруг скама max битва в самом разгаре. https://habr.com/ru/news/1008242/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy "secret chats of 0xchat" если говорить языком телеги. но действительно секретные, а не телеграмовское дерьмо. и точно лучше илон_масковской х-фигни #note15vn…5p0k npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy The intelligence of my region have powerful tools for forensics. They can extract dm (old removed dm) and passwords from almost any phone. Only graphene is protected from it. and I immediately liked that 0xchat has anonymous default subscriptions - it gives a fantastic level of privacy on the nostr social network. I also like 0xchat's message and metadata encryption. Many nostr clients, such as primal, do not have these features. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy 0xchat is the most functional and convenient messenger for me: anonymous subscriptions, encrypted messages, convenient feed, many napps, browser (you can use other web applications: telegram, instagram, x...), voice messages, calls, cool desktop for Linux. 0xchat is the best messenger and the best nostr client for me. 0xchat works quickly on my phone (GrapheneOS on pixel). npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy I use 0xchat daily, but sometimes I use napps for better search or other cool features npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy @npub16x7…a44x hello! @npub1tm9…xn72 added nostria.app to napps list! Nostria is a cool web app! #nostr #nostria #0xchat #napps https://image.nostr.build/cc05fb7ea11cf094e8ee7fa38b4bc27dcc16e229b2b12f09a108dc63a28bc5c2.jpg https://image.nostr.build/291f1e15727acb012e27e528b6733f7a6e4929056d3bd85623fc48c3569d1b8a.jpg npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy статья про максус-пегасус https://habr.com/ru/articles/1006666/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Hello Moto #note1fd3…jvad npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy спроси про них у онлайн вэб моделей) (не путать с вэбкамщицами) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy не только ии нынче в тренде. #linux https://www.phoronix.com/news/Intel-Linux-Jobs-February-2026 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy оффлайн ии-чаты с различными моделями с открытым кодом для андроид. общаются, переводят, генерируют картинки, кодят. #ai https://github.com/alichherawalla/off-grid-mobile npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy в общем, лучше юзать линукс + графен на мобиле) там всего в избытке) npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy скоро огрызок оставит россиянам только госуслуги и макс 🍏🐛 #note14vj…ef9h npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Fantastic guide for paranoid secure and privacy. The coolest protection I've seen #secure #privacy #paranoid https://forum.qubes-os.org/t/qubes-os-live-mode-dom0-in-ram-non-persistent-boot-ram-wipe-protection-against-forensics-tails-mode-hardening-dom0-paranoid-security/38868 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy Как без kyc / aml купить биткоин на лежащие в сети эфира/evm USDT/USDC, сохранившиеся после неудачных попыток дождаться альтсезоны. Многие любители evm-сетей привыкли к децентрализованной торговле, что очень хорошо, потому что Cex'ы палят ваши данные + могут заблочить аккаунт, как было со мной. Но в dex обычно только "завернутые" битки, которые вы не "развернете" в реальный биток без адовой верификации (WBTC, cbBTC) + такие завертыши еще и могут быть заблочены прям на вашем кошельке (централизация, как у тезера/серкла). Thorchain тут рассматривать не будем, т.к. после хака bybit этот ресурс стал очень грязным. После него у вас могут возникнуть серьезные проблемы при обнале в будущем. Самыми безопасными вариантами на сегодня будут tBTC и Chainflip. tBTC - это токен в сети эфира, обеспеченный 1 к 1 реальным битком с помощью децентрализованной технологии Threshold, прошедшей множество мощных аудитов. С ним алгорит простой: 1. Покупаете tBTC на любимой swapалке, типо cowswap или 1inch 2. Идете на сайт app.threshold.network и жмете Redeem, чтобы вывести реальный биток, сжигая токен tBTC. 3. Подключаете свой метамаск (или что там у вас), указываете адрес для получения реального битка и отправляете tBTC обратно в минт. Всё. Chainflip - это альтернатива thorchain, альтернатива даже более безопасная, т.к. под капотом больше децентрализации и защиты, а код также был проверен известными аудиторами. Главный разработчик имеет хороший опыт в криптобезопасности, т.к. это создатель известного анонимного мессенджера Session. Chainflip вообще не связан с evm, поэтому тут нет всяких сэндвич-атак. Тут всё проще некуда, как в привычной swapпалке: 1. Идете на сайт swap.chainflip.io 2. Выбираете свой стейбл, указываете адрес для получения битка и делаете swap. Преимущество tBTC в низких издержках, но зато 2 действия. Chainflip проще, но там комса заметно выше, но зато он работает еще и с сетью солана, а скоро там будет и трон. Оба сервиса уже не юные и эффективно показали себя за последние годы. Так что, покупайте биток на падении и богатейте - это вам не альтушки. npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy защита от cold-boot атаки в Qubes OS https://forum.qubes-os.org/t/ram-wipe-in-dom0-protection-against-cold-boot-attack-in-qubes/ npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy теперь это мой любимый магазин приложений #note1xy7…xpz7 npub1cv8cl9nfqtrkdn3k0nk05z8mjte6hxtdws6j4x65jxc06nk5tu2s4ulsnl linux_privacy https://whonix.org/wiki/Telegram https://rys.io/en/179.html https://threadreaderapp.com/thread/1789687898863792453.html