Консультация № 52032
13.08.2006, 21:20
0.00 руб.
0 4 4
Здравствуйте!
Написал пару скриптов для загрузки/выгрузки модулей поддержки модема. Поместил их в папку /usr/bin в надежде на то, что теперь можно будет запускать их из командной строки. Но запускаются они почему-то только под root-ом, а под простым пользователем говорят, что нет доступа. Подскажите почему так.
Пример одного скрипта в приложении.
В связи с этим еще вопрос: почему некоторые команды работают только под root-ом, например, mount/umount? И возможно ли сделать так, чтобы эти команды работали и под простым пользователем?


Приложение:
#! /bin/bash/sbin/insmod /lib/modules/`uname -r`/misc/pctel.o/sbin/insmod /lib/modules/`uname -r`/misc/ptserial.o# end file

Обсуждение

Неизвестный
13.08.2006, 21:34
общий
это ответ
Здравствуйте, Sh2d000w!
Поменяй владельца <b>chown my_username:my_usergroup /usr/bin/my_script.sh</b> или измени права на запуск с помощью команды <b>chmod</b> , только аккуратней, чтобы не навредить безопасности. Тоже самое касается всего остального. Все проблемы с правами для отличного от рута пользователя можно решить разом, назначив ему группу wheel или root в зависимости от ОС. Но не советую этого делать если машина является сервером или чем-то в этом роде.
Неизвестный
13.08.2006, 21:42
общий
это ответ
Здравствуйте, Sh2d000w!
Вши скрипты не выполняются скорее всего по той причине, что право на выполнение имеет владелец, а владелец - root
ls -a /usr/bin
и вы увидите права доступа и владельцев (пользователя и группу)

Выходов два:
1. сделайте пользователя который будет запускать этот скрипт владельцем
2. дайте права на выполнение скрипта всем для вашего скрипта.(не лучший вариант. Лучше дать права на выполнение владельцу- root и группе и добавить нужных пользователей в эту группу).

И ответ на второй вопрос.
некоторые команды работают под рутом потому как право на выполнение имеет только владелец,а владелец- root. Почему так? из соображений безопасности.В большей степени потому, что некорректное использование этих комманд непривелигированым пользователем может нанести вред ОС и привести к краху
Неизвестный
13.08.2006, 23:20
общий
это ответ
Здравствуйте, Sh2d000w!

1. Во-первых права доступа к скрипту посмотрите. Можно командой ls -l /path/to/script. Пользователь от которого вы выполняеете скрипт должен иметь право на запуск. Права доступа будут в первой колонке - первый символ показывает тип файла, в вашем случае там будет прочерк, Далее по три символа - права доступа для владельца, группы владельца, и остальных пользователей. (Следующие правами доступа две колонки как раз показывают владельца и группу). Сменить права доступа можно командой chmod. Например дать всем право выполнения: chmod a+x /path/to/file, дать владельцу право чтения: chmod u+w /path/to/file - остальное смотрите в man chmod.
2. В вашем случае этого не достаточно. insmod вообще можно запускать только от рута - все-таки модули ядра подгружаете(кстати почему не с помощью modprobe?). Поэтому есть несколько вариантов:
- установить кроме прав доступа правильных, еще и suid-бит, перед этим сменив(если уже не стоит пользователя/группу файла на root). suid/sgid-биты дают возможность выполнять файл не от имени пользователя/группы который его запускает, а от имени владельца/группы которому файл принадлежит. По-идее должно срабатывать. (chmod a+s /path/to/file - так устанавливается suid-бит).
- что вам мешает подгружать эти модули во время загрузки? - если ничего, то либо впихнуть соответсвующие команды в скрипты загрузки(увы как это сделать в вашей системе ничего не могу сказать), либо почитать документацию к modprobe.
Второй вариант предпочтительнее и не намного сложнее. Как впихнуть команды в автозагрузку(там по-умолчанию все от имени рута делается) должно быть описано в документации к дистрибъютиву... ну или спросите тут, может кто и знает.
3. по поводу mount - все что было сказано относительно suid-битов тут действует. Плюз предусмотрена возможность указать возможность монтировать/отмонтировать пользователям некоторых устройств, например флопика, сд-рома. man mount, man fstab. У меня например вот так написано про сд-ром:
/dev/hdb /mnt/cdrom iso9660 ro,users,noauto,iocharset=koi8-r 0 0
плюс к тому есть еще штуки для автоматического монтирования устройств, например autofs ...
Неизвестный
14.08.2006, 10:16
общий
это ответ
Здравствуйте, Sh2d000w!
Своему скрипту сделайте chmod 4777 . Команды insmod/rmmod действительно могут запускатся только root‘ом, потому что убить систему имеет право только root :-)
А вот mount и umount могут запускатся кем угодно, вероятно Вы просто пробовали их на записях из /etc/fstab (mount /mnt/floppy). Попробуйте mount /dev/fd0 /mnt/floppy и у Вас все получится. Ели же охота все-таки использовать mount /mnt/floppy для любого пользовтеля, то в /etc/fstab для таких mountpoint‘ов допишите user (право umount‘ить имеет только тот, кто mount‘ил) или users (кто угодно может umount‘нуть и mount‘нуть)
Вывод: любую програму можно заставить запускатся от любого пользователя, но надо знать какую именно и для чего это нужно (иначе можно просто убить систему)
Форма ответа