Предотвратите, чтобы все команды определялись как псевдоним

Просто установите Ubuntu, как обычно на втором жестком диске, но убедитесь, что вы устанавливаете загрузчик Grub, это Linux-версия Windows Boot Manager. После установки войдите в BIOS и убедитесь, что порядок загрузки указывает на второй жесткий диск в качестве первой опции загрузки. Если grub не читает вашу Windows 7, попробуйте запустить run:

update-grub
1
задан 9 January 2016 в 21:28

3 ответа

TL; DR

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

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

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

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

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

Затем вы должны отключить встроенный пользователь post-facto для пользователя, желательно, не нарушая оболочку всех остальных. В качестве примера вы можете добавить следующее в файл, например /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 тюрьму или предоставил им модифицированный файл /etc/profile.d/rbash.sh , который не включает доступ к другим оболочкам, нет ничего, что помешало бы пользователю просто ввести bash в приглашение и получение неограниченной оболочки.

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

$ cd /tmp
rbash: cd: restricted

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

Лучший выбор

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

Предотвращение случайного вызова нетехнических пользователей опасными командами путем предоставления псевдонимов по умолчанию, таких как rm -i, mv -i и cp -i в файле /etc/bash.bashrc. Учитывая ваш оригинальный пример, это, вероятно, самое разумное решение. Вы можете комбинировать это с enable -n alias, если хотите. Это не помешает знакомым пользователям изменять псевдонимы, но этого может быть достаточно, чтобы нетехнические пользователи не делали то, что вас беспокоит. Традиционные разрешения Unix или ACL для POSIX для защиты файлов и каталогов. Логины, которые выполняют одну неинтерактивную команду. Например:
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 с условным блоком Match. Используйте специальные инструменты, такие как гитолит или scponly, предназначенные для вашего конкретного случая использования. Используйте chroot тюрьму. Используйте виртуализацию, такую ​​как Xen, OpenVZ, LXC, VMware, VirtualBox или другие технологии для обеспечения изолированной среды.

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

9
ответ дан 23 May 2018 в 14:25
  • 1
    +1 в целом, но также специально для классификации этого как проблема X / Y. – Joe 14 January 2016 в 07:43

Это совершенно бессмысленное усилие, как показывает ответ муру. Но есть некоторые варианты, но они не идеальны.

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

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

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

Еще одна идея, с которой я играл, - enable. alias - встроенная оболочка, а bash имеет приятную команду enable, которая позволяет включать или отключать встроенные функции. Например, здесь я отключил 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 May 2018 в 14:25
  • 1
    Не блокируя все псевдонимы, только встроенные команды не являются псевдонимами :) – αғsнιη 9 January 2016 в 22:04
  • 2
    @ Afshin.Hamedi Ну, что такое команда по умолчанию? Тот, который поставляется с ubuntu? Это означает, что вам нужно будет иметь список всех команд (двоичных файлов), которые поставляются с установкой по умолчанию. Затем каждый раз, когда пользователь загружает оболочку или пытается что-то псевдониму rm, он проверяет список. Учитывая, что списки будут довольно большими, для начала потребуется много времени, ваши пользователи будут жаловаться вам и ненавидят вас как системного администратора :) – Sergiy Kolodyazhnyy 9 January 2016 в 22:08
  • 3
    Это забавный, удивительный вопрос, который у вас есть, мне он нравится! Селективное наложение было бы приятным. Но я сомневаюсь, что это выполнимо, если разработчики оболочки не найдут нужды в том, чтобы они были реализованы :) – Sergiy Kolodyazhnyy 9 January 2016 в 22:10
  • 4
    Идея функции была приятной. Это было ближе всего. – muru 9 January 2016 в 22:11

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

0
ответ дан 23 May 2018 в 14:25

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

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