Linux中用户权限与所属组问题

来源:互联网 发布:java常用的分布式框架 编辑:程序博客网 时间:2024/05/29 13:41

Linux系统中创建一个hadoop用户,在/etc/passwd路径下有该用户的信息:

hadoop:x:500:500::/home/hadoop:/bin/bash

对于一个具体的用户,所属用户组主要包含两类:初始用户组和有效用户组。上述第四个字段即为hadoop用户的初始用户组的GID,即当用户登录系统,立刻就拥有这个用户组的相关权限,这只是代表该用户对已有文件的权限。而新创建的文件所属组就跟有效用户组有关系了,可以通过命令查看和修改用户的有效用户组,而查询结果第一个即是。

groups                          查看用户有效用户组newgrp  testgroup               把当前用户的有效用户组修改为testgroupuseradd -g testgroup test01     创建用户test01时,为其指定初始用户组testgroupusermod -g testgroup test01     创建用户test01后,修改其初始用户组为testgroup

注:修改初始用户组的命令需要在root下执行,并且要求该的用户不能是登录状态

例如,通过命令gpasswd -a hadoop testgroup把当前用户hadoop加入testgroup用户组中,用户hadoop就同时拥有hadoop和testgroup两个用户组的权限,当前初始用户组为hadoop,有效用户组也为hadoop,这时创建一个新的文件,文件所属组为当前有效用户组,即为hadoop:

drwxrwxr-x.  2 hadoop hadoop    4096 Sep  2 15:38 abc

上述文件abc的所有者为hadoop,所属组为hadoop(有效用户组)。当通过newgrp命令修改用户hadoop的有效用户组为testgroup后,创建的文件如下:

drwxrwxr-x.  2 hadoop testgroup  4096 Sep  2 15:38 xyz

这时用户hadoop的有效用户组为testgroup,创建文件xyz的所属组为testgroup(注:通过命令newgrp修改用户的有效用户组时会新打开一个shell,在该shell中创建的文件的所属组均为新的有效用户组,但当通过exit从该shell中退出后,用户的有效用户组又变回原来的)。

问题:在Hadoop集群中,由于搭建Hadoop集群时使用的是用户hadoop,hadoop初始用户组和是有效用户组均为hadoop,故其创建的文件的所属组为hadoop。在集群中运行hive时,会在/home/hadoop/tmp/hive/log路径下创建文件hive.log,该文件的所属组为当前用户的有效用户组,比如hadoop,文件信息如下:

-rw-rw-r--. 1 hadoop hadoop   32916 Sep  2 14:19 hive.log   以hadoop用户运行hive创建的文件

在上篇文章中,创建了一批用户test01、test02…,并把它们加入到了用户组hadoop中,但它们的初始用户组和有效用户组均为其本身,例如以用户test01登录运行hive,产生的文件如下:

-rw-rw-r--. 1 test01 test01 32916 Sep  2 14:19 hive.log 以test01用户运行hive创建的文件

这时,再用hadoop用户登录并运行hive时会出现异常,这是因为文件hive.log的所属组为test01,而hadoop用户没有该文件的写权限。解决这个问题的方法如下:

方法一:在test01用户下通过命令修改其有效用户组为hadoop,然后再运行hive,这时的hive.log:

-rw-rw-r--. 1 test01 hadoop 32916 Sep  2 14:19 hive.log 

此时,该文件的所属组为hadoop,只要是用户组hadoop下的用户,均对其有写权限,问题的到解决。但每次都要修改有效用户组,比较麻烦。

方法二:通过命令修改用户test01的初始用户组为hadoop,即可得到上述结果。

方法三:在创建用户test01时便为其指定初始用户组为hadoop。

PS:有时修改用户的初始用户组后,仍报异常,这是因为用户test01运行hive时创建的文件hive.log的权限如下:

-rw-r--r--. 1 test01 hadoop 32916 Sep  2 14:19 hive.log

即所属组不具有写权限,可以通过命令umask 002为用户指定默认文件权限。

上述内容简单介绍了用户的初始用户组和有效用户组,并解决了Hadoop集群运行hive异常的问题,但这种解决方法导致不同的用户创建的所有文件的所属组均为hadoop,即不同的用户可以操作其他用户的文件,安全性有待考量。

0 0