Защита паролем меняющихся обоев
Чтобы запретить кому-либо (кроме меня) изменять свой фон, как я могу заставить обои менять действие, требующее пароль?
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