Запретить компрометирующие псевдонимы и amp; функции; alias cd = 'rm -rf ~'

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

https://help.ubuntu.com/community/RecoveringUbuntuAfterInstallingWindows

2
задан 29 April 2017 в 18:44

6 ответов

Введение

Конфигурационные файлы Bash

У Bash есть куча файлов конфигурации (aka startup), он использует эти файлы для настройки конкретной среды для каждого пользователя.

Некоторые из этих файлов расположены в /etc, один из них, о котором я знаю, /etc/profile, является глобальным конфигурационным файлом, и его настройки будут применены ко всем сеансам, другой - /etc/bash.bashrc; Мы не должны обходиться этими файлами из-за того, что они уже защищены, и только root имеет права редактировать их.

Очень важный каталог, который может нам очень помочь: /etc/skel ; Всякий раз, когда вы создаете нового пользователя с домашним каталогом, файлы в этом каталоге будут использоваться в качестве скелета для домашнего каталога вашего нового пользователя.

ls -a /etc/skel

.bash_logout  .bashrc  .profile

Мы также можем использовать dpkg, чтобы найти об этих файлах:

$ dpkg -L bash | grep etc

/etc/skel/.bashrc
/etc/skel/.bash_logout
/etc/skel/.profile
/etc/bash.bashrc

, мы видим, что все они установлены bash.

Как работает bash

В любом из этих файлов может быть установлен псевдоним или функция, поэтому давайте посмотрим, как эти файлы будут использоваться bash.

From bash man page:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией -login, она сначала считывает и выполняет команды из файла / etc / profile , если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

, поэтому порядок: ~/.bash_profile > ~/.bash_login > ~/.profile

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

Когда оболочка входа завершается, bash читает и выполняет команды из файла ~ / .bash_logout, если он существует.

Когда интерактивная оболочка, которая не является логином shell запускается, bash читает и выполняет команды из /etc/bash.bashrc и ~ / .bashrc, если эти файлы существуют.

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

Начните следить за этими файлами

, поэтому наиболее важным является ~/.bashrc, потому что почти 90% оболочек bash, которые мы запускаем, находятся в интерактивном режиме и режим без входа. и если мы посмотрим на этот файл, мы увидим, что он будет искать другой файл с именем ~/.bash_aliases, если он сможет его найти, тогда он source тоже будет.

mv ~/.profile ~/.bash_profile

Прежде всего, мы должны переместить ~/.profile на ~/.bash_profile, в противном случае не имеет значения, защитим ли файл ~/.profile, кто-то может создать ~/.bash_profile, и он переопределит наши конфиги, так что:

touch ~/.bash_aliases

После этого, если вы не используете файл ~/.bash_aliases, затем создайте его, как и выше, кто-то может просто создать этот файл, и есть шанс, что он может изменить или псевдонимы внутри него. [!d22 ]

Наконец, используйте chattr для защиты этих файлов от редактирования и удаления.

Когда запущена интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из / etc / bash.bashrc и ~ / .bashrc, если эти файлы существуют.

sudo chattr +i ~/.bash_profile ~/.bashrc ~/.bash_aliases

На странице chattr man:

Файл с атрибутом 'i' не может быть изменен: его нельзя удалить или переименовать, никакая ссылка не может быть создана для этого файла, и никакие данные не могут быть записаны в файл. Только суперпользователь или процесс, обладающий возможностями CAP_LINUX_IMMUTABLE, могут установить или очистить этот атрибут.

Мы закончили. Не забывайте, что всякий раз, когда вы хотите редактировать эти файлы, вы должны сначала удалить атрибут -i.

sudo touch /usr/local/bin/reload_aliases

Сбросить все без закрытия / повторного открытия терминала

unalias -a
alias x='...'
alias b='...'

Другим обходным решением является создание файла:

sudo chmod a=r,x /usr/local/bin/reload_aliases

Поместите свои псевдонимы туда:

/usr/local/bin/reload_aliases

Откат

Убедитесь, что никто не может записать в этот файл:

sudo chattr -i ~/.bash_profile ~/.bashrc ~/.bash_aliases
mv ~/.bash_profile ~/.profile
rm ~/.bash_aliases # if you don't use it
2
ответ дан 22 May 2018 в 23:05
  • 1
    Не будет защищаться от bash --rcfile=/home/evil/bashrc.bad (и пусть команды luser выдают эту оболочку). – waltinator 30 April 2017 в 08:36
  • 2
    Не могли бы вы объяснить это больше? Я не могу понять, как это возможно ... потому что я определенно не буду запускать такую ​​команду. – Ravexina 30 April 2017 в 10:34
  • 3
    Как сказал О.П., он опасается, что Бад-Гай выполняет команду, определяющую злые псевдонимы. Вы предложили то, что должно было предотвратить это. Я дал доказательство концепции, что это не помешает этому. Прочитайте man bash и выполните поиск --rcfile. Он говорит «Execute commands from file *instead* of the system wide initialization file /etc/bash.bashrc and the standard personal initialization file ~/.bashrc if the shell is interactive (see INVOCATION below).». (Мои звездочки) – waltinator 1 May 2017 в 02:17
  • 4
    Что делать, если мы закрываем и вновь открываем терминал? что будет работать правильно? – Ravexina 1 May 2017 в 11:14

Введение

Конфигурационные файлы Bash

У Bash есть куча файлов конфигурации (aka startup), он использует эти файлы для настройки конкретной среды для каждого пользователя.

Некоторые из этих файлов расположены в /etc, один из них, о котором я знаю, /etc/profile, является глобальным конфигурационным файлом, и его настройки будут применены ко всем сеансам, другой - /etc/bash.bashrc; Мы не должны обходиться этими файлами из-за того, что они уже защищены, и только root имеет права редактировать их.

Очень важный каталог, который может нам очень помочь: /etc/skel ; Всякий раз, когда вы создаете нового пользователя с домашним каталогом, файлы в этом каталоге будут использоваться в качестве скелета для домашнего каталога вашего нового пользователя.

ls -a /etc/skel .bash_logout .bashrc .profile

Мы также можем использовать dpkg, чтобы найти об этих файлах:

$ dpkg -L bash | grep etc /etc/skel/.bashrc /etc/skel/.bash_logout /etc/skel/.profile /etc/bash.bashrc

, мы видим, что все они установлены bash.

Как работает bash

В любом из этих файлов может быть установлен псевдоним или функция, поэтому давайте посмотрим, как эти файлы будут использоваться bash.

From bash man page:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией -login, она сначала считывает и выполняет команды из файла / etc / profile , если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

, поэтому порядок: ~/.bash_profile > ~/.bash_login > ~/.profile

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

Когда оболочка входа завершается, bash читает и выполняет команды из файла ~ / .bash_logout, если он существует.

Когда интерактивная оболочка, которая не является логином shell запускается, bash читает и выполняет команды из /etc/bash.bashrc и ~ / .bashrc, если эти файлы существуют.

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

Начните следить за этими файлами

, поэтому наиболее важным является ~/.bashrc, потому что почти 90% оболочек bash, которые мы запускаем, находятся в интерактивном режиме и режим без входа. и если мы посмотрим на этот файл, мы увидим, что он будет искать другой файл с именем ~/.bash_aliases, если он сможет его найти, тогда он source тоже будет.

mv ~/.profile ~/.bash_profile

Прежде всего, мы должны переместить ~/.profile на ~/.bash_profile, в противном случае не имеет значения, защитим ли файл ~/.profile, кто-то может создать ~/.bash_profile, и он переопределит наши конфиги, так что:

touch ~/.bash_aliases

После этого, если вы не используете файл ~/.bash_aliases, затем создайте его, как и выше, кто-то может просто создать этот файл, и есть шанс, что он может изменить или псевдонимы внутри него.

Наконец, используйте chattr для защиты этих файлов от редактирования и удаления.

Когда запущена интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из / etc / bash.bashrc и ~ / .bashrc, если эти файлы существуют.

sudo chattr +i ~/.bash_profile ~/.bashrc ~/.bash_aliases

На странице chattr man:

Файл с атрибутом 'i' не может быть изменен: его нельзя удалить или переименовать, никакая ссылка не может быть создана для этого файла, и никакие данные не могут быть записаны в файл. Только суперпользователь или процесс, обладающий возможностями CAP_LINUX_IMMUTABLE, могут установить или очистить этот атрибут.

Мы закончили. Не забывайте, что всякий раз, когда вы хотите редактировать эти файлы, вы должны сначала удалить атрибут -i.

sudo touch /usr/local/bin/reload_aliases

Сбросить все без закрытия / повторного открытия терминала

unalias -a alias x='...' alias b='...'

Другим обходным решением является создание файла:

sudo chmod a=r,x /usr/local/bin/reload_aliases

Поместите свои псевдонимы там:

/usr/local/bin/reload_aliases

Откат

Убедитесь, что никто не может записать в этот файл:

sudo chattr -i ~/.bash_profile ~/.bashrc ~/.bash_aliases mv ~/.bash_profile ~/.profile rm ~/.bash_aliases # if you don't use it
2
ответ дан 18 July 2018 в 14:04

Введение

Конфигурационные файлы Bash

У Bash есть куча файлов конфигурации (aka startup), он использует эти файлы для настройки конкретной среды для каждого пользователя.

Некоторые из этих файлов расположены в /etc, один из них, о котором я знаю, /etc/profile, является глобальным конфигурационным файлом, и его настройки будут применены ко всем сеансам, другой - /etc/bash.bashrc; Мы не должны обходиться этими файлами из-за того, что они уже защищены, и только root имеет права редактировать их.

Очень важный каталог, который может нам очень помочь: /etc/skel ; Всякий раз, когда вы создаете нового пользователя с домашним каталогом, файлы в этом каталоге будут использоваться в качестве скелета для домашнего каталога вашего нового пользователя.

ls -a /etc/skel .bash_logout .bashrc .profile

Мы также можем использовать dpkg, чтобы найти об этих файлах:

$ dpkg -L bash | grep etc /etc/skel/.bashrc /etc/skel/.bash_logout /etc/skel/.profile /etc/bash.bashrc

, мы видим, что все они установлены bash.

Как работает bash

В любом из этих файлов может быть установлен псевдоним или функция, поэтому давайте посмотрим, как эти файлы будут использоваться bash.

From bash man page:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с опцией -login, она сначала считывает и выполняет команды из файла / etc / profile , если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

, поэтому порядок: ~/.bash_profile > ~/.bash_login > ~/.profile

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с параметром --login, сначала считывает и выполняет команды из файла / etc / profile, если этот файл существует. После прочтения этого файла он ищет ~/.bash_profile, ~/.bash_login и ~/.profile в этом порядке и считывает и выполняет команды из первого, который существует и доступен для чтения.

Когда оболочка входа завершается, bash читает и выполняет команды из файла ~ / .bash_logout, если он существует.

Когда интерактивная оболочка, которая не является логином shell запускается, bash читает и выполняет команды из /etc/bash.bashrc и ~ / .bashrc, если эти файлы существуют.

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

Начните следить за этими файлами

, поэтому наиболее важным является ~/.bashrc, потому что почти 90% оболочек bash, которые мы запускаем, находятся в интерактивном режиме и режим без входа. и если мы посмотрим на этот файл, мы увидим, что он будет искать другой файл с именем ~/.bash_aliases, если он сможет его найти, тогда он source тоже будет.

mv ~/.profile ~/.bash_profile

Прежде всего, мы должны переместить ~/.profile на ~/.bash_profile, в противном случае не имеет значения, защитим ли файл ~/.profile, кто-то может создать ~/.bash_profile, и он переопределит наши конфиги, так что:

touch ~/.bash_aliases

После этого, если вы не используете файл ~/.bash_aliases, затем создайте его, как и выше, кто-то может просто создать этот файл, и есть шанс, что он может изменить или псевдонимы внутри него.

Наконец, используйте chattr для защиты этих файлов от редактирования и удаления.

Когда запущена интерактивная оболочка, которая не является оболочкой входа, bash читает и выполняет команды из / etc / bash.bashrc и ~ / .bashrc, если эти файлы существуют.

sudo chattr +i ~/.bash_profile ~/.bashrc ~/.bash_aliases

На странице chattr man:

Файл с атрибутом 'i' не может быть изменен: его нельзя удалить или переименовать, никакая ссылка не может быть создана для этого файла, и никакие данные не могут быть записаны в файл. Только суперпользователь или процесс, обладающий возможностями CAP_LINUX_IMMUTABLE, могут установить или очистить этот атрибут.

Мы закончили. Не забывайте, что всякий раз, когда вы хотите редактировать эти файлы, вы должны сначала удалить атрибут -i.

sudo touch /usr/local/bin/reload_aliases

Сбросить все без закрытия / повторного открытия терминала

unalias -a alias x='...' alias b='...'

Другим обходным решением является создание файла:

sudo chmod a=r,x /usr/local/bin/reload_aliases

Поместите свои псевдонимы там:

/usr/local/bin/reload_aliases

Откат

Убедитесь, что никто не может записать в этот файл:

sudo chattr -i ~/.bash_profile ~/.bashrc ~/.bash_aliases mv ~/.bash_profile ~/.profile rm ~/.bash_aliases # if you don't use it
2
ответ дан 24 July 2018 в 20:19

Если вы делаете глупые вещи (уходите без блокировки экрана, слепо запускайте неопытные скрипты из ненадежных источников и т. д.), вы получите плохие результаты.

Попытка быть достаточно умной, чтобы оправиться от плохих практик никогда раньше не работала.

0
ответ дан 22 May 2018 в 23:05

Если вы делаете глупые вещи (уходите без блокировки экрана, слепо запускайте неопытные скрипты из ненадежных источников и т. д.), вы получите плохие результаты.

Попытка быть достаточно умной, чтобы оправиться от плохих практик никогда раньше не работала.

0
ответ дан 18 July 2018 в 14:04

Если вы делаете глупые вещи (уходите без блокировки экрана, слепо запускайте неопытные скрипты из ненадежных источников и т. д.), вы получите плохие результаты.

Попытка быть достаточно умной, чтобы оправиться от плохих практик никогда раньше не работала.

0
ответ дан 24 July 2018 в 20:19

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

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