Wednesday, April 22, 2009

NFS上的root用户

# sudo cp -p Microsoft\ Excel\ 工作表.xls root_change.xls
cp: failed to preserve ownership for `root_change.xls': Operation not permitted

表示, NFS上文件的属主不能为root

# sudo chmod 666 Microsoft\ Excel\ 工作表.xls
chmod: changing permissions of `Microsoft Excel 工作表.xls': Operation not permitted

也不认root用户, 上面的其实如下面的处理是一样的:
# ls -al Microsoft\ Excel\ 工作表.xls
-rw-rw-rw- 1 jessinio nogroup 13824 2009-04-15 10:39 Microsoft Excel 工作表.xls
# su www-data
$ chmod 666 Microsoft\ Excel\ 工作表.xls
www-data@laptop:/nfs$ chmod 666 Microsoft\ Excel\ 工作表.xls
chmod: changing permissions of `Microsoft Excel 工作表.xls': Operation not permitted

操作NFS上的文件之前, 需要判断提交RPC操作请求的用户的(owner:group)与文件的owner:group之间的关系. 如果jessinio用户提交的RPC操作请求是对文件有权限的话, 就可以操作, 如果没有权限的话, 就Error了! 这样的操作用户与NFS的client为主

如果是root用户提交RPC操作请求的话, 全被map到nobody用户了. 这个是防止安全问题存在的.

但是迁移数据, 就是需要cp -p 功能!

这个需求怎么处理呢? 英文描述:
How do I copy files to a NFS mount directory and also preserve the group and user ownership of the files ?

解决这个问题的基本方法有两个, 就是使用setuid( )不断切变用户, 不过这样的脚本写得也是很累的. 还有一个方法: 就是想办法让NFS认得了root用户.

一般情况下, NFS不认root用户这样的做到的:
By default root on a client is mapped to user nobody on an NFS server. This is a security measure.

要做的就是让NFS在exports时, 把root用户map到root. just do this:

NFS Server terminal:

/data0 192.168.52.139(rw,sync,no_subtree_check,no_root_squash)

NFS client terminal:

jessinio@:~$ sudo mount -t nfs 192.168.52.96:/data0 /mnt/nfs/
jessinio@~$ cd /mnt/nfs/
jessinio@:/mnt/nfs$ sudo touch root_permission.txt
jessinio@:/mnt/nfs$ ls -al
-rw------- 1 nobody nogroup 13824 2009-04-15 10:39 root_change.xls
-rw-r--r-- 1 root root 0 2009-04-23 11:32 root_permission.txt


测试cp -p的功能:

jessinio@:/mnt/nfs$ mkdir backup
jessinio@:/mnt/nfs$ sudo cp -rp /mnt/uss/sop /mnt/nfs/backup
cp: cannot open `/mnt/uss/sop/liangqingxi/group.txt' for reading: Permission denied

jessinio@:/mnt/nfs$ ls -al backup/sop/
total 28
drwxrwxr-x 7 root sop 4096 2009-04-20 17:40 .
drwxr-xr-x 3 jessinio jessinio 4096 2009-04-23 11:52 ..
drwxrwxr-x 2 liangqingxi 1009 4096 2009-04-17 16:58 liang
drwxrwxr-x 3 liangqingxi 1009 4096 2009-04-17 17:57 liang_create
drwxr-xr-x 2 liangqingxi over 4096 2009-04-20 11:04 liangqingxi
drwxrwxr-x 2 liangqingxi 1009 4096 2009-04-17 16:58 smb_write
drwxr-xr-x 2 liangqingxi sop 4096 2009-04-18 16:39 sop

文件的owner:group被保留了, 现在只是把上面的一个error了. 那又是为什么呢?

如下:
jessinio@:/mnt/nfs$ ls -al /mnt/uss/sop/liangqingxi/group.txt
-rwxrw---- 1 liangqingxi sop 0 2009-04-20 11:04 /mnt/uss/sop/liangqingxi/group.txt

mount的关系:
192.168.52.139:/tmp/smb on /mnt/local type nfs (rw,addr=192.168.52.139)
192.168.58.79:/data2a/data2a on /mnt/uss type nfs (rw,addr=192.168.58.79)
rpc_pipefs on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
192.168.52.96:/data0 on /mnt/nfs type nfs (rw,addr=192.168.52.96)

总体如下:
input = NFS::58.79:/mnt/uss
output = NFS::52.96:/mnt/nfs

因为input的别一个root被map的所以root就没有读的权限, 所以出错!

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.