Не удалить Файл на Fedora

Это что вывод ldd /bin/ls мог бы быть похожим:

linux-vdso.so.1 (0x00007fff2cffe000)
libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f87e978f000)
libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f87e9586000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f87e91d9000)
libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f87e8fd4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f87e9993000)

Это что вывод ldd /bin/ls /bin/cat мог бы быть похожим:

/bin/ls:
    linux-vdso.so.1 (0x00007fffd25df000)
    libcap.so.2 => /usr/lib/libcap.so.2 (0x00007f28f8d09000)
    libacl.so.1 => /usr/lib/libacl.so.1 (0x00007f28f8b00000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f28f8753000)
    libattr.so.1 => /usr/lib/libattr.so.1 (0x00007f28f854e000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f28f8f0d000)
/bin/cat:
    linux-vdso.so.1 (0x00007ffff9dfe000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007fc44208a000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fc442437000)

Попробуйте это вместо этого:

ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
    cp --parents "$i" "$CHROOT"
done

Выше, мы используем grep удалить /bin/ls: и /bin/cat: строки. :$ регулярное выражение, которое соответствует двоеточиям в концах строк.

Обратите внимание, что я внес несколько других изменений в Ваш сценарий. Стиль передачи по каналу к циклу более идиоматичен. sort обычно имеет a -u опция удалить дубликаты. Обычно предпочтительно использовать "$@" вместо $* поскольку это расширится до имен файлов с пробелами и специальными символами правильно. Это не должно иметь значения в этом случае все же.


Для копирования и команд и их библиотек добавьте второй вызов к cp ниже цикла.

ldd "$@" | cut -d' ' -f3 | sort -u | grep -v ':$' |
while read i
do
    cp --parents "$i" "$CHROOT"
done
cp --parents "$@" "$CHROOT"
3
23.05.2017, 15:40
2 ответа

Ряд возможностей:

  • точка трейлинга в строке разрешения файла -rwSr-s---. указывают расширенные права доступа, либо в SE Linux (подтвердить с помощью ls -lZ), либо в ACL-стиле (подтвердить с помощью getfacl ), которые могут блокировать переопределения корня.
  • файл стал неизменяемым с помощью chattr ; подтвердите атрибуты файловой системы с помощью lsattr
  • Файл находится на файловой системе NFS, которая экспортируется с опцией root_squash, которая повторно отправляет удаленного пользователя root под непривилегированной учетной записью. Вместо этого выполните команду rm в качестве фактического владельца файла, например, выполните команду rm. sudo -u rm имя файла
  • файл находится в файловой системе только для чтения, подтвердите командой mount или /proc/mounts
  • IIRC вы не можете удалить специальные записи устройств, которые представляют настройки ядра, такие как файлы на файловых системах proc и sysfs, так ли это?
5
27.01.2020, 21:14

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

lsattr возвращает расширенные атрибуты файла:

$ lsattr model/DailyUpdateClass.class
-u-Diad--j------ DailyUpdateClass.class

Вам нужно будет расшифровать все буквы ( -u-Diad - j )

Справочная страница для lsattr предложит вам просмотреть справочную страницу для chattr для описания расширенных атрибутов. Здесь я перечислил соответствующие:

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

При изменении каталога с установленным атрибутом D изменения записываются синхронно на диск; это эквивалентно dirsync параметр монтирования, примененный к подмножеству файлов.

Один D немного беспокоит - он явно используется только в каталогах, но у вас есть файл.

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

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

Файл с установленным атрибутом d не является кандидатом для резервного копирования, когда запускается программа dump (8).

Файл с атрибутом j имеет все данные, записанные в ext3 или ext4 journal перед записью в сам файл, если файловая система смонтирована с помощью data = order или data = writeback опции. Когда файловая система смонтирована с data = journal опция все данные файла уже занесены в журнал, и этот атрибут не имеет эффект. Только суперпользователь или процесс, обладающий Возможность CAP_SYS_RESOURCE может устанавливать или очищать этот атрибут.

Чтобы исправить это, используйте chattr . Например, чтобы удалить атрибуты immutable и append:

# chattr -ia model/DailyUpdateClass.class
1
27.01.2020, 21:14

Теги

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