Ubuntu的sudo与su命令使用与开启root账户 2012-04-30

今天介绍两个Ubuntu命令: sudo 和 su

sudo意思就是super-user do,让当前用户暂时以管理员的身份root来执行这条命令。

su是用来改变当前用户的,su root,就是将当前用户切换为root,用了su root以后,下面全部的命令就能够不用打sudo了,由于当前用户已是管理员root了。

Ubuntu有一个不同凡响的特色,那就是初次 使用时,你没法做为root来登陆系统,为何会这样?这就要从系统的安装提及。对于其余Linux系统来讲,通常在安装过程就设定root密码,这样用 户就能用它登陆root账户或使用su命令转换到超级用户身份。与之相反,Ubuntu默认安装时,并无给root用户设置口令,也没有启用root账 户。问题是要想做为root用户来运行命令该怎么办呢?不要紧,咱们可使用sudo命令达此目的。

sudo是linux下经常使用的容许普 通用户使用超级用户权限的工具,该命令为管理员提供了一种细颗粒度的访问控制方法,经过它人们既能够做为超级用户又能够做为其它类型的用户来访问系统。这 样作的好处是,管理员可以在不告诉用户root密码的前提下,授予他们某些特定类型的超级用户权限,这正是许多系统管理员所求之不得的。

1.sudo的缺省配置

默 认时,Ubuntu为sudo提供了一个基本的配置,该配置保存在/etc目录下的sudoers文件中。在修改该配置文件时,务必使用visudo工具 来进行编辑,由于该工具会自动对配置语法进行严格检查,若是发现错误,在保存退出时给出警告,并提示你哪段配置出错,从而确保该配置文件的正确性。相反, 若是使用其它的文本编辑程序的话,一旦出错,就会给系统带来严重的后果。下面给出的是Ubuntu默认的/etc/sudoers文件内容:# User privilege specificationroot ALL=(ALL) ALL# Members of the admin group may gain root privileges%admin ALL=(ALL) ALL

下面对以上配置作简要说明:

第 一项配置的做用,是容许root用户使用sudo命令变成系统中任何其它类型的用户。第二个配置规定,管理组中的全部成员都能以root的身份执行全部命 令。所以,在默认安装的Ubuntu系统中,要想做为root身份来执行命令的话,只要在sudo后面跟上欲执行的命令便可。下面用一个例子加以说明,如 果您想执行apt-get update的话,应当在命令行中键入如下内容:$ sudo apt-get update

2.配置文件语法详解

接下来,咱们用一个实例来详细解释/etc/sudoers文件的配置语法,请看下面的例子:jorge ALL=(root) /usr/bin/find, /bin/rm

上面的第一栏规定它的适用对象:用户或组,就本例来讲,它是用户jorge。此外,由于系统中的组和用户能够重名,要想指定该规则的适用对象是组而非用户的话,组对象的名称必定要用百分号%开头。

第二栏指定该规则的适用主机。当咱们在多个系统之间部署sudo环境时,这一栏格外有用,这里的ALL表明全部主机。可是,对于桌面系统或不想将sudo部署到多个系统的状况,这一栏就换成相应的主机名。

第三栏的值放在括号内,指出第一栏规定的用户可以以何种身份来执行命令。本例中该值设为root,这意味着用户jorge可以以root用户的身份来运行后面列出的命令。该值也能够设成通配符ALL,jorge便能做为系统中的任何用户来执行列出的命令了。

最 后一栏(即/usr/bin/find, /bin/rm)是使用逗号分开的命令表,这些命令能被第一栏规定的用户以第三栏指出的身份来运行它们。本例中,该配置容许jorge做为超级用户运行 /usr/bin/find和 /bin/rm这两个命令。须要指出的是,这里列出的命令必定要使用绝对路径。

3.sudo命令的使用方法

如今的问题是,用户jorge怎样利用分配给他的权限呢?其实很简单,只要在命令行模式下使用sudo命令

加上他想运行的程序就能够了,好比:jorge @Ubuntu :~$ sudo find . ! -name '*.avi' -exec rm -f \\{\\} \\;

假若jorge企图执行/etc/sudoers文件规定以外的程序(好比find 或 rm)的话,sudo命令便会以失败而了结,并给出警告信息,指出他无权以超级用户身份来运行这些命令。

要想以非root用户身份来运行命令,必须使用-u选项来指定想要做为的用户;不然的话,sudo会默认为root用户,好比要想以fred身份来执行ls命令,就应该这样:$ sudo -u fred ls /home/fred

就 像您看到的那样,咱们能够利用这些规则为系统建立具体的角色。例如,要让一个组负责账户管理,你一方面不想让这些用户具有彻底的root访问权限,另外一方 面还得让他们具备增长和删除用户的权利,那么咱们能够在系统上建立一个名为accounts的组,而后把那些用户添加到这个组里。以后,再使用 visudo为/etc/sudoers添加下列内容:%accounts ALL=(root) /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/usermod

如今好了,accounts组中的任何成员都能运行useradd、userdel和usermod命令了。若是过一段时间后,您发现该角色还须要其余工具,只要在该表的尾部将其添上就好了。这样真是方便极了!

需 要注意的是,当咱们为用户定义能够运行的命令时,必须使用完整的命令路径。这样作是彻底出于安全的考虑,若是咱们给出的命令只是简单的userad而非 /usr/sbin/useradd,那么用户有可能建立一个他本身的脚本,也叫作userad,而后放在它的本地路径中,如此一来他就可以经过这个名为 useradd的本地脚本,做为root来执行任何他想要的命令了。这是至关危险的!

sudo命令的另外一个便捷的功能,是它可以指出哪些 命令在执行时不须要输入密码。这颇有用,尤为是在非交互式脚本中以超级用户的身份来运行某些命令的时候。例如,想要让用户做为超级用户没必要输入密码就能执 行kill命令,以便用户能马上杀死一个失控的进程。为此,在命令行前边加上NOPASSWD:属性便可。例如,能够在/etc/sudoers文件中加 上下面一行,从而让jorge得到这种权力:jorge ALL=(root) NOPASSWD: /bin/kill, /usr/bin/killall

这样一来,jorge就能运行如下命令,做为root用户来杀死失控的rm进程了。jorge @Ubuntu :~$ sudo killall rm

6.如何启用root账户

经过以上介绍,咱们发现sudo的确很好用,可是若是您早就习惯了在root下工做,想回味一下过去的感受该怎么办呢?很简单,只要为root设置一个root密码就好了:$ sudo passwd root

好了,如今您能直接做为root登陆了。
相关文章
相关标签/搜索