【用户不在sudoers文件中】问题解决

来源:互联网 发布:sql2000还原数据库失败 编辑:程序博客网 时间:2024/06/06 03:54
  昨天在机房呆了一天,忙活着部署hadoop分布式节点。在网上查了一些部署的资料,其中有一步是为所有的节点创建同样的用户'hadoop',并且加入到%admin组中。自己在做的时候提示%admin组不存在,其实Ubuntu系统中可以使用usermod username -g root的方式加入到管理组中,不晓得为什么自己的机器上使用%admin就提示找不到这个组。

     Ubuntu默认把安装系统的用户加入到%admin组中,从而可以直接使用sudo来执行root权限的命令,但是自己阴差阳错之下把hadoop移除了%admin,从而无法执行sudo命令,提示不存在sudoers文件中了。所以解决的办法也很简单,只需要使用上面的命令把hadoop重新加入到管理组就可以了。问题虽然解决了,但是还是不甘心,决心去看看/etc/sudoers文件是个神马东东,于是打开文件



    #    # This file MUST be edited with the 'visudo' command as root.    #    # Please consider adding local content in /etc/sudoers.d/ instead of    # directly modifying this file.    #    # See the man page for details on how to write a sudoers file.    #    Defaults    env_reset    Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"    # Host alias specification    # User alias specification    # Cmnd alias specification    # <span style="color:#FF0000;">User privilege specification    %root    ALL=(ALL:ALL) ALL</span>    # <span style="color:#FF0000;">Members of the admin group may gain root privileges    %admin ALL=(ALL) ALL    %hadoop ALL=(ALL) ALL    # Allow members of group sudo to execute any command    %sudo    ALL=(ALL) ALL</span>    # See sudoers(5) for more information on "#include" directives:    #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
即可

0 0