Как запретить определенным пользователям использовать эмулятор терминала?!
Я придумываю трюк, написав в .bashrc
скрипт, который просит пользователя ввести пароль, чтобы иметь возможность использовать эмулятор терминала.
Но этот прием не идеален для некоторых опытных пользователей, которые знают, как работать над этим приемом.
Для этого я ищу способ запретить конкретным пользователям использовать эмулятор терминала вообще, эти пользователи являются обычными пользователями без разрешения sudo
.
Есть предложения?!
Создайте группу для пользователей, которым разрешено использовать терминалы, скажем, terminalusers
. Найдите программу терминала (используйте which
), например, xterm
. Измените его владельца соответственно:
chown root:terminalusers /usr/bin/xterm
Разрешить выполнение для владельца и группы. Запретить другим:
chmod 750 /usr/bin/xterm
На этом этапе использование xterm
будет невозможно, если вы не являетесь пользователем root или членом группы terminalusers
(добавьте себя в него, и вы будете в состоянии использовать xterm
). Примените аналогичные настройки для других эмуляторов терминала (я полагаю, gnome-terminal
- ваш основной). Теперь это еще один трюк : он блокирует эмуляторы терминалов, а не терминалы (на самом деле, небольшая разница).
В среде UNIX терминалы являются основными интерфейсами системы. Блокировка их может очень беспокоить многие приложения, не только командной строки. Вместо этого блокирование эмуляторов терминала - всего лишь обходной путь. При наличии хороших разрешений помните, что с вашим компьютером из пользовательского терминала не может случиться ничего плохого: требуются привилегии суперпользователя, чтобы все испортить.
Примечание : с xterm
это, как говорят, вызывает проблемы с utmp
.
Особенно, если Ваш "целенаправленный" пользователь имеет нет sudo
полномочия, решение ниже довольно "водонепроницаемо". Это может использоваться не только, чтобы заблокировать пользователей от терминала, но и (любой пользователь) от использования любого приложения.
Решение существует простого и очень легкого фонового сценария, который можно использовать гибким способом заблокировать пользователей из приложений.
Сценарий запускается на запуске с /etc/rc.local
(см. далее ниже),
#!/usr/bin/env python3
import subprocess
import time
data = [
["jacob", "gedit", "thunderbird", "gnome-terminal"],
["William", "gedit"],
]
def user_appcheck(userdata):
try:
user = userdata[0]; apps = userdata[1:]
applist = subprocess.check_output(["ps", "-u", user]).decode("utf-8").splitlines()
matches = sum([[l.split()[-1] for l in applist if app in l] for app in apps], [])
for match in matches:
subprocess.Popen(["pkill", match])
except:
pass
while True:
for userdata in data:
user_appcheck(userdata)
time.sleep(4)
users_apps.py
в месте, где "нормальные" пользователи не могут отредактировать файл.В главном разделе сценария, набор пользователь (пользователи) и их заблокированные приложения в формате:
["<username>", "<application>"],
Для отдельного пользователя, блокируясь gedit
и gnome-terminal
например.
data = [
["jacob", "gedit", "gnome-terminal"],
]
Добавьте строку к /etc/rc.local
:
/bin/bash -c "python3 /path/to/users_apps.py&"
Тестовый прогон это путем выполнения /etc/rc.local
NB тестируют его с не - существенное приложение от Вашей учетной записи пользователя:
/etc/rc.local
При блокировании себя Вы не должны мочь запустить приложение; это могло бы просто открыться во флэш-памяти, но сразу закроется.
Нет очень, чтобы делаться с этим, если пользователь не имеет sudo
полномочия :)