Вы сделали вещи слишком сложными. Декоратор может быть просто удален с помощью del self._greedy_function
. Нет необходимости в атрибуте __wrapped__
.
Вот минимальная реализация методов set_cache
и unset_cache
:
class LRU(OrderedDict):
def __init__(self, maxsize=128, *args, **kwargs):
# ...
self._cache = dict()
super().__init__(*args, **kwargs)
def _greedy_function(self):
time.sleep(1)
return time.time()
def set_cache(self):
self._greedy_function = lru_cache(self._cache)(getattr(self, "_greedy_function"))
def unset_cache(self):
del self._greedy_function
Используя ваш декоратор lru_cache
, вот результаты
o = LRU()
o.set_cache()
print('First call', o._greedy_function())
print('Second call',o._greedy_function()) # Here it prints out the cached value
o.unset_cache()
print('Third call', o._greedy_function()) # The cache is not used
Выходы [ 1111]
First call 1552966668.735025
Second call 1552966668.735025
Third call 1552966669.7354007
Вы, вероятно, захотите установить оболочку пользователя на ограниченная оболочка . Сбросьте переменную ПУТИ в ~ пользователя/.bashrc или ~/.bash_profile, и они не будут в состоянии выполнить любые команды. Позже, если Вы решаете, что хотите позволить пользователю (пользователям) выполнять ограниченный набор команд, как less
или tail
, например, тогда можно скопировать позволенные команды в отдельный каталог (такой как /home/restricted-commands
) и обновить ПУТЬ для указания на тот каталог.
я в состоянии настроить authorized_keys файл с открытым ключом для входа в систему. То, в чем я не уверен, является дополнительной информацией, я должен ограничить то, что той учетной записи позволяют сделать. Например, я знаю, что могу поместить команды, такие как:
no-pty,no-port-forwarding,no-X11-forwarding,no-agent-forwarding
Вы хотели бы строку в своем authorized_keys файле, который похож на это.
permitopen="host.domain.tld:443",no-pty,no-agent-forwarding,no-X11-forwardi
ng,command="/bin/noshell.sh" ssh-rsa AAAAB3NzaC.......wCUw== zoredache
См. это сообщение при аутентификации открытых ключей .
Эти два главного, которое необходимо помнить:
chmod 700 ~/.ssh
Вы генерируете ключ на пользовательской машине через любой ssh клиент, который они используют. ШПАКЛЕВКА, например, имеет утилиту, чтобы сделать эту точную вещь. Это генерирует и и открытый ключ с закрытым ключом.
содержание сгенерированного файла с открытым ключом будет помещено в authorized_keys файл.
Следующий необходимо удостовериться, что ssh клиент настроен для использования закрытого ключа, который генерировал открытый ключ. Это является довольно прямым, но немного отличается в зависимости от используемого клиента.