Чи є спосіб запобігти визначенню всіх команд як псевдонім?
Наприклад, користувач не повинен мати змогу визначати rm
будь-яку іншу команду (команди за замовчуванням Ubuntu) як псевдонім.
~/.bashrc
.
Чи є спосіб запобігти визначенню всіх команд як псевдонім?
Наприклад, користувач не повинен мати змогу визначати rm
будь-яку іншу команду (команди за замовчуванням Ubuntu) як псевдонім.
~/.bashrc
.
Відповіді:
Ні в якому разі не можна перешкоджати користувачеві визначати псевдоніми, які він надає перевагу. Поміркуйте:
/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
почати нову оболонку, в якій сказав вбудовані функції тепер включені.Ви можете вимкнути псевдоніми під час компіляції, тоді вам слід буде постійно оновлювати bash та переконайтесь, що наступний Shellshock не вплине на вас. Звичайно, користувачі могли б створити власний баш.
unalias alias
.
\unalias unalias
.
Єдиний спосіб запобігти користувачеві створювати псевдоніми - це надати їм оболонку, яка не підтримує псевдонім. Це, як правило, проблема X / Y, де X - це дійсно модель загрози, яку слід вирішувати за допомогою відповідних елементів керування чи архітектури, а не намагатися вирішити проблему постфакту після того, як користувачеві надано оболонку в загальній системі.
Нижче я надаю технічно правильну відповідь, а також деякі вказівки щодо того, які проблеми це вирішить, а що не вирішить. Я також надаю додаткові вказівки щодо альтернативного контролю.
Ви можете використовувати обмежену оболонку Bash, призначивши rbash як оболонку входу користувача. Наприклад:
foo:x:2001:2001:restricted user:/home/foo:/bin/rbash
Потім потрібно вимкнути вбудований псевдонім для користувача, бажано, не порушуючи також оболонки інших. Як приклад, ви можете додати наступне до файлу, такого як /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 або не надали їм модифікований PATH , який не включає доступ до інших оболонок, ніщо не зупиняє користувача просто вводити bash
підказку та отримувати необмежену оболонку.
Крім того, за допомогою дизайну обмежена оболонка перешкоджає багатьом загальним діям, таким як зміна каталогів:
$ cd /tmp
rbash: cd: restricted
але не заважає цим робити інші сценарії чи програми в PATH . Це означає, що ви повинні ретельно опрацювати середовище користувача, а саме, що вам потрібно не допустити їх зміни в PATH у файлах запуску, оскільки, хоча rbash робить PATH лише для читання, це робиться після ініціалізації.
Навіть якщо ви використовуєте rbash, це потрібно зробити як частина більш широкого набору елементів управління. Деякі приклади можуть включати:
Запобігання нетехнічних користувачів від випадкового посилаються небезпечних команд, надаючи псевдоніми по замовчуванням , такі як rm -i
, mv -i
і cp -i
в /etc/bash.bashrc файл.
enable -n alias
якщо хочете.Традиційні дозволи Unix або POSIX ACL для захисту файлів і каталогів.
Логіни, які виконують одну неінтерактивну команду. Наприклад:
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 з блоком умовного матчу.
Використовуйте спеціальні інструменти, такі як гітоліт або scponly, розроблені для вашого конкретного випадку використання.
Використовуйте в'язницю Chroot .
Використовуйте віртуалізацію, наприклад Xen, OpenVZ, LXC, VMware, VirtualBox або інші технології, щоб забезпечити відокремлене середовище.
Після того, як ви точно визначили модель загрози, ви зможете визначити найбільш підходящий елемент управління для вашого випадку використання. Без більш осмисленого розуміння того, чому ви хочете запобігти згладжування (наприклад, яку проблему в реальному світі вона вирішує?), Ви не можете вибрати найбільш відповідні елементи управління.
Це досить безглузде починання, як свідчить відповідь Муру. Але є деякі варіанти, але вони не є ідеальними.
Згідно з 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
тут є системою.
rm
, він перевіряє список. Враховуючи, що списки були б досить великими, починати потрібно багато часу, ваші користувачі будуть багато скаржитися на вас і ненавидіти вас як системного адміністратора :)
Ви можете визначити (в /etc/profile
) функцію, alias
яка називається, яка робить перевірку, яку ви хочете (можливо, використовуєте type -p
) (адже "Команди за замовчуванням Ubuntu" є "виконуваними $PATH
"), перш ніж викликати вбудований alias
, АЛЕ, як зазначали інші, ваші користувачі могли отримати навколо цього. Чому б не отримати інший набір користувачів або не навчити їх ("Визначення команди, alias
що перекриває команду, - це дуже хороший спосіб стріляти в ногу і викликати плутанину (наприклад, чому ls
запит на пароль?))?