网络安全 频道

搞清linux的用户和组-基础篇

 例如,我们要对所有perl的脚本文件设定权限,对所有用户都可以读和执行,文件所有者还允许写许可,那么我们可以使用如下命令:

  chmod a+rx,u+w *.pl

  注意:如果要使用多个访问字符串,它们之间要用逗号隔开,各个许可字符串之间不允许有空格。正如上例所示。

  如果要修改目录中所有文件和子目录的权限属性,可以使用chmod提供的-R参数来递归修改。例如,下列命令将/www/site1目录及其下面的子目录的权限属性设定为所有者和组可读、写、执行,其它用户不可访问:

  chmod -R a+rwx,o-rwd /www/site1

  注意,不要轻易使用-R选项,这可能会带来安全隐患。

  使用字符串方便了理解,单输入那么多字母还是有点累,如果你对8进制有些概念的话,可以使用下面介绍的方法来做权限设置。

  ◆使用八进制数设置文件目录权限

  我们知道,在ls -l的输出中,文件权限表示为“-rw-rw-r--”,前一位只和是否为目录有关,其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和“r--”,“-”代表无效“0”,其它字符代表有效“1”,那么这个文件的权限就是“110”、“110”、“100”,把这个2进制串转换成对应的8进制数就是6、6、4,也就是说该文件的权限为664(三位八进制数)。我们也可以使用类似这种三位八进制数来设定文件授权,如上边两个例子,就也可以写为:

  chmod 755 *.pl

  chmod -R 770 /www/site1

  是不是很简洁?关键在于你能根据你需要设定的权限正确的选择八进制数(利用八进制数的二进制表示可以非常轻易的做到这一点)。

  ◆读、写、执行的权限说明

  1、所谓写的权限,也就是对文件修改和删除的权限。如果目录的写权限也对你开放了,则可以创建、删除或修改该目录下的任何文件或自目录——即使该文件和子目录并不属于你。

  2、对目录有只读许可的用户,不能用cd命令进入该目录;还必须同时有执行许可才可以进入该目录。

  3、必须同时拥有读和执行权限才可以使用ls这样的程序列出目录内容清单。

  4、只对目录有执行权限的用户,想访问该目录下的文件有读权限的文件,必须知道该文件名才可以访问。

  两个重要文件:passwd与group

  在linux的安全机制里,/etc/passwd与/etc/group这两个文件占着非常重要的地位。它们控制着linux的用户和组一些重要设置。

  ◆/etc/passwd文件说明

  下面是一个RHlinux里普通的passwd文件的例子:

  root:x:0:0:root:/root:/bin/bash

  bin:x:1:1:bin:/bin:

  daemon:x:2:2:daemon:/sbin:

  ……

  operator:x:11:0:operator:/root:

  games:x:12:100:games:/usr/games:

  gopher:x:13:30:gopher:/usr/lib/gopher-data:

  ftp:x:14:50:FTP User:/home/ftp:

  nobody:x:99:99:Nobody:/:

  xfs:x:43:43:X Font Server:/etc/X11/fs:/bin/false

  named:x:25:25:Named:/var/named:/bin/false

  postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

  lanf:x:500:500::/home/hujm:/bin/bash

  mysql:x:101:101:MySQL server:/var/lib/mysql:/bin/bash

  imnotroot:x:0:0::/home/imnotroot:/bin/bash

  在这个文件里只有一个普通帐号lanf。其它都是系统或系统服务的进程需要的帐号,包括我们非常熟悉的root这个超级用户。在passwd的文件里,每一行被冒号(":")分成7个部分,分别是:

  [用户名]:[密码]:[UID]:[GID]:[身份描述]:[主目录]:[登录shell]

  其中:

  ⒈[用户名]是passwd文件里各记录行唯一的有"唯一性"要求的域。也就是说每一行的第一个区域的内容都不能相同,其它区域就无所谓了。

  ⒉[密码]区域在以前,保存着一个经过不可逆的哈希算法进行DES加密的13位字符,但不包括单引号和冒号。这13位字符中,前两位是密钥,在加密的时候随机生成的。由于这个字符串不包括单引号,所以以前有一种不修改密码又禁止用户登录的方式就是在密码前面加一个单引号。值得注意的是,现在由于使用了shadow口令,在密码区域只有一个x字符。

  ⒊[UID]虽然是系统用来标志文件归属,确定各种权限的标志,但这个区域的内容并不要求唯一的。比较常见而又与安全问题相关的一个例子是有多个UID和GID均为0的用户帐号。注意到在该文件最后一行还有一个UID和GID为0的用户imnotroot,虽然它声称自己不是root,但是它却有和root完全相同的权限,因为系统并非根据[用户名],而是根据UID和GID来分用户的权力的。所以,这种情况无疑为系统埋下了安全的炸弹。但是,当imnorroot做锁定屏幕等操作的时候,如果它的密码和root的不一样,它将无法解锁,因为系统只是查到第一个UID为0的用户(自然是root)后,就不在往下查找了——它当UID也是唯一的。

  ⒋[GID]用户默认的组ID,这个ID可以在文件/etc/group里查到对应的组名。

  ⒌[身份描述]:就是用户的身份说明,默认的是无任何说明,可人工添加。

  ⒍[主目录]:用户的主目录,可以使用前面介绍的命令修改。

  ⒎[登录shell]:用户登录时系统提供的shell,请参考前面的有关内容。

  <注意>:[UID]和[GID]小于500的一般都是系统自己保留,不做普通用户和组的标识的,所以新增加的用户和组一般都是UID和GID大于500的。

  ◆/etc/group文件说明

  下面是RH的一个group文件的例子:

  root:x:0:root,hujm,hjm

  bin:x:1:root,bin,daemon

  daemon:x:2:root,bin,daemon

  sys:x:3:root,bin,adm

  adm:x:4:root,adm,daemon

  tty:x:5:

  disk:x:6:root

  lp:x:7:daemon,lp

  mem:x:8:

  kmem:x:9:

  wheel:x:10:root

  mail:x:12:mail

  news:x:13:news

  uucp:x:14:uucp

  ……

  hujm:x:503:root,mynoshell,hjm

  mysql:x:101:

  mynoshell:x:505:

  ftpusers:x:506:

  它总共分四个部分:

  [组名]:[密码域]:[GID]:[组员列表]

  意思非常明显,需要说明一下的是,由于组一般都不用密码保护,所以虽然看起来密码域有个X字符,其实那只表示使用了SHADOW(对应文件为gshadow)。组员列表用逗号分隔各个帐号。另外,一个组的组员如果默认登录组就是它的话,那么在组员列表里将不显示这个组员的帐号,例如用如下命令增加的用户:

  useradd -g ftpusers floatboat

  在/etc/group文件里ftpusers的组员列表将不显示这个组员(真是失败),而只是在passwd文件中的GID被设置为506。而使用如下命令:

  usermod -G ftpusers,mysql,webusers floatboat

  就可以看见相关的组后边加上了floatboat帐号。当然,你可以直接用vi来直接编辑这个文件。

  group文件和passwd文件是通过GID联系在一起的,这有点象关系数据库。根据passwd文件中一个帐户的GID,可以在group文件中找到对应的组名。如果采用了用户私有组机制的话,那么一般新增一个帐号,就会有对应的一个与帐号同名的组增加到group文件中。虽然这时passwd文件中具有唯一性的[用户名]字段和group文件中具有唯一性的[组名]字段一样,并不代表着它们是通过这两个字段形成一一对应的关系的。千万别忘记,系统对数字(UID,GID)更加敏感^_^。

  再有一点应该注意,你统计一个组的组成员的时候,千万别只记得看组成员列表哦,还应该查找默认登录组也是这个组的用户——它们可不一定在列表里。

  〈提示〉新组的增加可以使用groupadd newgroupname。

http://netadmin.77169.com/HTML/20040312221100.html

0
相关文章