Linux的用户和组的管理

16 篇文章 0 订阅
10 篇文章 0 订阅
Linux的用户和组的管理
----------------------------------------------------------------------------------------------------
Linux是一个多用户系统,因此必须给每个登录到系统的用户分配帐号、设置密码,并设置相应的权限。这样才能保证系统的安全。

一、Linux 的账号与群组

管理员的工作中,相当重要的一环就是『管理账号』啦!因为整个系统都是你在管理的,
并且所有的一般用户的申请,都必须要透过你的协助才行!所以你就必须要了解一下如何管理好一个网站的账号管理啦! 在管理
Linux 主机的账号时,我们必须先来了解一下 Linux 到底是如何辨别每一个使用者的!
(一)   
使用者识别: UID(用户ID)
与 GID(组ID)
虽然我们登入 Linux 主机的时候,输入的是我们的账号,但是,其实 Linux 主机并不会直接认识你的『账号名称』的,他仅认识
ID 啊~ID 就是一组号码啦~ 主机对于数字比较有概念的,账号只是为了让人们容易记忆而已。 而您的 ID 与账号的对应就在 /etc/passwd 当中哩。
例:
[root@linux ~]# vi /etc/passwd
.....(前面省略).....
sai:x:501:501::/home/sai:/bin/bash    -----sai账号的UID:501,GID:501
(二)用户账号文件/etc/passwd内容的解释
/etc/passwd的每一行都代表一个账号,其内容如下例:

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

  其中使用『:』分隔开为七个部分,其所代表的含义是:
账号名称:就是账号名称啦!对应 UID 用的!例如 root 就是预设的系统管理员的账号名称;密码:早期的 Unix
     系统的密码是放在这个文件中的, 但是因为这个文件的属性为:rw-r—r--(即:是所有的用户都能够读取),所以,这样一来很容易造成数据的被窃取, 因此后来就将这个字段的密码数据存放到
     /etc/shadow 中了,关于 /etc/shadow 这一部份等一下再说。而这里你会看到一个 x;UID:这个就是使用者识别码
     (ID) 啰!通常 Linux 对于 UID 有几个限制需要说给您了解一下:

  
  id 范围
  
  
  该 ID 使用者特性
  


  
  0
  
  
  当 UID 是 0 时,代表这个账号是『系统管理员』!所以当你要作另一个系统管理员账号时, 你可以将该账号的
  UID 改成 0 即可;这也就是说,一部系统上面的系统管理员不见得只有 root 喔! 不过,不很建议有多个账号的 UID 是 0 啦~
  


  
  1~499
  
  
  保留给系统使用的 ID,其实 1~65534 之间的账号并没有不同, 也就是除了 0 之外,其它的 UID 并没有不一样,预设
  500 以下给系统作为保留账号只是一个习惯。这样的好处是,以有名的 DNS 服务器的启动服务『 named 』为例,这个程序的预设所有人 named 的账号
  UID 是 25 ,当有其它的账号同样是 25 时,很可能会造成系统的一些小问题!为了杜绝这样的问题,建议保留 500 以前的 UID 给系统吧!
  不过,一般来说, 1~99 会保留给系统预设的账号,另外 100~499 则保留给一些服务来使用。
  


  
  500~65535
  
  
  给一般使用者用的。事实上,目前的 linux 核心 (2.6.x 版)已经可以支持到 4294967295
  (2^32-1) 这么大的 UID 号码喔!
  

上面这样说明可以了解了吗?是的, UID 为 0 的时候,就是 root 呦!所以请特别留意一下你的 /etc/passwd 档案!
GID:这个与
     /etc/group 有关!其实 /etc/group 的观念与 /etc/passwd 差不多,只是他是用来规范 group 的而已!使用者信息说明栏:主目录:这是使用者的主目录,以上面为例, root 的主目录在 /root ,所以当 root 登入之后,就会立刻跑到 /root 里头啦!一般普通用户的主目录在
     /home中,如你的账户名为aa,则主目录就是/home/aa了。Shell:用户所使用的shell;所谓的 shell 是用来沟通人类下达的指令与硬件之间真正动作的界面!我们通常使用
     /bin/bash 这个 shell 来进行指令的下达!
(三)如何登入 Linux 取得 UID/GID
好了,那么我们再来谈一谈,到底我们是怎样登入 Linux 主机的呢? 当在login 的画面让你输入账号与密码之后,
Linux 会:
先找寻
     /etc/passwd 里面是否有这个账号?如果没有则跳出,如果有的话则将该账号对应的 UID ( User ID )与 GID ( Group
     ID )读出来,另外,该账号的主目录与 shell 设定也一并读出;再来则是核对密码表啦!这时 Linux 会进入 /etc/shadow 里面找出对应的账号与 UID,然后核对一下你刚刚输入的密码与里头的密码是否相符?如果一切都 OK 的话,就进入
     Shell 控管的阶段啰!
大致上的情况就像这样,所以呢,当你要登入你的 Linux 主机的时候,那个 /etc/passwd 与 /etc/shadow 就必须要让系统读取啦,(这也是很多攻击者会将特殊账号写到
/etc/passwd 里头去的缘故!)所以呢,如果你要备份 Linux 的系统的账号的话, 那么这两个文件就一定需要备份才行呦!
(四)用户密码文件/etc/shadow 内容的解释
上面约略提到,由于每个程序都需要取得 uid 与 gid 来判断权限的问题,所以, /etc/passwd 的权限必须要设定成为
-rw-r--r-- 这样的权限,在这样的情况下, 使用者的密码不就任何人都可以看到吗?即使这个文件内的密码栏是加密的, 坏心肠的朋友也可能利用暴力破解法去找出您的密码数据......
因为这样的关系,所以后来发展出将密码移动到 /etc/shadow文件,并设权限为只有root用户或读,而且还加入很多的密码限制参数在 /etc/shadow
里头呢!我们先来了解一下这个档案的构造吧! /etc/shadow 文件大体如下:

  
  root:$1$i9Ejldjfjio389u9sjl$jljsoi45QE/:12959:0:99999:7:::
  bin:*:12959:0:99999:7:::
  daemon:*:12959:0:99999:7:::
  adm:*:12959:0:99999:7:::
  

基本上, shadow 同样以『:』作为分隔符,各字段的用途是这样的:
账号名称:由于密码也需要与账号对应啊~因此, 这个档案的第一栏就是账号,必须要与 /etc/passwd 相同才行!密码:这个才是真正的密码,而且是经过加密的密码啦! 你只会看到有一些特殊符号的字母就是了!另外,
     如果是在密码栏的第一个字符为『 * 』或者是『 ! 』,表示这个账号并不会被用来登入的意思。 所以万一哪一天你的某个使用者不乖时,可以先在这个档案中,将他的密码字段的最前面多加一个
     * !嘿嘿!他就无法使用该账号啰!直到他变乖了,再给他启用啊!最近更动密码的日期:这个字段记录了『更动密码的那一天』的日期,
     不过,很奇怪呀!在我的例子中怎么会是 12959 呢?呵呵,这个是因为计算 Linux 日期的时间是以 1970 年
     1 月 1 日作为 1 ,而 1971 年 1 月 1 日则为 366 啦! 所以这个日期是累加的呢!得注意一下这个资料呦!那么最近的 2005 年
     1 月 1 日就是 12784 啦,了解了吗?密码不可被更动的天数: 第四个字段记录了这个账号的密码需要经过几天才可以被变更!如果是 0 的话, 表示密码随时可以更动的意思。这的限制是为了怕密码被某些人一改再改而设计的!如果设定为 20 天的话,那么当你设定了密码之后,
     20 天之内都无法改变这个密码呦!密码需要重新变更的天数: 由于害怕密码被某些『有心人士』窃取而危害到整个系统的安全,所以有了这个字段的设计。
     你必须要在这个时间之内重新设定你的密码,否则这个账号将会暂时失效。 而如果像上面的 99999 的话,那就表示,呵呵,密码不需要重新输入啦!
     不过,如果是为了安全性,最好可以设定一段时间之后,严格要求使用者变更密码呢!密码需要变更期限前的警告期限:当账号的密码失效期限快要到的时候,
     就是上面那个『必须变更密码』的那个时间时, 系统会依据这个字段的设定,发出『警告』言论给这个账号,提醒他『再过 n
     天你的密码就要失效了,请尽快重新设定你的密码呦!』,如上面的例子,则是密码到期之前的 7 天之内,系统会警告该用户。密码过期的恕限时间:如果用户过了警告期限没有重新输入密码,
     使得密码失效了,也就是说,你在『必须变更密码的期限前,并没有变更你的密码!』 那么该组密码就称为『失效的密码』啰~怎么办?没关系,还有这个字段的天数设计啊~
     意思就是说,当密码失效后,你还可以用这个密码在 n 天内进行登入的意思。 而如果在这个天数后还是没有变更密码,呵呵!那么您的账号就失效了!无法登入!
     账号失效日期:这个日期跟第三个字段一样,都是使用 1970 年以来的总日数设定。这个字段表示: 这个账号在此字段规定的日期之后,将无法再使用。 这个字段会被使用通常应该是在『收费服务』的系统中,
     你可以规定一个日期让该账号不能再使用啦!保留:最后一个字段是保留的,看以后有没有新功能加入。
举个例子来说好了,假如我的 dmtsai 这个使用者的密码栏如下所示:

  
  dmtsai:$1$8zdAKdfC$XDa8eSus2I7nQL7UjRsIy/:13025:5:60:7:2:13125:
  

这表示什么呢?要注意的是, 13025 是 2005/08/30 ,所以, dmtsai 这个使用者他的密码相关意义是:
最近一次更动密码的日期是 2005/08/30 (13025); 能够修改密码的时间是
     5 天以后,也就是 2005/09/04 以前 dmtsai 不能修改自己的密码; 如果使用者还是尝试要更动自己的密码,系统就会出现这样的讯息:

  
  You must wait longer to change your password
  passwd: Authentication token manipulation error
  

使用者必须要在
     2005/09/04 到 2005/10/29 之间的 60 天限制内去修改自己的密码,若 2005/10/29 之后还是没有变更密码时,该账号就会宣告失效;
     如果使用者一直没有更改密码,那么在 2005/10/29 之前的 7 天内,系统会警告 dmtsai 应该修改密码的相关信息;例如当 dmtsai 登入时,系统会主动提示如下的信息:

  
  Warning: your password will expire in 5 days
  

如果该账号一直到
     2005/10/29 都没有更改密码,由于还有两天的恕限时间,因此, dmtsai 还是可以在 2005/10/31 以前继续登入; 如果使用者在
     2005/10/29 以前变更过密码,那么那个 13025 的日期就会跟着改变,因此, 所有的限制日期也会跟着相对变动喔!^_^ 无论使用者如何动作,到了 13125 ,大约是 2005/12/8 左右,该账号就失效了~
(五)组的管理:
认识了账号相关的两个档案
/etc/passwd 与 /etc/shadow 之后,您或许还是会觉得奇怪, 那么群组的设定档在哪里?还有,在 /etc/passwd 的第四栏不是所谓的
GID 吗?那又是啥? 呵呵~此时就需要了解 /etc/group 与/etc/gshadow 啰~
1、组记录文件/etc/group
这个文件就是在记录 GID 与群组名称的对应了~我的 /etc/group 内容有点像这样:

  
  root:x:0:root
  bin:x:1:root,bin,daemon
  daemon:x:2:root,bin,daemon
  sys:x:3:root,bin,adm
  

也是以冒号『:』作为字段的分隔符,共分为四栏,每一字段的意义是:
群组名称:就是群组名称啦!

群组密码:通常不需要设定,因为我们很少使用到群组登入! 不过,同样的,密码也是被纪录在 /etc/gshadow 当中啰!

GID:就是群组的 ID 啊~

支持的账号名称:加入这个群组里面的所有的账号, 我们知道,一个使用者是可以加入多个群组的。举例来说,如果我想要让 dmtsai 也加入 root 这个群组,那么在第一行的最后面加上『,dmtsai』,注意不要有空格, 使成为『
     root:x:0:root,dmtsai』就可以啰~
比较重要的特色在于第四栏啦,因为每个使用者都可以拥有多个支持的群组,
这就好比在学校念书的时候,我们可以加入多个社团一样! ^_^。 不过这里您或许会觉得奇怪的,那就是:『假如我同时加入多个群组,
那么我在作业的时候,到底是以那个群组为准?』底下我们就来谈一谈这个『有效群组』的概念。
·
有效群组(effective group)与初始群组(initial group)
还记得每个使用者在他的 /etc/passwd 里面的第四栏有所谓的 GID 吧?那个 GID 就是所谓的『初始群组
( initial group ) 』了!也就是说,当使用者一登入系统,立刻就拥有这个群组的相关权限的意思。 举例来说,我们上面提到 dmtsai 这个使用者的
/etc/passwd 与 /etc/group 还有 /etc/gshadow 相关的内容如下:

  
  [root@linux ~]# grep dmtsai /etc/passwd /etc/group
  /etc/gshadow
  /etc/passwd:dmtsai:x:501:501::/home/dmtsai:/bin/bash
  /etc/group:users:x:100:dmtsai
  /etc/group:dmtsai:x:501:
  /etc/gshadow:users:::dmtsai
  /etc/gshadow:dmtsai:!::
  

仔细看到上面这个表格,在 /etc/passwd 里面,dmtsai 这个使用者所属的群组为 GID=501 , 也就是
/etc/group 里头 dmtsai 那个群组啦~因为这是 initial group ,所以, 使用者一登入就会主动取得,不需要在 /etc/group
的第四个字段写入该账号的!
但是非 initial group 的其它群组可就不同了。举上面这个例子来说,我将 dmtsai 加入 users 这个群组当中,由于 users 这个群组并非是
dmtsai 的初始群组,因此, 我必须要在 /etc/group 这个档案中,找到 users 那一行,并且将 dmtsai 这个账号加入第四栏, 这样
dmtsai 才能够支持 users 这个群组啊。
那么在这个例子当中,因为我的 dmtsai 这个账号同时支持 dmtsai 与 users 这两个群组, 因此,在读取/写入/执行档案时,针对群组部分,只要是
users 与 dmtsai 这两个群组拥有的功能, 我 dmtsai 这个使用者都能够拥有喔!不过,这是针对已经存在的档案而言, 如果今天我要建立一个新的档案或者是新的目录,请问一下,新档案的群组是
dmtsai 还是 users ? 呵呵!这就得要检查一下当时的有效群组了 (effective group)。
如果我以 dmtsai 这个使用者的身份登入后,该如何知道我所有支持的群组呢? 很简单啊,直接输入 groups 就可以了!注意喔,是
groups 有加 s 呢!结果像这样:

  
  [dmtsai@linux ~]$ groups
  dmtsai users
  

在这个输出的讯息中,我知道我同时属于 dmtsai 及 users 这个两个群组,而且, 第一个输出的群组即为有效群组
(effective group) 了。 也就是说,我的有效群组为 dmtsai 啦~此时,如果我以 mkdir 去建立一个子目录,例如: mkdir
test ,那么这个子目录的拥有者为 dmtsai ,而且群组也是 dmtsai 的啦。 这样是否可以了解什么是有效群组了?

2、 /etc/gshadow 文件解释
我的 /etc/gshadow 的内容有点像这样:

  
  root:::root
  bin:::root,bin,daemon
  daemon:::root,bin,daemon
  sys:::root,bin,adm
  

同样还是使用冒号『:』来作为字段的分隔字符,而且你会发现,这个档案几乎与 /etc/group 一模一样啊!是这样没错~不过,要注意的大概就是第二个字段吧~第二个字段是密码栏,
如果密码栏上面是『!』时,表示该群组不能使用密码来登入呢! 至于第四个字段也就是支持的账号名称啰~
群组名称 密码栏,同样的,开头为
     ! 表示无法登入; 群组管理员的账号 该群组的所属账号 (与
     /etc/group 内容相同!)

二、账号管理命令的使用
(一)用户管理命令:
1、增加用户帐号:useradd 命令
该命令做了下面几件事:
1)在 /etc/passwd,/etc/shadow文件中增添了一行记录;
2)在 /home 目录下创建新用户的主目录,并将
/etc/skel 目录中的文件拷贝到该目录中去;但是使用了该命令后,新建的用户暂时还无法登录,因为还没有为该用户设置口令,需要再用 passwd 命令为其设置口令后,才能登录。用户的
UID 和 GID 是 useradd 自动选取的,它是将 /etc/passwd 文件中的 UID 加 1,将 etc/group 文件中的 GID 加 1。
范例一:完全参考默认值建立一个使用者,名称为 vbird1
[root@linux ~]# useradd vbird1

注意:此时的默认值参数在/etc/login.defs和/etc/default/useradd文件中设置
(1)/etc/login.defs文件内容
MAIL_DIR      
/var/spool/mail      

PASS_MAX_DAYS  
99999         
PASS_MIN_DAYS   0              
PASS_MIN_LEN    5              
PASS_WARN_AGE   7              

UID_MIN         500   
UID_MAX       60000   
GID_MIN         500   
GID_MAX       60000   

CREATE_HOME     yes  
(2)/etc/default/useradd文件内容
GROUP=100              
HOME=/home            
INACTIVE=-1            
EXPIRE=               
SHELL=/bin/bash        
SKEL=/etc/skel      
范例二:我知道我的系统当中有个群组名称为 users ,且 UID 700 并不存在,
        请用这两个参数给予
vbird2 建立一个账号!
[root@linux ~]# useradd -u 700 -g users vbird2

范例三:建立一个系统账号,名称为 vbird3
[root@linux ~]# usradd -r vbird3

2、设置用户口令:passwd
刚刚我们讲到了,使用 useradd 建立了账号之后,在预设的情况下,该账号是暂时被封锁的, 也就是说,该账号是无法登入的,你可以去瞧一瞧
/etc/shadow 内的第二个字段就晓得啰~ 那该如何是好?怕什么?直接给他设定新密码就好了嘛!对吧~设定密码就使用 passwd 啰!
范例一:如果 root 要帮 dmtsai 修改密码时?
[root@linux ~]# passwd dmtsai
Changing password for user dmtsai.
New UNIX password:
BAD PASSWORD: it is based on a dictionary word  
Retype new UNIX password:
passwd: all authentication tokens updated
successfully.  

3、修改用户账户属性:usermod
在 useradd 的时候加入了错误的设定数据。或者是,在使用 useradd 后,发现某些地方还可以进行细部修改。
此时,当然我们可以直接到 /etc/passwd 或 /etc/shadow 去修改相对应字段的数据, 不过,Linux 也有提供相关的指令让大家来进行账号相关数据的微调呢~那就是
usermod 啰~

范例一:修改使用者 dmtsai 的说明栏,加上『VBird's test』的说明。
[root@linux ~]# usermod -c "VBird's test"
dmtsai
范例二:使用者 dmtsai 密码在 2006/01/01 失效。
[root@linux ~]# usermod -e "2006-01-01" dmtsai

范例三:暂时冻结 dmtsai 的密码!
[root@linux ~]# usermod -L dmtsai

范例四:修改用户名,把用户名“liuyidan”改名为“lyd”,使用的命令是:
[root@linux ~]# usermod
–l  lyd  liuyidan
范例五:解锁“lyd”用户账号,使其可以登录。命令如下:
[root@linux ~]# usermod –U  lyd
4、删除用户账户:userdel
这个功能就太简单了~目的在删除使用者啦~与他相关的档案有:
/etc/passwd/etc/shadow/home/username
范例一:删除 vbird2 ,连同家目录一起删除
[root@linux ~]#
userdel -r vbird2

(二)组管理命令
1、groupadd
范例一:新建一个群组,名称为 group1
[root@linux ~]#
groupadd group1
范例二:新建一个系统群组,名称为 group2
[root@linux ~]# groupadd -r group2

2、groupmod
跟 usermod 类似的,这个指令仅是在进行 group 相关参数的修改而已。

范例一:将刚刚上个指令建立的 group2 名称改为 groupname , GID 为 103
[root@linux ~]# groupmod -g 103 -n groupname group2

3、groupdel
范例一:将刚刚的 groupname 删除!
[root@linux ~]# groupdel groupname
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值