posts - 200, comments - 8, trackbacks - 0, articles - 0

linux笔记-----6------(linux用户管理)

Posted on 2012-08-27 11:08 鑫龙 阅读(358) 评论(0)  编辑 收藏 引用 所属分类: linux基础

    linux用户管理部分主要介绍5个内容,用户管理配置文件,用户管理命令,用户组管理命令,批量添加用户,用户授权。

一、用户配置文件

     上图就是我们需要掌握的一些配置文件,下面我们一一来解读:

(1)/etc/passwd 用户信息文件
在学习这个配置文件的时候,我们可以通过man 5 passwd来查看下这个配置文件的帮助,其中参数5是用来区分命令与配置文件的。从帮助文档中可以看到这个配置文件的每一行的一个统一格式:

然后我们more 一下这个配置文件,

看到这个与man得到的格式是匹配的,这样我们就一个一个弄清每一位的作用。
1.用户名与UID
     linux用户类型分为三种:超级用户(UID=0),伪用户(UID=1-499),普通用户(UID=500-60000)。可以看到通过用户名和用户的UID就可以确认一个用户的类型。root用户正是因为其UID为0,才获得了超级用户的权限,倘若你把你自己添加的用户的用户的UID也改为0,那便同样拥有的超级用户的权限。
     那伪用户什么呢?其实这些用户是并不能实际登陆的。伪用户有如下特征:

     总之,伪用户的出现是为了安全,防止坏人在获得某些程序或者服务的控制权以后。进行破坏,所以给了一个特殊的用户。而最后的普通用户,就是你自己添加的用户了。

2.密码
      密码很简单,这里其实并不是真正的密码,只是一个密码位。其实这里本来是密码的,只不过后来被转移到其他的地方去了(转移到/etc/shadow)。当然我们也可以把密码移回来,通过pwunconv与pwconv实现互操作。

      可以看到密码其实是被md5算法加密过的密文,并不是明文(md5sum)

3.GID 用户组ID
用户组是许多用户的集合。添加一个新用户,必须给予这个用户一个用户组,一般linux给新用户分配组有两种策略:要么是给所有新用户默认分配一个统一的组,要么创建一个与用户名想同名字的用户组,让该用户成为改组成员。centOS就是用的后一种。

4.注释性描述 宿主目录 命令解释器 (略)

(2)/etc/shadow 用户密码文件
同样man 5 shadow获得格式说明:


1.用户名和密码 
      这个文件就是保存用户真正密码的文件,如果把这个配置文件的某些用户的密码删掉,(ps:普通用户对这个配置文件是没有w权限的,只有用root用户修改),那么这些用户无需密码就可以登录系统。

2.最后一次修改时间
     这个是计算修改密码的那天与1970.1.1相差的天数

3.最小时间间隔和最大时间间隔、警告时间
    最小时间间隔设置的是两次更改密码的最小时间间隔(0是不限定)。最大的时间间隔就是如果在这个时间之内不改密码将无法登陆系统。当然我们不可能去计算还差多少天就要更改密码了,所以通过警告时间来告知用户,距离最大时间间隔还差多少天。

4.账号闲置时间、失效时间、标志 (略)

(3)/etc/skel 新用户配置文件目录
     这个目录中,全是隐藏的文件,大都是用来给用户登录时候使用的配置文件,如果你新添加一个用户,系统会把该目录中的文件拷贝到用户默认的宿主目录中去,以帮助新添加的用户此后登录系统。

(4)/etc/login.defs与/etc/useradd  用户默认配置文件
    通过查看这两个文件,我们发现,这其中描述的是关于/etc/passwd、/etc/shadow中默认配置的内容设定。也就是说/etc/passwd、/etc/shadow、还有登录的缺省信息是哪里来的呢?就是从这两个文件来的。我们可以通过修改这两个文件里面的内容来修改一些默认的设置。

(5)/etc/issue和/etc/motd
    这两个文件是用来设置每日消息的,但有什么不同呢?通过一个例子来说明。首先修改两个文件里的内容。


     可以看到效果,issue的每日消息,是在用户尚未成功登录系统时候时候就会显示的。而motd中的消息是在成功登录系统以后才会显示。

(6)手动添加用户专题
     在我们添加用户时候,最常用的方法就是使用useradd 用户名 添加一个用户,然后再用passwd 用户名 给该用户设置密码。但是useradd指令的原理是什么,背后到底做了什么事情呢?今天我们就手动来添加以下用户:
1.在/etc/passwd配置文件中添加用户

2.在/etc/shadow配置文件中添加用户

3.创建宿主目录(创建的宿主目录,忘记更改所有者了。。!囧!)

4.把/etc/skel目录下的文件拷贝到宿主目录中


(7)普通用户如何改密码
      通过ls -l /etc/passwd /etc/shadow 查看这两个配置文件,我们可以看

到,对于普通用户others是没有修改权限W的。那为什么普通用户能够修改密码呢?
     其实原因在于用户改密码的命令passwd,我们查看下passwd

可以看到在这个用户的权限中,有一个s标记,这不同于我们以往认识的,文件只有rwx这三种权限,那s到底是什么意思呢?其实我们把s称作为SetUID。

     SetUID只能是针对文件,针对目录无效。换句话说,passwd的拥有者是root,那么以后其他用户在执行passwd这个文件的时候,会突然"穿越时空"临时性的变成root用户,这样就可以修改密码了。那我们怎么给文件设置SetUID的权限呢?要知道除了SetUID还有SetGID,功能类似,只不过针对用户组。那么SetUID的命令是,chmod 4xxx 或者chmod u+s。SetGID是chmod 2xxx或者chmod g+s。下面我来做一个实验:

     可以看到我给touch命令了setUID权限,然后再切换用户到mysileng,通过mysileng用户创建了一个文件,但是我们发现,创建文件的owner即拥有者是root而不是mysileng用户,这就证明了setUID的功能。其实SetUID是很危险的,假若有坏人给VI授予了SetUID,那不是?。。。。。恐怖。。。~~
     为了安全,我们可以定时对所有的文件中拥有SetUID或者SetGID的文件进行查找,看有什么变化。命令是find / -perm -4000 -o -2000。0代表的是不限制。
     我们通过umask可以查看到缺省最高位是0,这一位除了可以是2,或者4之外,可以设置为1。那是这什么功能呢?一般我们叫着黏着位。黏着位用t来表示,这个功能只能针对目录来设置,并且是针对权限中的ohters用户,而且这个目录权限一定是777(rwx)。本来在没有黏着位的情况下,如果一个目录ohters的权限是是777,那么所有普通用户可以在这个文件夹中任意创建文件然后任意删除文件。
     但是在设置了黏着位以后,用户们在该文件夹中,只能删除自己创建的文件了。下面做一个实验:


(8)/etc/group与/etc/gshadow 用户组配置文件与用户组密码文件
       基本上与passwd和shadow文件的功能类似,以下是具体格式解释:



二、用户与用户组管理命令
(1)用户管理命令
1.添加用户

2.修改用户信息
   usermod -l 新用户名 -d 新的宿主目录 -g 用户组
   -l是更改用户名,-d是给更改宿主目录,-g是分配用户组
   usermod -G 用户名 用户组1 用户组2...
   -G把用户添加到多个组作用
3.删除用户
  userdel -r 用户名
  -r是删除宿主目录
  如果想手动删除一个用户:首先删除/etc/passwd、/etc/shadow中的用户信息,然后再/etc/group与/etc/gshadow中也删除用户信息,然后删除宿主目录,再通过find / -user 用户名 -ok rm {}\;删除以该用户是onwer的文件。
4.其他命令

pwch 可以检查文件的格式错误
vipw与vi passwd的不同之处在于,可以锁定文件,避免写混乱。
su 用户名 与 su -用户名的不同之处在于,改变用户是否也跟着改变环境上下文。


(2)用户组管理命令
1.添加用户组
   groupadd -g gid 组名
2.删除用户组
   groupdel 组名
3.修改用户组信息
   groupmod -n namm 组名 //修改组名
4.用户组密码修改命令
   直接gpasswd 用户组名就可以设置和更改组密码

5.其他命令


三、批量添加用户
     介绍两种方法批量添加:手动批量添加,shell脚本批量添加。现在只讲前一种,后一张在shell脚本章节再讲。那手动批量添加的步骤是:
1.通过vi撰写所需要添加的用户信息文件,格式与passwd类似(假设为user.info)
2.通过newusers导入需要添加的用户信息文件:newusers < user.info
3.再通过pwunconv取消shadow文件,并写一个关于用户的密码文件,假设为pass.info。格式为:新添加的用户名:用户密码
4.通过chpasswd命令导入新添加用户的密码:chpasswd < pass.info
5.最后调用pwconv重新生成shadow文件即可。

四、用户授权
      给用户授权是很重要的。通常我们使用对用户组的巧妙分配可以达到某些授权的目的,比如现在有一个需求:su命令是用来切换用户的,假若普通用户天天没事就切换root用户,那么不是早晚一天能被猜中密码,所以我们让一般人不具有执行的su命令的权限,而只有特定人可以su。那我们怎么做?
      首先我们创建一个用户组sugroup,然后把su文件给予权限4550,关键是要把ohers的x权限去掉。然后通过chgrp更改su命令的用户组,使sugroup变成su的用户组,这样普通的用户是没有执行的权力的,只有root和进入了sugroup的成员才可以执行su命令。

      当然除了通过用户组来授权之外,常用的授权工具sudo是我们要了解的重点。sudo软件可以让用户使用sudo授权的命令时临时升级成root用户(类似setid)。那么要简单学习sudo只需要学习命令visudo和配置问件/etc/sudoers。visudo是对etc/sudoers进行编辑的编辑命令,与vi不同的是,因为/etc/sudoers是被锁定的配置文件,所以用vi编辑是无效的,就必须使用visudo来编辑。那/etc/sudoers里面每行的格式是什么呢?
用户名(或用户组名)  主机地址=命令(命令的绝对路径)
这样就表示给了这个用户什么命令的权限,多条命令用,分割。sudo软件最方便的就是可以把权限精确到某条命令的某条参数。比如:

     可以当到第二行给予了csdn2这个用户马上关机的权限,那么它就只能执行这条命令并带这些参数,如果换了其他参数是没有权限执行的。
     执行sudo授予的命令要通过sudo 命来调用,而且调用后还要求验证当前用户密码来保证安全。其中命令有时候因为path问题可能要输入绝对路径。例如:

     此外可以通过sudo -l查看当前用户被sudo授权了那些命令。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理