yyyyyyyyyyyyyyyyyyyy

博客园 首页 新随笔 联系 订阅 管理
fakeroot 可以用来模拟 root 权限,以便建立特定权限与档案拥有者的压缩文件案(tar, ar, .deb 等)。透过 LD_PRELOAD 的 dynamic loader 功能,用户不必实际拥有 root 权限。fakeroot最初是为了创建debian包使用的。
例如Debian在生成package的时候,编译完之后,不能立刻在当前环境执行make install,需要执行make install DESTDIR=$(pwd)/debian/tmp把生成的文件安装到build目录的里面$(pwd)/debian/tmp。然后使用那个目录里面 的全部内容生成Debian包(实际上包里面还会包含control和maintainer script等)。这个包里面的文件所有者必 须是root,所以需要以root来执行打包命令。但是应该避免在制作Debian包的时候使用root权限。为了解决这个矛盾,fakeroot被开发 出来了。在fakeroot环境中,操作文件就像使用root操作文件一样。但是,实际上系统中文件的权限还是原来的权限。这个包里面的文件所有者必须是 root,所以需要以root来执行打包命令。

 

2fakeroot与sudo的区别

fakeroot不能获得root的权限,sudo可以。
fakeroot只是伪装成root,它不能改变需要root权限才能改变的文件,它只是让程序执行时按照有root权限的情况来运行,而对文件的操作实际上是在普通用户下进行的。
1
2
fakeroot tar cvf /tmp/local.tar /usr/local
sudo tar cvf /tmp/local.tar /usr/local
上面两条命令都会在/tmp下建立local.tar,tar内的文件名都会以/开头,但前一条命令生成的文件属于当前用户,后一条命令生成的文件是root的。

 

3示例

fakeroot 透过 faked 纪录每个档案权限。
以下的范例是由 fakeroot 执行 bash,并特定指令你可以注意到使用的指令必须拥有超级使用者权限才可正确执行。而这些权限都是暂时由 fakeroot 仿真并纪录。注销 bash 后,所有的档案依然保持原有权限。
$ whoami
joost
$ fakeroot /bin/bash
# whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx 20 joost users 1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3
posted on 2015-08-16 23:25  xxxxxxxx1x2xxxxxxx  阅读(1020)  评论(0编辑  收藏  举报