Как всегда применять пароль sudo для конкретной команды?

Это происходит потому, что вы не являетесь владельцем файла. Чтобы получить доступ к файлу, выполните следующие действия.

Откройте терминал и введите:
$sudo -s
Введите пароль администратора. Затем сделайте (не забудьте заменить имя пользователя)
$cd /home/[username]/.config
$chmod 777 opera
12
задан 11 May 2018 в 10:44

8 ответов

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

Вы можете использовать псевдоним rm - rm -I, который

запрашивает подтверждение, как только он удалит каталог или более 3 файлов, если вы не укажете -f, который отменяет предыдущие опции -I.

--one-file-system является еще одной возможной защитой от непреднамеренного удаления, которое я использую в моем псевдониме rm.

Настройка

Чтобы создать такой псевдоним, используйте команда:

alias rm='rm -I --one-file-system'

Вы можете поместить ее в свои ~/.bashrc или даже /etc/bash.bashrc.

Использование

$ sudo rm -r /etc/apt/sources.list.d /* rm: remove all arguments?

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

1
ответ дан 17 July 2018 в 14:36

sudo предоставляет опцию -k, --reset-timestamp, см. man sudo:

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

Вы можете написать простую оболочку для тестирования sudo для rm -rf /* и запускать

sudo -k rm -rf /*

вместо этого, например. например:

sudo () { [[ "$*" == "rm -rf /*" ]] && opt="-k"; /usr/bin/sudo $opt "$@" }

Пример использования

Тестирование с помощью echo a здесь.

$ sudo echo [sudo] password for dessert: $ sudo echo $ sudo echo a [sudo] password for dessert: a $ sudo echo a [sudo] password for dessert: a

Если вы хотите каждый раз, когда вы запускаете rm в общем случае, вы можете адаптировать вышеуказанную функцию следующим образом:

sudo () { [[ "$1" == "rm" ]] && opt="-k"; /usr/bin/sudo $opt "$@" }

Если вы хотите каждый как общие вызовы команд, так и конкретные командные строки Я рекомендую использовать case, например:

sudo () { case "$*" in rm*) opt="-k" ;; "mv /home"*) opt="-k" ;; "ln -s /usr/bin/fish /bin/sh") opt="-k" && echo "Don't you dare!" ;; *) opt="" ;; esac; /usr/bin/sudo $opt "$@" }

Обратите внимание, что эти подходы не будут работать, если вы запустите sudo с параметрами - возможные решения - [[ "$*" =~ " rm " ]] для проверки строки «rm», окруженной пробелами, или *" rm "*) с case, чтобы поймать любую командную строку, содержащую «rm».

3
ответ дан 17 July 2018 в 14:36

Вы можете установить timestamp_timeout на 0 для определенных команд в /etc/sudoers. Создайте файл visudo -f /etc/sudoers.d/pduck со следующим содержимым:

Cmnd_Alias DANGEROUS = /bin/rm Defaults!DANGEROUS timestamp_timeout=0 pduck ALL = (ALL:ALL) DANGEROUS

Теперь пользователю pduck всегда задают пароль при запуске sudo rm (независимо от того, какие дополнительные параметры указаны), хотя пользователь является членом группы sudo, а sudo запоминает свой пароль для других команд.

Недостатком является то, что вы не можете легко добавить параметры в строку /bin/rm в файле, чтобы дополнительно ограничить это. Ну ... вы можете, например:

Cmnd_Alias DANGEROUS = /bin/rm -f

, но тогда вы просто получите запрос точно sudo rm -f, а не (снова) для sudo rm -rf, например.

17
ответ дан 17 July 2018 в 14:36

Одним из способов было бы использовать safe-rm. Это будет ТОЛЬКО адресовать использование «rm» и предотвращать запуск определенных версий «rm». Это включает удаление вашей корневой системы, но также может использоваться для предотвращения удаления связанных с системой каталогов, таких как «/ usr /» или «/ var /». Из ссылки:

Предотвращение случайного удаления важных файлов Safe-rm - это средство безопасности, предназначенное для предотвращения случайного удаления важных файлов путем замены /bin/rm на оболочку, которая проверяет данные аргументы против настраиваемый черный список файлов и каталогов, которые никогда не должны удаляться. Пользователи, которые пытаются удалить один из этих защищенных файлов или каталогов, не смогут этого сделать, и вместо этого будут показаны предупреждающее сообщение: $ rm -rf /usr Skipping /usr (Защищенные пути могут быть установлены как на уровне сайта, так и на уровне пользователей.) Восстановление важных файлов, которые вы по ошибке может быть довольно сложным. Защитите себя сегодня, установив safe-rm и уменьшите вероятность того, что вам нужно будет обратиться в службу восстановления данных!

safe-rm

9
ответ дан 17 July 2018 в 14:36

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

Вы можете использовать псевдоним rm - rm -I, который

запрашивает подтверждение, как только он удалит каталог или более 3 файлов, если вы не укажете -f, который отменяет предыдущие опции -I.

--one-file-system является еще одной возможной защитой от непреднамеренного удаления, которое я использую в моем псевдониме rm.

Настройка

Чтобы создать такой псевдоним, используйте команда:

alias rm='rm -I --one-file-system'

Вы можете поместить ее в свои ~/.bashrc или даже /etc/bash.bashrc.

Использование

$ sudo rm -r /etc/apt/sources.list.d /* rm: remove all arguments?

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

1
ответ дан 20 July 2018 в 14:40

sudo предоставляет опцию -k, --reset-timestamp, см. man sudo:

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

Вы можете написать простую оболочку для тестирования sudo для rm -rf /* и запускать

sudo -k rm -rf /*

вместо этого, например. например:

sudo () { [[ "$*" == "rm -rf /*" ]] && opt="-k"; /usr/bin/sudo $opt "$@" }

Пример использования

Тестирование с помощью echo a здесь.

$ sudo echo [sudo] password for dessert: $ sudo echo $ sudo echo a [sudo] password for dessert: a $ sudo echo a [sudo] password for dessert: a

Если вы хотите каждый раз, когда вы запускаете rm в общем случае, вы можете адаптировать вышеуказанную функцию следующим образом:

sudo () { [[ "$1" == "rm" ]] && opt="-k"; /usr/bin/sudo $opt "$@" }

Если вы хотите каждый как общие вызовы команд, так и конкретные командные строки Я рекомендую использовать case, например:

sudo () { case "$*" in rm*) opt="-k" ;; "mv /home"*) opt="-k" ;; "ln -s /usr/bin/fish /bin/sh") opt="-k" && echo "Don't you dare!" ;; *) opt="" ;; esac; /usr/bin/sudo $opt "$@" }

Обратите внимание, что эти подходы не будут работать, если вы запустите sudo с параметрами - возможные решения - [[ "$*" =~ " rm " ]] для проверки строки «rm», окруженной пробелами, или *" rm "*) с case, чтобы поймать любую командную строку, содержащую «rm».

3
ответ дан 20 July 2018 в 14:40
  • 1
    [[ "$1" == "rm" ]] && opt="-k"; и как насчет /bin/rm? – Rinzwind 11 May 2018 в 13:00
  • 2
    @Rinzwind Я думаю, что эта функция легко адаптируется к конкретным потребностям, особенно к подходу case. – dessert 11 May 2018 в 13:19

Вы можете установить timestamp_timeout на 0 для определенных команд в /etc/sudoers. Создайте файл visudo -f /etc/sudoers.d/pduck со следующим содержимым:

Cmnd_Alias DANGEROUS = /bin/rm Defaults!DANGEROUS timestamp_timeout=0 pduck ALL = (ALL:ALL) DANGEROUS

Теперь пользователю pduck всегда задают пароль при запуске sudo rm (независимо от того, какие дополнительные параметры указаны), хотя пользователь является членом группы sudo, а sudo запоминает свой пароль для других команд.

Недостатком является то, что вы не можете легко добавить параметры в строку /bin/rm в файле, чтобы дополнительно ограничить это. Ну ... вы можете, например:

Cmnd_Alias DANGEROUS = /bin/rm -f

, но тогда вы просто получите запрос точно sudo rm -f, а не (снова) для sudo rm -rf, например.

17
ответ дан 20 July 2018 в 14:40

Одним из способов было бы использовать safe-rm. Это будет ТОЛЬКО адресовать использование «rm» и предотвращать запуск определенных версий «rm». Это включает удаление вашей корневой системы, но также может использоваться для предотвращения удаления связанных с системой каталогов, таких как «/ usr /» или «/ var /». Из ссылки:

Предотвращение случайного удаления важных файлов Safe-rm - это средство безопасности, предназначенное для предотвращения случайного удаления важных файлов путем замены /bin/rm на оболочку, которая проверяет данные аргументы против настраиваемый черный список файлов и каталогов, которые никогда не должны удаляться. Пользователи, которые пытаются удалить один из этих защищенных файлов или каталогов, не смогут этого сделать, и вместо этого будут показаны предупреждающее сообщение: $ rm -rf /usr Skipping /usr (Защищенные пути могут быть установлены как на уровне сайта, так и на уровне пользователей.) Восстановление важных файлов, которые вы по ошибке может быть довольно сложным. Защитите себя сегодня, установив safe-rm и уменьшите вероятность того, что вам нужно будет обратиться в службу восстановления данных!

safe-rm

9
ответ дан 20 July 2018 в 14:40

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

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