Предоставление пользователю возможности удалять файл без предоставления им прав на запись в каталог

Предполагая, что достаточно проверить цифру в первом столбце:

awk '$1 ~ /[0-9]/ { print $2 }' data.in >data.out

Чтобы убедиться, что это применяется только к строкам после строки NSET_OUTPUT , вы можете сделать что-то вроде следующего:

sed '1,/NSET_OUTPUT/d' data.in | awk '$1 ~ /[0-9]/ { print $2 }' >data.out

Это приведет к удалению строк перед NSET_OUTPUT и отправке остальных в сценарий awk .


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

Ниже приведена фиксированная версия вашего скрипта:

BEGIN { print_values = 0 }

$12 ~ /NSET_OUTPUT/ {
    for (i = 1; i <= 5; i++) {
        getline;
    }

    print_values = 1;
}

print_values == 1 {
    x = $2;
    print x >"nset_output.dat"
}
3
10.05.2017, 19:21
2 ответа

Ну, это зависит от:

Это невозможно со стандартными разрешениями posix, так как для удаления файла требуется то же разрешение, что и для добавления: разрешение на запись в содержащем каталоге.

Однако, если ваша файловая система поддерживает списки управления доступом NFSv4 (например, ZFS), это возможно, поскольку существуют отдельные элементы управления «запись данных» (-> создание файлов) и удаление дочерних элементов. Вам просто нужно установить запись «разрешить удаление дочернего элемента» в каталоге для конкретного пользователя, но не запись «разрешить запись данных» (или вместо этого: установить «запретить запись данных»).

Подробное описание см. в https://linux.die.net/man/5/nfs4_acl

1
27.01.2020, 21:30

В принципе, да, это комбинация привилегий, которая:

  • позволит удалить файл,
  • позволит не разрешать изменять файл.

Удаление и добавление файлов определяются правами доступа к каталогу, а изменение файлов определяется правами доступа к файлам.

Пример:

➜ пример mkdir -pv пример ➜ пример коснитесь sample/file.txt ➜ пример образца chmod 0700; chmod 0400 образец/файл.txt ➜ пример echo 'sample' > sample/file.txt zsh: разрешение отклонено: образец/файл.txt ➜ пример rm -f sample/file.txt ➜ пример

0
27.01.2020, 21:30

Теги

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