Как собрать программу автозапуска в Linux - PullRequest
0 голосов
/ 15 октября 2010

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

Как мне запрограммировать его на C?

Ответы [ 5 ]

4 голосов
/ 15 октября 2010

Если я правильно понял, вы имеете в виду что-то вроде Windows AUTORUN.INF, не так ли?

В этом случае, я думаю, очень маловероятно, что вы найдете то, что ищете.Это часто считается опасным, потому что вы можете запускать все, что захотите, включая вирусы и другие вредоносные программы!

3 голосов
/ 15 октября 2010

Когда вы подключаете USB (или часто многие другие типы съемных) запоминающих устройств, ядро, узнав, что это такое, уведомляет программу под названием udevd. udevd просматривает некоторые правила (хранящиеся в файлах в /etc/udev/rules.d/, /lib/udev/rules.d/ или /dev/.udev/rules.d) для правил, которые соответствуют новому устройству и выполняются те, которые делают. Одно из правил для съемных блочных устройств запускает программу для монтирования файловых систем на этом диске (возможно, создания точек / каталогов монтирования).

Gnome, KDE или аналогичный интерфейс рабочего стола получают уведомление об этом через D-BUS о том, что новое устройство установлено и смонтировано (я не на 100% о точных шагах здесь).

В любом случае, чтобы запустить программу на вновь вставленном диске, вам понадобится какая-то программа, которая уже работает для вас. Вы можете попробовать изменить ваши правила udev или скрипт, который монтирует новые диски, чтобы сделать это для вас, или написать нового демона, который получает уведомление о том, как системы управления настольными системами, такие как gnome или KDE, получают уведомление о его запуске, но я не могу знать, если это уже делает это. Это представляет угрозу безопасности, поскольку позволяет любому, имеющему доступ к разъему USB (или аналогичному), запускать любую программу на компьютере. Я мог подойти к кому-то, использующему ноутбук в кафе, и очень быстро запустить программу на своем компьютере без их согласия. Или, если бы я дал кому-то USB-накопитель и сказал: «На нем есть мои отпускные фотографии», и они вставили его в свой компьютер Linux, вредоносная программа автозапуска запустилась бы без его согласия.

Если бы такая функциональность уже была частью какого-то дистрибутива Linux (может быть, я не знаю), он определенно должен потребовать, чтобы пользователь согласился до его запуска, но даже тогда он должен быть ограничен работой с этим UID и GID пользователя (игнорируя возможность еще более сложной безопасности SELinux) и с рабочим каталогом, безопасным для этого пользователя. И это полностью игнорирует проблемы, связанные с путаницей владения мобильными файловыми системами и битами SUID.

Вероятно, это неправильный способ решить любую проблему, которую вы пытаетесь решить.

2 голосов
/ 15 октября 2010

А как насчет демонов ?

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

0 голосов
/ 15 октября 2010

Я думаю, что KDE ищет autorun.sh в корне подключенного устройства, но я не уверен.

0 голосов
/ 15 октября 2010

Вы можете хвост / var / log / messages искать сообщения вставки. Они будут отличаться от устройства к устройству, но обычно выглядят примерно так:

[183532.373402]  sda: sda1
[196936.098729] usb 1-3: USB disconnect, address 3
[196936.440424] usb 1-3: new high speed USB device using ehci_hcd and address 6
[196936.586043] usb 1-3: New USB device found, idVendor=0781, idProduct=9219
[196936.586052] usb 1-3: New USB device strings: Mfr=3, Product=4, SerialNumber=5
[196936.586057] usb 1-3: Product: ImageMate CF Reader/Writer
[196936.586061] usb 1-3: Manufacturer: SanDisk 
[196936.586065] usb 1-3: SerialNumber: 0302855445
[196936.586286] usb 1-3: configuration #1 chosen from 1 choice
[196936.592552] scsi1 : SCSI emulation for USB Mass Storage devices
[196936.593074] usb-storage: device found at 6
[196936.593078] usb-storage: waiting for device to settle before scanning
[196941.592515] usb-storage: device scan complete

Остальное - просто смоп.

...