Защита паролем меняющихся обоев

Чтобы запретить кому-либо (кроме меня) изменять свой фон, как я могу заставить обои менять действие, требующее пароль?

2 ответа

Решение

Это оказалось хорошим испытанием. Пытаться,

$ sudo mv /usr/bin/gsettings /usr/bin/gsettings2
$ sudo gedit /usr/bin/gsettings
$ sudo chmod +x /usr/bin/gsettings

Когда gedit подходит ко второй инструкции, добавьте:

#!/bin/bash
if [ "$1" == "set" ] && [ "$2" == "org.gnome.desktop.background" ] && [ "$3" == "picture-uri" ]; then
    a=$(zenity --entry="Password")
    h1=$(/bin/echo $a | /usr/bin/md5sum | /bin/cut -f1 -d" ")
    h2='a799d7cf3d9ca647f1320fc6bfaf7408' #Password hash
    if [ "$h1" == "$h2" ]; then
    gsettings2 set org.gnome.desktop.background picture-uri $4
    else
        zenity --notification --text="Wrong password. Come again another day"
    fi
else
    $(gsettings2 $@)
fi

Отменить,

$ sudo rm /usr/bin/gsettings
$ sudo mv /usr/bin/gsettings2 /usr/bin/gsettings

Вы можете перейти к этому генератору md5, поставить строку и заменить a799d7cf3d9ca647f1320fc6bfaf7408 с чем угодно. Попробуйте выяснить для себя, что это соответствует. Вы поймете, насколько это безопасно.

Даже если кто-то просматривает этот файл, без вашего пароля он не сможет его изменить (это похоже на то, как linux хранит ваши пароли:P).

Защита паролем меняющихся обоев

Сценарий ниже обеспечивает мягкую защиту паролем для смены обоев в "домашних" ситуациях. Мягкий, потому что пароль хранится внутри скрипта в виде простого текста. Тем не менее, это должно помешать обычным пользователям менять обои.

Что он делает, так это то, что когда пользователь меняет обои, он сразу же возвращается обратно, и у пользователя запрашивается пароль. Если пароль правильный, обои меняются на новые, в противном случае ничего не происходит.

введите описание изображения здесь

Чтобы минимизировать риск, сохраните сценарий в неожиданном месте под неожиданным именем и / или в виде скрытого файла.

Чтобы использовать это:

Скопируйте приведенный ниже скрипт в пустой файл, задайте пароль по вашему выбору в разделе заголовка (я не выбрал бы ваш пароль sudo по соображениям безопасности, так как он находится в виде обычного текста!) И сохраните его как name.py, запустите его командой:

python3 /path/to/name.py

Сценарий:

#!/usr/bin/env python3

import time
import subprocess

set_password = "monkey"

key = "org.gnome.desktop.background picture-uri "
read = "gsettings get "+key; change = "gsettings set "+key
set_wallpaper = subprocess.check_output(["/bin/bash", "-c", read]).decode("utf-8").strip()
pass_window ='zenity --entry --entry-text="Enter password" --text="Enter password" --title="password" --hide-text'

def check_wall():
    global set_wallpaper
    curr_wallpaper = subprocess.check_output(["/bin/bash", "-c", read]).decode("utf-8").strip()
    if curr_wallpaper != set_wallpaper:
        subprocess.Popen(["/bin/bash", "-c", change+set_wallpaper])
        try:
            entered_password = subprocess.check_output(
                ["/bin/bash", "-c", pass_window]).decode("utf-8").strip()
        except Exception:
            entered_password = None
        if entered_password == set_password:
            subprocess.Popen(["/bin/bash", "-c", change+curr_wallpaper])
            set_wallpaper = curr_wallpaper
    else:
        pass

while True:
    check_wall()
    time.sleep(3)

размещено на gist.gisthub

Другие вопросы по тегам