Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Qt функция удаляет то, что обычный пользователь не может  (Прочитано 1195 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Среда разработки, четверг отладки как говорится(сегодня как раз четверг)

Заметил вот что, есть у меня на Qt вот такая вот функция удаления директории

bool MainWindow::removePath(QString path)
{
    bool result = true;
    QFileInfo info(path);
    if (info.isDir()) {
QDir dir(path);
foreach (const QString &entry, dir.entryList(QDir::AllDirs | QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot)) {
    result &= removePath(dir.absoluteFilePath(entry));
}
if (!info.dir().rmdir(info.fileName()))
    return false;
    } else {
result = QFile::remove(path);
    }
    return result;
}

скажем создаю в домашнем каталоге папочку

root@Zond:/home/zeka13# mkdir .minecraft
root@Zond:/home/zeka13# chmod 000 .minecraft/ -R
root@Zond:/home/zeka13# chown root:root .minecraft/

в наутилусе вижу вот что при попытке её удалить


а функция(приложение запущено из-под обычного пользователя) запросто удаляет эту директорию!
Почему такое происходит? Уязвимость в системе безопасности?
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
Что делает приложение?
Я вернулся...

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
блин, отбой

я из терминала тоже смог удалить таким способом созданную папку, а почему такое происходит?

почему обычнымй юзер нормально удаляет папку rm -rf .dirname
если она создана так?

sudo mkdir .dirname
sudo chmod 000 .dirname/ -R
sudo chown root:root .dirname/
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн MaximKaz

  • Участник
  • *
  • Сообщений: 206
  • С++ forever!
    • Просмотр профиля
Может быть потому, что юзер имеет полные права в своей домашней папке, а в других папках прав не имеет. Даже если у юзера нет прав на запуск и чтение, то он может удалять всё в своём хоме (домашней папке).
Это просто предположение (ИМХО). Я сам точно не знаю!  ;D
Fedora 17 | KDE | Intel Core i3 3.1 Ghz | RAM 2x2 | nVidia GeForce GTS 250 (1 Gb) | 620 Gb HDD (SATA & IDE) | DSL - 8 Mb/sec

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
блин, отбой

я из терминала тоже смог удалить таким способом созданную папку, а почему такое происходит?

почему обычнымй юзер нормально удаляет папку rm -rf .dirname
если она создана так?

sudo mkdir .dirname
sudo chmod 000 .dirname/ -R
sudo chown root:root .dirname/


Дело в том что возможность удаление зависит не от удаляемой папки, а от папки где находится удаляемая папка.
Я вернулся...

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
ну может разъясните эту разницу?
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
директория Linux это файл содержащий записи о других файлах (в т.ч. о поддиректориях)
Права rwx являются правами на чтение директории, запись директории (операции с файлами и поддиректориями) и "запуск директории на выполнение"  т.е. её открытие.
Если нет прав на:
чтение - содержимое директории невидимо.
запись - нельзя проводить операции с файлами (создавать, вырезать, удалять, переименовывать) и поддиректориями
выполнение - в директорию и поддиректории нельзя зайти.

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

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
sudo chmod 000 .dirname/ -R

 ???
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн astrobeglec

  • Активист
  • *
  • Сообщений: 838
  • Самая тяжелая ноша - пророк в извращенном мире...
    • Просмотр профиля
sudo chmod 000 .dirname/ -R

Где ??? И для чего.
Я вернулся...

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
Цитировать
почему обычнымй юзер нормально удаляет папку rm -rf .dirname
если она создана так?

sudo mkdir .dirname
sudo chmod 000 .dirname/ -R
sudo chown root:root .dirname
???
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

Оффлайн mastepaner

  • Новичок
  • *
  • Сообщений: 30
    • Просмотр профиля
Даже если вы поставите http://en.wikipedia.org/wiki/Sticky_bit на свою домашку, то из http://opensuse.swerdna.org/sambaserver/modes.html следует, что и тогда вы сможете удалять 000-файлы, потому что вы останетесь владельцем своей домашки. Так вот всё устроено, мне очень жаль, но ничего уже не поделать.

Оффлайн Zeka13

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1177
  • 18.10 Gnome x64 GTX 970
    • Просмотр профиля
меня просто удивило, что nautilus не удаляет, а Qt удалила, какой-то беспорядок! Ну чтож, спасибо!
Если Wine - это костыль , то  Punto Switcher - это протез , а Daemon Tools инвалидное кресло.

 

Страница сгенерирована за 0.017 секунд. Запросов: 21.