LINUX.ORG.RU

mount ругается


0

0

Я сижу под юзером. Из консоли (mount) диски монтирую без проблем.
Но когда пытаюсь монтировать их "программно", то получаю все время код 1.
Вот тестовая прорамма и результат:

were@home ~/temp $ umount /dev/cdrom
were@home ~/temp $ ls
1.cpp  1.png  a.out
were@home ~/temp $ cat ./1.cpp
#include <sys/mount.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

int main(){
        char *dev=new char [255], *point=new char [255], *fs=new char[255];
        strcpy(dev, "/dev/cdrom");
        strcpy(point, "/mnt/cdrom");
        strcpy(fs, "iso9660");
        if ((mount(dev, point, fs, 0, 0)==-1))
                        printf("\n%i - %s\n", errno, strerror(errno));
}
were@home ~/temp $ ./a.out

1 - Operation not permitted
were@home ~/temp $


Только не говорите, что я забыл передать флаг readonly:

were@home ~/temp $ su
Password:
home temp # ./a.out

30 - Read-only file system
home temp #

Тоже самое и с флопиком.

кстати,

bash-2.05b$ mount /dev/scd0
mount: only root can mount /dev/scd0 on /mnt/cdrom-asus

theserg ★★★
()
Ответ на: комментарий от anonymous

Я знаю про эти функции.
Но вам не кажется что это по ламерски городить такие конструкции, когда можно вызвать mount/umount и сразу получить результат?

Ty3uK
() автор топика
Ответ на: комментарий от anonymous

Наоборот!
Есть функция которая все это делает - монтирует, парсит и возвращает значение.
А вы предлагаете велосипед: popen заюзать, парсить самому...

Ty3uK
() автор топика

Затрахали блин тупыми спорами, мать вашу!!!

Функция mount() (точнее системный вызов mount) доступен только руту, все остальные обламываются (если не стоит какой-либо специфической модели безопасности в ядре) - но еще раз повторю В БОЛЬШИНСТВЕ СЛУЧАЕВ mount МОЖЕТ ВЫЗВАТЬ ТОЛЬКО ROOT!!!!

И если сейчас кто-нибудь вякнет про /bin/mount, он получит в лоб командой ls -la /bin/mount, которая говорит, что mount имеет установленый бит set UID, вследствие чего запускается С EUID == 0(ROOT)!!! Соотвтетственно, даже если вы вызываете /bin/mount из-под юзера, она действует как root.

Соответественно, для монтирования-размонтирования нужно иметь одно из трех - либо EUID=0, либо иметь SUID'ный враппер на mount() (например /bin/mount таковым является), либо иметь в ядре некую нестандартную security model.

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.