Ohad Levy wrote:
for embedded platform development, its required to create devices which are hardware specific (i.e. our own modules).

any way to reduce the risk?

Thanks
Are these modules loaded into the running kernel, or are they just being created so they can be saved to the image for later extraction on the actual platform.

If the former, I don't know the details, but it should be possible to construct the modules such that when they are loaded udev will automatically create the device files for them. Then give them access to insmod and rmmod (via sudo) only for those specific modules.

If it's the later, then there is no need to give them root permission, of any kind, at all. Use fakeroot (or my very own fakeroot-ng) to create something that appears to the process that created them to be device files. Then run tar/mkcramfs/mksquashfs/whatever from within the same fake root process, and it will create the image with the right permissions.

Last, you can give them sudo permissions to create only the specific device files needed. This is only recommended for the first case, though.

Sample session with fakeroot-ng:
[EMAIL PROTECTED]:~$ mkdir /tmp/dir
[EMAIL PROTECTED]:~$ cd /tmp/dir
[EMAIL PROTECTED]:/tmp/dir$ fakeroot-ng -pstate mkdir dev
[EMAIL PROTECTED]:/tmp/dir$ fakeroot-ng -pstate mknod dev/sda b 8 0
Notice how the "mknod" call succeeded. Did it create a block device?
[EMAIL PROTECTED]:/tmp/dir$ ls -la dev
total 8
drwxr-xr-x 2 sun sun 4096 May  5 14:51 .
drwxr-xr-x 3 sun sun 4096 May  5 14:51 ..
-rw-r--r-- 1 sun sun    0 May  5 14:51 sda
No. sda is just a regular file. However, fakeroot will tell you it did:
[EMAIL PROTECTED]:/tmp/dir$ fakeroot-ng -pstate ls -la dev
total 8
drwxr-xr-x 2 root root 4096 May  5 14:51 .
drwxr-xr-x 3 sun  sun  4096 May  5 14:51 ..
brw-r--r-- 1 root root 8, 0 May  5 14:51 sda
Suddenly it's owned by root, and is a block device, just like it's supposed to be. Let's tar the directory from within fakeroot-ng:
[EMAIL PROTECTED]:/tmp/dir$ fakeroot-ng -pstate tar cvzf dev.tgz dev
dev/
dev/sda
Now, even without fakeroot-ng, the tar file contains a block device owned by root:
[EMAIL PROTECTED]:/tmp/dir$ tar tvzf dev.tgz
drwxr-xr-x root/root         0 2008-05-05 14:51 dev/
brw-r--r-- root/root       8,0 2008-05-05 14:51 dev/sda
If we examine the directory we will also see the "state" file, where fakeroot-ng stored the data between invocations so that it can be consistent in how it lies:
[EMAIL PROTECTED]:/tmp/dir$ ls -la
total 160
drwxr-xr-x  3 sun  sun    4096 May  5 14:52 .
drwxrwxrwt 14 root root 143360 May  5 14:51 ..
drwxr-xr-x  2 sun  sun    4096 May  5 14:51 dev
-rw-r--r--  1 sun  sun     143 May  5 14:52 dev.tgz
-rw-r--r--  1 sun  sun     150 May  5 14:52 state
Obviously, nothing is owned by root.

You can get fakeroot from http://fakeroot.alioth.debian.org/, and fakeroot-ng from http://sourceforge.net/projects/fakerootng. Fakeroot is automatically available in any version of Debian that was released for the past, oh, at least 10 years. Fakeroot-ng is available in Sid and Lenny.

Shachar

Reply via email to