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 иначе ямс.
Нет никакого способа, которым можно препятствовать тому, чтобы пользователь определил безотносительно псевдонимов, которые они предпочитают. Рассмотрите:
/etc/bash.bashrc
. Они включают его везде, где они приняли решение./etc/bash.bashrc
, и все ~/.bashrc
и ~/.bash_aliases
с помощью сценария. Они помещают свои псевдонимы в другой файл и получают его.PROMPT_COMMAND
это отключает определенные псевдонимы. Они переопределяют или не определяют PROMPT_COMMAND
.DEBUG
и не определите псевдонимы. Они удаляют прерывание.unset
, builtin
и enable
; сделать alias
функция; declare -rf alias
препятствовать тому, чтобы пользователи изменили функцию; и экспортируйте функцию. Они работают /bin/bash
с --rcfile
и --init-file
для запуска новой оболочки где сказано, builtins теперь включены.Вы могли отключить псевдонимы во время компиляции, затем будет ваше дело совершенствовать удар и удостоверяться, что Вы не затронуты следующей Контузией. Конечно, пользователи могли создать свой собственный удар.
Это - вполне бессмысленное усилие как шоу ответа 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
опция здесь.
Вы могли определять (в /etc/profile
) функцию, вызванную alias
, который делает проверку, которую Вы хотите (вероятно, использование type -p
) (после того, как все "команды значения по умолчанию Ubuntu" являются "исполняемыми файлами в $PATH
") прежде, чем назвать встроенное alias
, НО, как другие указали, Ваши пользователи могли обойти это. Почему бы не получить другую группу пользователей или обучить их ("Определение alias
, который переопределяет команду, Очень Хороший Способ Выстрелить себе в Ногу и вызвать беспорядок (например, Почему ls
запрашивает мой пароль?))?
Единственный способ препятствовать тому, чтобы пользователь создал псевдонимы, состоит в том, чтобы предоставить им оболочку, которая не поддерживает искажение. Это обычно - проблема X/Y, где X действительно модель угрозы, которая должна быть решена с соответствующими средствами управления или архитектурой вместо того, чтобы пытаться решить проблему post-facto после того, как пользователю дают оболочку в общей системе.
Ниже, я предоставляю технически корректный ответ, а также некоторое руководство на том, какие проблемы это будет и не решать. Я также обеспечиваю некоторое дополнительное разъяснение на альтернативных средствах управления.
Можно использовать ограниченную оболочку 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 или другие технологии для обеспечения отдельной среды.
После того как Вы точно определили свою модель угрозы, можно определить самые соответствующие средства управления для варианта использования. Без более значимого понимания того, почему Вы хотите предотвратить искажение (например, какую реальную проблему оно решает?) Вы не можете выбрать самые соответствующие средства управления.