Запрос подтверждения для chmod, chown

542
Petar Vasilev

Я просто пытаюсь добавить запрос подтверждения на несколько команд linux, таких как chmodи chown.

Я пытался Google это, но я не могу найти много информации по этой теме.

При поиске я обнаружил, что есть решение для rmиспользования этой -iопции, хотя это может быть перезаписано-f

Однако есть safe-rmпакет, который вы можете установить на своем сервере, который помещает в черный список определенные важные каталоги, что является довольно хорошим решением, но, к сожалению, нет аналогичного пакета для chmodи chown.

Таким образом, мое идеальное решение было бы там, где chmodи chownесть запросы на подтверждение, а также определенные каталоги заносятся в черный список от chmod-ed и chown-ed.

Любые ответы очень ценятся !!!

0
`chmod` и` chown` не имеют переключателей подтверждения, потому что их действие всегда обратимо root. Нет смысла просить подтверждение действия, которое является обратимым. Larssend 8 лет назад 0
это обратимо, но вы можете использовать chown или chmod /, а затем, если вы не знаете точного разрешения, так как там довольно много файлов, вы потерялись Petar Vasilev 8 лет назад 0
Но, тем не менее, данные не будут потеряны, поэтому они все еще не так опасны. Larssend 8 лет назад 0
Это правда, но независимо от данных, если права и владельцы не верны, многие вещи на сервере будут сломаны, и восстановить их не всегда просто Petar Vasilev 8 лет назад 0
Их восстановление состоит из восстановления резервной копии или использования резервной копии для получения списка разрешений, какими они должны быть. А как это сделать было сказано раньше. Hennes 8 лет назад 1
Это все еще хорошо, чтобы избежать этого в целом, так как восстановление резервной копии требует времени, что означает, что требуется некоторое время простоя Petar Vasilev 8 лет назад 0

2 ответа на вопрос

1
mykel

A solution in bash would be to use shell functions and aliases. You could put them in /etc/bashrc or ~/.bashrc if you only want them for specific users. Here's some function and alias definitions you could use to do something like what you asked.

DANGERLIST=/etc/dangerous.paths _dangerouspath() { file=$(readlink -e "$1") [ -z "$" ] && return 1 while read pattern do [[ "$" =~ ^$$ ]] && return 0 done < $ return 1 } _checkpaths() { shift while [ -n "$1" ] do [[ "X$1" =~ ^X[^-].* ]] && _dangerouspath $1 && return 0 shift done return 1 } _saferun() { p="$1" shift if _checkpaths $* then read -p "Are you sure you want to do this? (y/n) " r && [ "$r" = "y" ] && $p $* else $p $* fi } alias chown="_saferun /bin/chown" alias chgrp="_saferun /bin/chgrp" alias chmod="_saferun /bin/chmod" 

You'd need to create a list of paths you want to protect in "$DANGERLIST" (/etc/dangerous.paths) which would be something like

/ /home /etc.* /usr/bin.* /bin.* 
Похоже, это должно работать :) Petar Vasilev 8 лет назад 0
0
Hennes

The commands chown (1) and chmod (1) do not natively have sunch an option. If you want to add that functionality then you either:

  1. Have to change the source and recompile.
  2. Or write a wrapper.

The first option is the cleanest. The second the easier. If you get stuck writing that then you need a new question which is likely a better fit for [SO], but briefly:

1) move chmod somewhere else. e.g. mv /bin/chmod /bin/chmold.therealthing

2) Create an executable script called chmod which does what you want (and which calls the real chmod).

Untested something from a non-shell script person (aka me:)

#!/usr/bin/env bash echo "/bin/chmod (Shell script) called with these arguments:" echo $@ read -p "Are you sure you want to do this? (y/n) " RESPONSE if [ "$RESPONSE" = "y" ]; then exec /bin/chmod.therealthing $@ else echo "OK, aborting." fi 

if you want more granular control then the script rapidly becomes more complex. Stiill, of you wish you could parse the input and execute a chmod for every file (after checking for a valid syntax).

Отрадно за это, похоже, это сработает:), кстати, вы пропустили двойную кавычку во второй строке, также я пытаюсь превратить это в функцию bash, но когда я вызываю ее, закрывает мою оболочку, любой шанс ты знаешь почему он это делает? Petar Vasilev 8 лет назад 0
Он закрывается только тогда, когда вы принимаете? У меня есть исполнительный там. (вероятно, из моих дней, когда оперативной памяти было мало). Hennes 8 лет назад 0
Да, после принятия я просто удалил exec на самом деле, и это было так здорово:) Petar Vasilev 8 лет назад 0

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