昨天在机房呆了一天,忙活着部署hadoop分布式节点。在网上查了一些部署的资料,其中有一步是为所有的节点创建同样的用户'hadoop',并且加入到%admin组中。自己在做的时候提示%admin组不存在,其实Ubuntu系统中可以使用usermod username -g root的方式加入到管理组中,不晓得为什么自己的机器上使用%admin就提示找不到这个组。
Ubuntu默认把安装系统的用户加入到%admin组中,从而可以直接使用sudo来执行root权限的命令,但是自己阴差阳错之下把hadoop移除了%admin,从而无法执行sudo命令,提示不存在sudoers文件中了。所以解决的办法也很简单,只需要使用上面的命令把hadoop重新加入到管理组就可以了。问题虽然解决了,但是还是不甘心,决心去看看/etc/sudoers文件是个神马东东,于是打开文件:
点击(此处)折叠或打开
1. #
2. # This file MUST be edited with the 'visudo' command as root.
3. #
4. # Please consider adding local content in /etc/sudoers.d/ instead of
5. # directly modifying this file.
6. #
7. # See the man page for details on how to write a sudoers file.
8. #
9. Defaults env_reset
10. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
11.
12. # Host alias specification
13.
14. # User alias specification
15.
16. # Cmnd alias specification
17.
18. # User privilege specification
19. %root ALL=(ALL:ALL) ALL
20.
21. # Members of the admin group may gain root privileges
22. %admin ALL=(ALL) ALL
23. %hadoop ALL=(ALL) ALL
24. # Allow members of group sudo to execute any command
25. %sudo ALL=(ALL) ALL
26.
27. # See sudoers(5) for more information on "#include" directives:
28.
29. #includedir /etc/sudoers.d
上面黑体加粗的三个命令就是关键的三条策略,第一个User Privilege用来指定用户组root可以转变成任何其他的用户;第二个策略用来指定下列的admin组和hadoop组成员都可以使用sudo命令获取root权限;第三个策略则用来指定sudo命令可以执行的操作。对于一个具体的格式而言:
%hadoop ALL=(ALL) ALL
-%hadoop:针对hadoop组成员
-1st-ALL:适用的主机,尤其对于分布式系统来说,可以指定具体的主机名
-2nd-ALL:括号内的ALL表示hadoop组成员可以使用何种身份来执行sudo命令
-3rd-ALL:hadoop组成员可以扮演任何角色使用sudo命令执行哪些操作,比如/usr/bin/find, /usr/bin/rm等,ALL表示全部命令范围
了解了这些策略,可以直接在相应的项下添加自己的用户组,既可以赋予除了默认安装系统的用户之外的其他用户使用sudo命令的权限,也可以使用指定该用户使用sudo运行的操作种类来细化用户和组的管理,这里为了与用户名区分,%表示用户组名。
昨天遇到的另一问题是在为节点配置DNS的时候,通常的位置/etc/resolv.conf在Ubuntu下行不通了,即便配置了DNS,每次重启后都会被清空。其实文件头已经给出了提示:不要手动配置本文件,每次启动均会被重写。重写?没错,主要原因在于Ubuntu每次启动resolvconf服务都会使用/etc/resovlconf/resolv.conf.d/base文件内容重写该文件,因此解决DNS的问题有两种方法:
1. 在base文件中填写DNS名称;
2. 直接在网卡接口配置文件/etc/network/interfaces中填写DNS,在IP-NetMask-Gateway配置好后直接添加:
dns-nameservers DNS-IP
即可
两个问题虽然都不难,但是在不能上网的机房里还是让自己费了不少功夫。幸好昨天忙活了半天配好了网络,可以在工位上远程操作省下不少功夫了。