Prevent all commands from being defined схвати an иначе

Is there в way to prevent all commands from being defined эксперт an иначе?

For example в user shouldn't be able to определяет rm or any other command (Ubuntu default commands) эксперт an иначе ямс.

10
задан 9 January 2016 в 10:28

4 ответа

Нет никакого способа, которым можно препятствовать тому, чтобы пользователь определил безотносительно псевдонимов, которые они предпочитают. Рассмотрите:

  1. Вы отключаете псевдонимы в /etc/bash.bashrc. Они включают его везде, где они приняли решение.
  2. Вы удаляете все упоминания о псевдонимах в /etc/bash.bashrc, и все ~/.bashrc и ~/.bash_aliases с помощью сценария. Они помещают свои псевдонимы в другой файл и получают его.
  3. Вы выполняете команду в PROMPT_COMMAND это отключает определенные псевдонимы. Они переопределяют или не определяют PROMPT_COMMAND.
  4. Вы захватываете DEBUG и не определите псевдонимы. Они удаляют прерывание.
  5. Вы показанный все файлы, полученные при вызове для укоренения. Они используют другой файл и получают его вручную как первую команду, которую они выполняют.
  6. Вы отключаете builtins unset, builtin и enable; сделать alias функция; declare -rf alias препятствовать тому, чтобы пользователи изменили функцию; и экспортируйте функцию. Они работают /bin/bash с --rcfile и --init-file для запуска новой оболочки где сказано, builtins теперь включены.
  7. ...

Вы могли отключить псевдонимы во время компиляции, затем будет ваше дело совершенствовать удар и удостоверяться, что Вы не затронуты следующей Контузией. Конечно, пользователи могли создать свой собственный удар.

24
ответ дан 23 November 2019 в 04:15

Это - вполне бессмысленное усилие как шоу ответа muru. Но существуют некоторые опции, но они не прекрасны.

Согласно bash руководство, функции всегда имеют приоритет по псевдонимам, таким образом мы могли сделать следующее:

xieerqi@eagle:~$ function alias { echo "Aliases are no-no" ; }
xieerqi@eagle:~$ alias TEST='rm'
Aliases are no-no

Вы могли поместить функциональное определение в в масштабе всей системы .bashrc, однако поскольку muru на которых указывают, умные пользователи найдет способ получить псевдонимы путем определения источника другого bashrc файл, например.

Другая идея, с которой я играл, enable встроена. alias оболочка, встроенная, и bash имеет хороший enable команда, которая позволяет включать или отключать builtins. Например, вот я отключающий alias.

xieerqi@eagle:~$ enable -n alias
xieerqi@eagle:~$ alias
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ alias TEST='rm'
No command 'alias' found, did you mean:
 Command '0alias' from package 'zeroinstall-injector' (universe)
alias: command not found
xieerqi@eagle:~$ enable alias
xieerqi@eagle:~$ alias
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
xieerqi@eagle:~$ 

Снова, с помощью в масштабе всей системы bashrc опция здесь.

5
ответ дан 23 November 2019 в 04:15

Вы могли определять (в /etc/profile) функцию, вызванную alias, который делает проверку, которую Вы хотите (вероятно, использование type -p) (после того, как все "команды значения по умолчанию Ubuntu" являются "исполняемыми файлами в $PATH") прежде, чем назвать встроенное alias, НО, как другие указали, Ваши пользователи могли обойти это. Почему бы не получить другую группу пользователей или обучить их ("Определение alias, который переопределяет команду, Очень Хороший Способ Выстрелить себе в Ногу и вызвать беспорядок (например, Почему ls запрашивает мой пароль?))?

0
ответ дан 23 November 2019 в 04:15

TL; DR

Единственный способ препятствовать тому, чтобы пользователь создал псевдонимы, состоит в том, чтобы предоставить им оболочку, которая не поддерживает искажение. Это обычно - проблема X/Y, где X действительно модель угрозы, которая должна быть решена с соответствующими средствами управления или архитектурой вместо того, чтобы пытаться решить проблему post-facto после того, как пользователю дают оболочку в общей системе.

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

Использование Bash ограниченный Shell

Можно использовать ограниченную оболочку Bash путем присвоения rbash как оболочка входа в систему пользователя. Например:

foo:x:2001:2001:restricted user:/home/foo:/bin/rbash

Необходимо затем отключить псевдоним, встроенный для пользователя, предпочтительно не повреждая всех оболочка else также. Как пример, Вы могли добавить следующее к файлу, такому как/etc/profile.d/rbash.sh:

# Limit effect to users in a specific UID range.
if ((UID >= 2000)) && ((UID < 3000)); then
    # Check shell options; disable alias builtins when shell is restricted.
    if [[ $- =~ r ]]; then
        enable -n alias
        enable -n unalias
    fi
fi

Протесты

Если Вы не разместили пользователя в chroot тюрьму или предоставили им измененный ПУТЬ, который не включает доступ к другим оболочкам, нет ничего останавливающего пользователя от простого ввода bash при подсказке и получении неограниченной оболочки.

Кроме того, дизайном ограниченная оболочка предотвращает много общих операций, таких как изменяющиеся каталоги:

$ cd /tmp
rbash: cd: restricted

но не предотвращает другие сценарии или программы в ПУТИ от выполнения так. Это означает, что необходимо тщательно обработать среду пользователя, и конкретно что необходимо предотвратить их от способности изменить ПУТЬ в их файлах запуска, потому что даже при том, что rbash делает ПУТЬ только для чтения, это делает так после инициализации.

Лучший выбор

Даже при использовании rbash необходимо сделать так как часть более широкого набора средств управления. Некоторые примеры могут включать:

  • Предотвратите нетехнических пользователей от случайного вызова опасных команд путем обеспечения псевдонимов по умолчанию такой как rm -i, mv -i, и cp -i в/etc/bash.bashrc файле.

    • Учитывая Ваш исходный пример, это - вероятно, наиболее разумное решение.
    • Можно объединить это с enable -n alias если Вам нравится.
    • Это не будет препятствовать тому, чтобы хорошо осведомленные пользователи изменили псевдонимы, но может быть достаточно препятствовать тому, чтобы нетехнические пользователи делали независимо от того, что это, Вы обеспокоены.
  • Традиционные полномочия Unix или POSIX ACLs для защиты файлов и каталогов.

  • Логины, которые выполняют единственную неинтерактивную команду. Например:

    foo:x:2001:2001:run foo.sh:/home/foo:/usr/local/bin/foo.sh
    
  • Используйте вызванные команды SSH на ключ. Например:

    # ~foo/.ssh/authorized_keys
    command="/usr/local/bin/foo.sh" [remainder of line]
    
  • Используйте опцию OpenSSH ForceCommand с условным блоком Соответствия.

  • Используйте специальные инструменты как gitolite или scponly, разработанный для Вашего определенного варианта использования.

  • Используйте chroot тюрьму.

  • Используйте виртуализацию, такую как Xen, OpenVZ, LXC, VMware, VirtualBox или другие технологии для обеспечения отдельной среды.

После того как Вы точно определили свою модель угрозы, можно определить самые соответствующие средства управления для варианта использования. Без более значимого понимания того, почему Вы хотите предотвратить искажение (например, какую реальную проблему оно решает?) Вы не можете выбрать самые соответствующие средства управления.

10
ответ дан 23 November 2019 в 04:15

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

Похожие вопросы: