首页 > 代码库 > Ubuntu下的用户和权限

Ubuntu下的用户和权限

一、基础

在某个目录下使用命令“ls -l”可以得到该目录下文件的详细信息如,如:

-rw-------  1 m    m     30509  7月  8 00:26 .xsession-errors.old
drwxr-xr-x  2 m    m      4096  4月 15 19:59 公共的/
drwxr-xr-x  2 m    m      4096  4月 15 19:59 模板/
drwxr-xr-x  2 m    m      4096  5月  9 09:23 视频/
drwxr-xr-x  3 m    m      4096  7月  2 16:56 图片/
drwxr-xr-x  7 m    m      4096  6月 30 17:09 文档/
drwxr-xr-x  2 m    m      4096  7月  6 12:36 下载/
drwxr-xr-x  2 m    m      4096  7月  6 12:37 音乐/
drwxr-xr-x  2 m    m      4096  7月  8 10:13 桌面/

在linux中,用户是这样被管理的:首先把所有用户分成一个个的组(group),每个组下面有若干用户(user)。于是对于一个文件或目录,它的的权限就有三部分,分别是user本身(u),组里人group(g),然后就是组外的人,称为others(o),这三部分合在一起为all(a)。

对应ls -l命令的输出,每行的前十个字符为该文件或目录的属性,第一个表示其文件类型,这个不多说;后面9个分为三组,每组三个字符,分别表示u、g、o三组的权限。linux下文件的权限一般分为三种:读(r)、写(w)、执行(x)。由上面可以看出,某组权限的三个字符位中,从前往后依次为读、写、执行,若有相应的权限就会显示该权限的表示字符,若没有则用“-”表示。

二、chmod命令

首先要po上一张表,我们已经知道每组有三个权限,每个权限位有两种状态,于是三个位组合起来就有8中状态,如下:

Octal     Binary        FileMode

0            000             ---

1            001             --x
2            010             -w-

3            011            -wx
4            100            r--
5            101            r-x
6            110            rw-
7            111            rwx

           这张表的目的是为了简化权限的表示,不必每次都写全部字母,用一个数字就可以代替。那么如何理解这张表有两种方式:

1、每个权限位都有两种状态,有或者没有,分别表示为0或1,那么权限的八种状态很自然的就是三个位的0、1组合,每个组合可以用一个八进制数字表示,就如表的最左边那一列所示;

2、我们赋予每种权限以不同的数值,r为4,w为2,x为1,-为0,那么每组所拥有的权限就是每种权限数值的和。

          总之,无论哪种方式,我们的目的就是得到表格最左边那一列的八进制数字。下面我们就用chmod命令来修改一个文件的权限。

最基本的: chmod  ???  filename   每个?代表一个组的权限。比如 chmod 777 filename 表示给filename的每一组都赋予全部的权限。

升级:  chmod  u/g/o/a  +/-/=  r/w/x  这种格式, 首先给出要赋予的组名称,如u,ug,go,uo,a等,如果不写则默认为a;然后给出运算符,+表示添加,-表示移除,=表示设置;最后就是权限的组合了,如r,rw,wx等。

例: chmod o + wx filename; chmod u - x filename; chmod + w filename; chmod go = r filename; 

如果要分别设置多个组的不同权限,需要用逗号隔开,如: chmod u - x, go = r filename 


三、umask命令(待续)

四、超级用户权限命令:su和sudo

         在linux下,只有一个超级用户root,拥有超级权限,其家目录就是/root。其他的都是普通用户,家目录是/home下用username命名的文件夹。Ubuntu有一个与众不同的特点,那就是初次 使用时,你无法作为root来登录系统,为什么会这样?这就要从系统的安装说起。对于其他Linux系统来说,一般在安装过程就设定root密码,这样用 户就能用它登录root帐户或使用su命令转换到超级用户身份。与之相反,Ubuntu默认安装时,并没有给root用户设置口令,也没有启用root帐 户。   root 用户和安装系统时的用户是两回事,除非安装时用户名取名 root。

1、su

       su用来切换当前用户到指定的用户,其格式为:su 参数 username。省略username时,默认为root。

       一般使用的参数有:-l (login),表示改变用户的同时也加载该用户的环境设置,可以简写为-,即省略l;-p(),表示不改变环境变量的设置;  -c (command),这个参数后面需要跟一个用单引号括起来的命令,表示切换到某个用户后只执行这一条命令,完毕后再回到原来的用户。

2、sudo

        sudo是Unix/Linux平台上的一个非常有用的工具,它允许系统管理员分配给普通用户一些合理的“权利”,让他们执行一些只有超级用户或其他特许用户才能完成的任务这样一来,就不仅减少了root用户的登陆次数和管理时间,也提高了系统安全性。sudo设计者的宗旨是:给用户尽可能少的权限但仍允许完成他们的工作。该命令为管理员提供了一种细颗粒度的访问控制方法,通过它人们既可以作为超级用户又可以作为其它类型的用户来访问系统。这样做的好处是,管理员能够在不告诉用户root密码的前提下,授予他们某些特定类型的超级用户权限,这正是许多系统管理员所梦寐以求的。
       我们可以简单的理解成:su获得稳定的超级用户(或其他用户权限),sudo获得暂时性的限制了的超级用户权限,一段时间之后会失效。 sudo 使用命令时不需要用户输入 root 的密码,只需要输入自己帐号的密码即可拥有 root 权限,当然,前提是该用户被允许使用 sudo 命令。

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

# User privilege specification

root ALL=(ALL) ALL

# Members of the admin group may gain root privileges

%admin ALL=(ALL) ALL

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

第 一项配置的作用,是允许root用户使用sudo命令变成系统中任何其它类型的用户。第二个配置规定,管理组中的所有成员都能以root的身份执行所有命 令。

接下来,我们用一个实例来详细解释/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这两个命令。需要指出的是,这里列出的命令一定要使用绝对路径。

要想以非root用户身份来运行命令,必须使用-u选项来指定想要作为的用户;否则的话,sudo会默认为root用户,比如要想以fred身份来执行ls命令,就应该这样:$ sudo -u fred ls /home/fred,这是和su命令不太一样的地方。