Як я можу обмежити чи обмежити доступ до програми?


18

Мій син минулого Різдва отримав новий ноутбук, в першу чергу для використання в його новій школі ... А тепер, коли у нього є власний ноутбук, він розставив встановити Steam.

Але дружина хоче, щоб я видалив Steam, тому що ноутбук - це насамперед для шкільного користування ... Я б краще не робив цього, якщо цього не потрібно.

Чи є спосіб я обмежити або іншим чином обмежити доступ до Steam? Можливо, пароль на самій Steam або встановлений час, протягом якого його можна запустити?

В ідеалі це має бути щось досить просте у використанні, оскільки моя робота часто тримає мене подалі від дому (і комп’ютерів, і телекомунікацій, і ...) на тривалий час, а дружині не так комфортно біля комп’ютерів, як я, простіше у використанні - набагато краще.

Напевно, є щось там, що може досягти цього завдання?


Ви можете використовувати захищений від дітей замок у вашому маршрутизаторі, щоб обмежити доступ пари, наприклад, 1 год на день. Steam використовує порти UDP 27000 - 27015 для клієнтського трафіку. Якщо ви обмежите ці порти в маршрутизаторі, ваш син не зможе увійти в пару.
Кев Інський

Найпростіше рішення - створити на своєму Ubuntu профіль користувача, на якому ви встановите Steam. Створіть пароль для нового профілю користувача, який використовуватиме ваш син.

@Begueradj Діти можуть бути розумними. А фізичний доступ до машини означає можливий кореневий доступ, а це означає, що ви можете обійти все, крім можливо шифрування. Вам потрібно буде зашифрувати домашній каталог цього користувача, щоб потім надійно захистити його.
Байт-командир

@Gregory Наскільки розумний ваш син з комп’ютерами? Вам потрібна стовідсоткова безпечна річ, чи достатньо, якщо доступ до Steam просто нетривіальний?
Байт командир

Відповіді:


2

Встановіть обмеження часу для процесу чи програми

За допомогою невеликого фонового сценарію ви можете встановити обмеження часу для процесу чи програми.
Поки ваш користувач не знає пароль адміністратора , його не можна легко перевершити.

Розчин нижче

Це такий невеликий фоновий сценарій. Він обмежує використання в день на певну кількість хвилин, встановлену в голові сценарію. Після встановлення (що не надто складно) це працює дуже легко, і ніяких додаткових дій після цього не потрібно.

Сценарій

#!/usr/bin/python3
import subprocess
import os
import sys
import time

#--- set the time limit below (minutes)
minutes = 1
#--- set the process name to limit below
app = "gedit"

uselog = "/opt/limit/uselog"
datefile = "/opt/limit/currdate"

def read(f):
    try:
        return int(open(f).read().strip())
    except FileNotFoundError:
        pass

currday1 = read(datefile)

while True:
    time.sleep(10)
    currday2 = int(time.strftime("%d"))

    # check if the day has changed, to reset the used quantum
    if currday1 != currday2:
        open(datefile, "wt").write(str(currday2))
        try:
            os.remove(uselog)  
        except FileNotFoundError:
            pass

    try:
        # if the pid of the targeted process exists, add a "tick" to the used quantum
        pid = subprocess.check_output(["pgrep", app]).decode("utf-8").strip()
        n = read(uselog)
        n = n + 1 if n != None else 0
        # when time exceeds the permitted amount, kill the process
        if n > minutes*6: 
            subprocess.Popen(["kill", pid])
        open(uselog, "wt").write(str(n))
    except subprocess.CalledProcessError:
        pass

    currday1 = currday2

Як користуватись

  1. На робочому столі (або деінде) створіть папку з назвою: limit
  2. Скопіюйте скрипт у порожній файл, збережіть його limit_use(без розширення) всередині папки та зробіть його виконуваним
  3. Відредагуйте в голові сценарію назву процесу для обмеження та максимальну кількість дозволених хвилин. У прикладі:

    #--- set the time limit below (minutes)
    minutes = 1
    #--- set the process name to limit below
    app = "gedit"
  4. Скопіюйте папку в каталог /opt:

    cp -r /path/to/limit /opt
  5. Тепер відредагуйте, /etc/rc.localщоб сценарій запускався як rootпри запуску:

    sudo -i gedit /etc/rc.local

    Незадовго до лінії

    exit 0

    інший рядок:

    /opt/limit/limit_use &

Це воно

Коли хтось намагається вбити фоновий сценарій:

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

(дія заборонена)

Пояснення; як це працює

  • Раз на 10 секунд сценарій виглядає, якщо працює цільовий процес. Якщо це так, це "додає" одну "крапку" до загального використання, що записується у файл ( /opt/limit/uselog). Якщо денний ліміт досягнуто, сценарій більше не дозволяє запускати процес, вбиваючи його, якщо він існує.
  • Після зміни дня (дата записується у файл, тому перезавантаження не допоможе) файл журналу видаляється, що дозволяє наробити новий час використання.
  • Оскільки сценарій працює під час завантаження , rc.localлише користувачі (користувачі) з привілеями sudo можуть зупинити сценарій, навіть тоді, лише якщо користувач знає ім'я процесу.

Зупиніть сценарій

Якщо ви хочете зупинити сценарій, скористайтеся командою:

sudo kill "$(pgrep limit_use)"

Але знову ж таки для цього вам знадобиться пароль судо.




EDIT

Хоча вищезазначений сценарій повинен забезпечувати досить безпечний спосіб обмеження використання програми, як згадував @Bytecommander, його можна перевершити, хоча і не дуже легко. Поєднання із наведеним нижче заходом зробить дуже малоймовірним, що це станеться, якщо тільки ваш син не знає налаштування, і він не має досвіду роботи з Linux / Ubuntu.

Додатковий захід

Трохи далі від "простого рішення", але все-таки не надто складно встановити - це додатковий захід нижче. Якщо наш підозрюваний делінквент дізнається, що скрипт викликається /etc/rc.local, вдасться увійти в корінь і видалить рядок /etc/rc.local, або зможе зупинити сценарій таким чином, ми можемо зіткнутися з ним із наступною проблемою: екран чорніє після Крім того, рішення перевіряє, чи працює фоновий скрипт через 5 хвилин після перезавантаження, вимикаючи його, якщо ні.

Додатковий захід - це перевірка запуску, якщо рядок /opt/limit/limit_use &присутній /etc/rc.local, і перевірка через 5 хвилин, якщо сценарій все ще працює. Оскільки сценарій працює від (прихованого від програм запуску програм) запуску в /etc/xdg/autostartньому буде досить складно з'ясувати, що відбувається, якщо ви не знаєте, як це робиться. Поєднання цих двох заходів робить малоймовірним, що ваш син дізнається, і якщо він це зробить, напевно, нічого не зупинить його.

Як налаштувати

Два простих кроки:

  1. Скопіюйте код нижче в порожній файл, збережіть його як blackout.desktopна робочому столі:

    [Desktop Entry]
    Name=not allowed
    Exec=/bin/bash -c "sleep 15 && /usr/local/bin/blackout.py"
    Type=Application
    Terminal=false
    NoDisplay=true

    Скопіюйте файл у /etc/xdg/autostart:

    sudo cp /path/to/blackout.desktop /etc/xdg/autostart
  2. Скопіюйте нижче скрипт у порожній файл, збережіть його як blackout.pyна робочому столі, зробіть його виконуваним та скопіюйте у /usr/local/bin:

    cp /path/to/blackout.py /usr/local/bin

    Сценарій

    #!/usr/bin/env python3
    import subprocess
    import time
    
    def dim_screen():
        screen = [
            l.split()[0] for l in subprocess.check_output(["xrandr"]).decode("utf-8").splitlines()\
            if " connected" in l
            ]
        for scr in screen:
            subprocess.Popen(["xrandr", "--output", scr, "--brightness", "0"])
    
    if not "/opt/limit/limit_use &" in open("/etc/rc.local").read():
        dim_screen()
    
    time.sleep(300)
    
    try:
        pid = subprocess.check_output(["pgrep", "limit_use"]).decode("utf-8").strip()
    except subprocess.CalledProcessError:
        dim_screen()

Пояснення

Запускники /etc/xdg/autostartзапустять додаток (у цьому випадку додаткова перевірка безпеки) для всіх користувачів. Це може бути перезаписано локально, але ви повинні знати пробіжки перевірки. Помістивши лінію NoDisplay=trueв наш пусковий апарат, вона не з’явиться локально Startup Applications, тому, не знаючи, що вона існує, вона навряд чи буде виявлена.

Крім того, у вашого сина є лише 15 секунд, щоб дізнатися (тоді екран затухає), щоб у нього виникли серйозні проблеми, якщо він не геніальний, має багато досвіду роботи з Ubuntu та творчим розумом.


Але якщо його син може увійти в систему за допомогою кореневого пароля, то чи не зможе він редагувати rc.local?
Рафаель

1
@Raphael, тому я згадав , поки користувач не є адміністратором . Але якщо він є, практично нічого не завадить йому перевершити зрештою, якщо він досить розумний.
Яків Влійм

Ikr, якщо він добре розбирається в Linux або якщо він знає, як ефективно використовувати Google, з часом жоден з відповідей не буде працювати.
Рафаель

1
@ByteCommander правда, звичайно. Тим не менш, здається розумним баланс запитуваного простого рішення, обмежений час та розумний рівень безпеки, враховуючи зацікавленість, про яку йдеться (обмеження часу, проведених ігор).
Яків Влійм

1
@JacobVlijm Так, звичайно. Я просто вказую, що вони можуть таким чином утримати свою 8-річну дитину, але коли він стане підлітком з деякими технічними знаннями, вони повинні знати, що немає 100% -ної безпеки. (Не те, що я не хотів би дати підлітку якусь свободу)
Байт командир

4

З мого власного досвіду обмеження доступу до комп’ютерних ігор є одним із найскладніших завдань у навчанні наших дітей. Звичайно, ми хочемо, щоб вони користувалися комп’ютерами в основному для школи, але це сильно суперечить намірам малюка. Вони будуть ненавидіти нас за те, що надаємо їм обладнання, придатне лише для школи.

І звичайно, ми також хочемо, щоб вони навчилися розумно користуватися своїм комп’ютером, в тому числі як використовувати його не тільки для роботи, але і для дозвілля. Сюди входять ігри та перегляд відео.

На жаль, для Ubuntu майже недоступний доглянутий та працюючий батьківський контроль для обмеження обчислень дитини . Ще одне важливе питання полягає в тому, що як тільки вони розумні діти, всі заходи, які ми вживали, стають марними. Вони завжди знайдуть способи подолати наші обмеження, якщо вони справді розумні, без нас навіть зможуть помітити.

Будь-яке програмне забезпечення, що блокує або PAM-обмеження, що працює на комп'ютері малюка, буде лише тимчасовим і може рано чи пізно подолатись дуже легко. Тому ми вирішили дозволити захищеному паролем маршрутизатору виконати роботу, де фізичний доступ можна контролювати набагато простіше.

Тож, що ми робимо тут, щоб дещо обмежити ігри в даний момент, це поєднання всього наступного:

  • Поговоріть з ними, щоб навчити їх, як і коли користуватися комп’ютерами для дозвілля та коли використовувати їх для школи. Це постійно тривалий, досить втомлюючий процес, що веде до нескінченних дискусій та аргументів. Але це те, що ми відчуваємо - це єдине , що триватиме в довгостроковій перспективі.
  • Немає дозволів адміністратора на їхній рахунок. Це тимчасова річ. Ми знаємо, що вони sudoрано чи пізно зможуть увійти в групу. План полягає в тому, що вони просять у нас цього, а не робити це приховуванням.
  • Складіть договір на чітко визначений час обчислень. Вони повинні знати, для чого і як довго вони можуть використовувати свої машини. Їм потрібно навчитися розділяти цей час на школу та на дозвілля.
  • Жорстко блокуйте весь Інтернет у години сну .

Щоб полегшити виконання договору на використання комп’ютера як для дітей, так і для нас, ми встановили наступні обмеження:

  • Використовуйте захищений паролем маршрутизатор, який дозволяє обмежувати доступ до Інтернету на поєднанні апаратного забезпечення (MAC) та на основі розкладу. Поки вони не знають про підробку MAC, це буде працювати досить добре. Це також обмежить доступ через їх смартфони та планшети. Звичайно, це не спрацює, якщо у вашому районі була відкрита бездротова мережа.
  • Встановіть на комп’ютери малюка сервер SSH , щоб витягнути вилку, якщо вони загубилися за власними намірами. Це для надзвичайних випадків, ми раді, що нам не потрібно було багато.
  • Встановлено чорний список DNS (через роутер, а не комп’ютер!), Який повинен блокувати доступ до гіршого.

Блокування доступу до Інтернету ефективно відключить ігри, якщо для цієї гри потрібен доступ до Інтернету, наприклад, Steam , Minecraft або інші сервери ігор. Однак це не матиме ефекту для ігор, що працюють в режимі офлайн.


Ви маєте на увазі вимкнення, використовуючи sshабо просто закриваючи програму?
Рафаель

Залежить від ситуації ... SSH може це зробити все, відключити, вбити користувача, вбити додаток, відновити хаки, видалити користувачів із судорів, ... для SSH у нас є батьківський обліковий запис адміністратора на всіх скриньках малюка.
Таккат

Приємно, ви перший, хто має додатковий рівень безпеки, за винятком усіх локальних речей, які можна відновити, якщо вони стануть root (що неможливо запобігти, якщо вони мають фізичний доступ).
Командир байт

0

Цього можна досягти за допомогою скриптів оболонки.

Перший сценарій - це вбити, Steamяк тільки він запущений:

#!/bin/bash

while true
do
    pkill steam
    sleep 1
done

exit 0

Збережіть його як /path/to/anyname.shі додайте до списку запуску програм.

Що буде робити цей скрипт, це те, що він перевірятиме будь-який відкритий процес, названий steamщосекунди, і якщо він знайде, то він його вб'є.

Але вам потрібно рішення, де steamйого можна запустити в певний час, щоб ваш син міг грати в ігри протягом цього інтервалу. Для цього вам потрібно написати інший сценарій:

#!/bin/bash

    echo "pkill anyname.sh" | at 10:00

exit 0

Збережіть це як, /path/to/anyname2.shа також додайте це до списку запуску програм.

Цей сценарій знищить перший сценарій о 10:00. Отже, коли ваш син бігає Steamо 10:00. Він зможе зараз його відтворити.

Третій сценарій полягає в повторному запуску першого сценарію в інший момент часу, щоб він вбивався Steamчерез проміжок часу, і ваш син більше не зможе грати в ігри Steam.

#!/bin/bash

    echo "bash /path/to/anyname.sh" | at 12:00

exit 0

Збережіть його як /path/to/anyname3.shі додайте до списку запуску програм.

Не забудьте зберегти ці стежки, щоб ваш син не дізнався про це.


Чи не існує способу, за допомогою якого ми можемо зупинити його, а не вбивати його після кожного запуску?
Едвард Торвальдс

@edwardtorvalds - я не знаю жодного, тому я опублікував це рішення.
Рафаель

Я підтримую вашу відповідь, але ОП потребує ПРОСТОГО / ЛЕГКОГО, а не технічного методу TOO

Його просто і просто, потрібно лише скопіювати та вставити сценарії, зберегти ці файли та додати їх до запуску програм, а потім забути про це.
Рафаель

kill loop - найбрудніший, який я можу собі уявити.
Кролл

0

Чому б не використовувати новий обліковий запис користувача (через Налаштування системи ). Це єдиний метод в Linux для "дозволів".

  1. Новий користувач "SteamUser" не повинен знаходитись у судорах (лише обмежений обліковий запис).
  2. Потім створіть другий обліковий запис під назвою "SuperAdmin" і зробіть його рахунок sudoers (кореневий доступ). Але зберігайте його пароль лише при собі.
  3. Потім вийміть акаунт сина з судорів. ( sudoгрупа). Тоді цей обліковий запис не матиме кореневого доступу, він не зможе встановити чи видалити програмне забезпечення, змінити загальносистемні налаштування.
  4. Увійдіть до свого облікового запису "SuperAdmin" та змініть право власності на парові бінарні файли та папку для парових ігор, щоб запобігти їх запуску будь-ким, окрім "SteamUser". Сюди входить видалення читання + запису + виконання доступу від будь-кого, крім "SteamUser"

Кілька нотаток ..

  • Немає бажання залишати кореневий доступ з обліковим записом вашого сина, інакше контроль дозволів легко обійти за допомогою chown / chmod.
  • Інші пропозиції, засновані на фонових сценаріях, - це просто нестабільний безлад. Це означає, що вони не перспективні. Однак їх легко налаштувати, можливо.
  • Шляхи до папки для передачі в "SteamAccount" є: /home/son/.steamі, звичайно, бінарний файл/usr/games/steam
  • Для відтворення пари потрібен пароль "SteamUser" (вам потрібно буде увійти за допомогою "SteamUser", і вони запустять пар. Ви можете спробувати шукати методи, щоб закінчити сеанс через деякий час, заблокувавши його, щоб запобігти грати занадто довго. Я не впевнений, чи є такі інструменти, але технічно можливо встановити часові межі, але на сеанси, а не на програми.

Ах, я вірю, що знайшов свого прихильника ...
Яків Влійм

Це не дуже безпечно, тому що достатньо розумних дітей (можливість користуватися Google і дотримуватися покрокового керівництва вже достатньо) можна легко обійти обмеження користувачів, якщо вони мають фізичний доступ.
Командир байт

@ByteCommander, принаймні, це надійніше, ніж фонові сценарії. Але так, ти маєш рацію. Як і в Windows. Як і де завгодно.
Кролл

Без образи, але як це безпечніше?
Яків Влійм

І як ви хочете вказати обмеження часу, як довго дитина може користуватися Steam? А як щодо дозволених шкільних речей? Інший рахунок для цього? Я особисто ненавиджу системи із занадто великою кількістю облікових записів на людину, тому що їх боляче використовувати через не спільні налаштування тощо.
Byte Commander
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.