189 8069 5689

新手学Linux之用户与组管理

一、linux用户与组管理的基本介绍

1、任何一个用户想要使用Linux系统都要向管理员申请一个账号,对这些账号的管理即是对用户的管理,所谓组,就是多个账号的集合。用户和组管理可以提高用户的管理效率、工作效率以及系统的安全性,比如将同一个部门的成员放在一个组里并设置权限,这样可有效的对资源共享,同时可以避免其他部门的人恶意破坏。

目前成都创新互联已为近千家的企业提供了网站建设、域名、网络空间、网站运营、企业网站设计、新乡县网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。

2、用户和组的管理内容一般有如下几点:

用户账号的增加、删除和权限的修改;
组账号的增加、删除和权限的修改,组成员的添加与删除;
用户账号密码和组账号密码的管理;

3、用户可以分为管理员和普通用户,普通用户又可以细分为系统用户和登录用户。Linux系统并不是通过用户名来识别用户的,而是通过用户的ID号(UID)。系统管理员的ID号为0,普通用户的可用ID号为1至65535,其中系统用户的可用ID号在CentOS6中为1-499,在CentOS中为1-999;登录用户的可用ID号在CentOS6中为500及以上,在CentOS中为1000及以上。

4、组对应用户可以分为管理员组和普通组,普通组又可以分为系统组和普通组,系统也是通过ID号来识别用户组的其组号与上面的用户ID号对应。对于一个用户来说是可以有多个组的,因此,组还可以分为用户的基本组(主组)和附加组。基本组组名和用户名相同,且只有一个用 户,基本组以外的组属于用户的附加组,用户只能有一个基本组,附加组可以有多个。

二、用户和组的相关配置文件的介绍

1、/etc/passwd

此文件记录的是Linux用户的基本信息,以冒号“:”分为7个字段,每个字段代表不同的意义,了解其格式我们可以查看man手册:

account:password:UID:GID:GECOS:directory:shell
account:用户名
password:用户密码,早期的用户密码是放在/etc/passwd文件(只有管理员可以读取)中的,但是由于所有人都可以读取此文件,很不安全,因此后来就将这个字段的密码数据改放到/etc/shadow文件中,此字段用X字母表示
UID:用户ID
GID:组ID
GECOS:用户的注释信息
directory:用户的家目录
shell:用户默认登录的shell

以root账号为例:

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

2、/etc/shadow

此文件记录的是用户的密码信息,以冒号“:”分为9个字段,如下:

login name:encrypted password:date of last password change:minimum password age:maximum password age:password warning period:password inactivity period:account expiration date:reserved field
login name:登录用户名称
encrypted password:加密的密码,如果此字段的第一个字符是“*”或“!”,表示此账号被锁定,不能登录系统
date of last password change:最近可以改动密码的日期,以1970年1月1日开始以天为单位
minimum password age:密码不可改动的天数,如果此字段为0则表示随时可以修改密码
maximum password age:密码需要重新修改的日期,默认此字段为99999,表示99999天后必须重新更改密码
password warning period:密码需要重新修改期限前的警告期,比如99999天后必须修改密码,但是系统会提前告知用户,默认提前7天
password inactivity period:密码过期的宽限时间,指定密码过期后几天将被禁用,但在此间账号任然可以登录
account expiration date:密码被禁用的日期,从1970年1月1日算起,以天为单位,这个账号在此字段规定的日期之后,将无法再使用。
reserved field:保留字段

以root为例:

root:$6$JPIUZBv/rrjJRRvU$8oTHpJ04gHA7iwWK7Ea6DMSQJmo01JJd4ClwJUEMFeyavOPdxFRpGpmjzYZd4PZNMQpK4qot4acCyyRlV6.hP.:17002:0:99999:7:::

3、/etc/group

此文件记录的是用户组的相关信息,以冒号“:”分为4个字段,如下:

group_name:passwd:GID:user_list
group_name:用户组名称
passwd:用户组密码,通常不用设定,因为密码是被记录在/etc/gshadow文件中
GID:用户组ID
user_list:组成员

以root为例:

root:x:0:gentoo

4、/etc/gshadow

此文件记录的是用户组的密码信息,以冒号“:”分为4个字段,如下:

group name:encrypted password:administrators:members
group name:组账号
encrypted password:加密的组密码
administrators:组管理员
members:组成员

以root为例:

root:::gentoo

5、管理员可以通过修改以上4个文件来对用户和组进行管理,同时也可以使用命令对用户和组进行管理。

三、用户管理命令的介绍

1、useradd

功能:

创建系统新用户

语法:

useradd [options] LOGIN
useradd -D
useradd -D [options]

选项:

-u:指定用户的UID
-o:不检查UID的唯一性。配合-u选项使用,强制指定UID,即使UID已存在
-g:指定用户的基本组,可以用组名或GID,组必须事先存在
-c:添加用户的注释信息
-d:指定用户登录时进入的目录,即主目录,事先不存在会自动创建,但是家目录的父目录必须存在
-e:指定账号的有效期限,格式为:YYYY-MM-DD
-f:指定账号过期几天后永久锁定,0表立刻锁定,-1表示关闭此功能
-s:指定用户登录的默认shell
-G:指定用户的附加组,多个组则用逗号隔开,组必须事先存在
-N:不创建用户的主组,使用users组做为其主组
-r:创建系统用户,系统用户默认不会创建家目录,可以配合-m选项实现
-M:强制不创建家目录
-D:不接选项为显示当前系统预设值,接选项为修改给系统预设值,可接的选项如下:
   -b:修改新用户的默认家目录,若使用-d选项后此选项无效
   -e:修改新账号默认的停止日期(有效期限)
   -f:修改新账号默认的锁定日期
   -g:修改新用户的组,必须事先存在
   -s:修改新用户的默认shell
注意:-D选项修改的内容会被记录在/etc/login.defs文件中,因此是永久生效的

示例:

新建了一个用户haha,该用户的登录Shell是/bin/sh,同时又属于bin和root用户组,UID为2048,家目录为/testdir/haha
[root@localhost ~]# useradd -G bin,root -s /bin/sh -d /testdir/haha -u 2048 haha

2、usermod

功能:

修改用户账号属性

语法:

usermod [options] LOGIN

选项:

-u:修改用户UID
-g:修改用户GID
-G:新附加组(且组需事先存在),原来的附加组将会被覆盖;若保留原有组,则要同时使用-a 选项,
-s:修改用户的默认shell
-c:添加新的注释信息
-d:新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m选项
-l:修改用户命名
-L:锁定用户,即在/etc/shadow第二个字段最前面添加“!”
-U:解锁用户,即将/etc/shadow第二个字段最前面的“!”删除
-e:指明用户账号过期日期,格式为YYYY-MM-DD
-f:设定非活动期限,即用停权期限

说明:

usermod命令不可以修改正在线上的用户的名称,当usermod用来改变UID时,必须确认用户没在电脑上执行任何程序。

示例:

将用户haha添加到用户组users中,同时不离开其他用户组 
[root@localhost ~]# usermod -aG users haha

3、userdel

功能:

删除用户

语法:

userdel [options] LOGIN

选项:

-f:强制删除用户,即使用户已登录
-r:删除用户的同时删除与用户相关的所有文件

示例:

[root@localhost ~]# userdel -r gentoo

注意:请不要轻易用-r选项,如果用户目录下有重要的文件,在删除前请备份。

4、passwd

功能:

修改用户的密码信息,只有管理员可以修改指定用的密码信息,其他普通用户只能修改自己的密码。

语法:

passwd [option] [username]

选项:

-l:锁定指定用户的密码
-u:解定指定用户的密码
-e:强制用户下次登录时修改密码
-n:指定用户密码的最短使用期限
-x:指定用户密码的最大使用期限
-w:提前多少天警告用户修改密码
-i:用户停权的期限
-S:显示指定用户的信息,包括加密算法
-k:设置密码过期后才能修改密码,即保持用户密码不过期
-g:修改组密码
-d:删除密码,只有管理员才有权限
--stdin:从标准输入接收并设置用户密码,如下:
   echo "PASSWORD" | passwd --stdin USERNAME

示例:

锁定用户user1密码,将用户sam的密码删除
[root@localhost ~]# passwd -l user1 ; passwd -d sam

5、chage

功能:

修改用户密码过期信息

语法:

chage [options] LOGIN

选项:

-d:上一次修改密码的日期,其格式为YYYY-MM-DD,如果设置为0则表示此用户在下次登录时必须修改密码
-E:设置密码到期的日期,超过此天用户密码则被锁定(设置的是/etc/shadow文件的第8字段)
-I:设定停滞时间,超过此时间段账号将不可用,(设置的是/etc/shadow文件的第7字段)
-m:密码可以修改的最小天数,设置为0时表示任何时候都可以修改
-M:密码有效的最大天数
-W:密码到期,提前几天警告
-l:显示用密码设置的信息

示例:以我的系统为例

(1)[root@localhost ~]# chage -l root
最近一次密码修改时间                  :从不
密码过期时间                  :从不
密码失效时间                  :从不
帐户过期时间                      :从不
两次改变密码之间相距的最小天数     :0
两次改变密码之间相距的最大天数     :99999
在密码过期之前警告的天数    :7

(2)[root@localhost ~]# chage -I 5 user1
[root@localhost ~]# chage -l user1
最近一次密码修改时间                  :8月 02, 2016
密码过期时间                  :10月 01, 2016
密码失效时间                  :10月 06, 2016
帐户过期时间                      :1月 01, 1970
两次改变密码之间相距的最小天数     :0
两次改变密码之间相距的最大天数     :60
在密码过期之前警告的天数    :7

6、finger

功能:

用户信息查找程序。单独执行finger指令,它会显示本地主机现在所有登录用户的信息。如果要查询远程主机的用户信息,需要使用user@host的格式

语法:

finger [-lmsp] [user ...] [user@host ...]

选项:

-l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容;
-m:不查找用户的真实姓名;
-s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话;
-p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容

示例:

[root@localhost ~]# finger linuxpao
Login: linuxpao                 Name:
Directory: /home/linuxpao               Shell: /bin/bash
On since Tue Aug  2 16:25 (CST) on tty3   6 minutes 47 seconds idle
New mail received Fri Jul 29 21:19 2016 (CST)
    Unread since Wed Jul 20 17:51 2016 (CST)
No Plan.

7、chfn

功能:

修改finger命令显示的信息

语法:

chfn [-f full-name] [-o office] ,RB [ -p office-phone] [-h home-phone] -u] [-v] [username]

选项:

-f:设置用户真实姓名
-o:设置用户的办公室地址
-p:设置用户的办公室电话
-h:设置用户的家庭电话

示例:

[root@localhost ~]# chfn
Changing finger information for root.
Name [root]: xiaobao              
Office []: 北京三里屯
Office Phone []: 010020
Home Phone []: 12345678

Finger information changed.

8、chsh

功能:

修改过用户的登录shell

语法:

chsh [-s shell] [-l] [-u] [-v] [username]

选项:

-s:修改用户的shell
-l:打印当前系统支持的shell(即/etc/shells文件记录的shell)

示例:

(1)查看当前系统支持的shell
[root@localhost ~]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
(2)修改用户haha的shell为/bin/csh
[root@localhost ~]# chsh -s /bin/csh haha
Changing shell for haha.
Shell changed.

四、用户组管理命令的介绍

1、groupadd

功能:

创建一个新组。
组名必须以小写字母或者下划线开头,跟随小写字母、下划线或短横线。可以由美元符号结束。用正则表达式就是:[a-z_][a-z0-9_-]*[$]?
组名最长为 16 个字符。

语法:

groupadd [选项] group

选项:

-g:指定新组的GID
-o:需与-g选项连用,此选项允许添加一个使用非唯一 GID 的组。
-r: 创建一个系统组
-K:覆盖/etc/login.defs文件的默认值

示例:

增加了一个新系统组xixi,同时指定新组的组标识号是222
[root@localhost ~]# groupadd -r 222 xixi
[root@localhost ~]# tail -1 /etc/group
xixi:x:222:

2、groupmod

功能:

修改用户组相关信息

语法:

groupmod [选项] GROUP

选项:

-n:修改用户组的名称
-g:修改用户组的GID
-o:与-g选项连用,表示强制使用某个已经存在的组ID号

示例:

将组xixi的标识号改为10000,组名修改为xixihaha
[root@localhost ~]# groupmod -g 10000 -n xixihaha xixi
[root@localhost ~]# getent group xixihaha
xixihaha:x:10000:

3、groupdel

功能:

删除一个组

语法:

groupdel [选项] GROUP

说明:

不能移除现有用户的主组。在移除此组之前,必须先移除此用户

示例:

删除user1组(用户user1已删除)
[root@localhost ~]# groupdel user1

4、gpasswd

功能:

管理用户组,是组文件/etc/group和/etc/gshadow的管理工具

语法:

gpasswd [选项] group

选项:

-a:向group添加新用户
-d:从group删除用户
-r:删除组密码
-A:指定组管理员
-M:指定组成员

示例:

将用户haha,sarah加入admins组
[root@localhost ~]# gpasswd -M haha,sarah admins
[root@localhost ~]# tail /etc/group
tcpdump:x:72:
linuxpao:x:500:
admins:x:502:haha,sarah

5、newgrp

功能:

临时登录到一个新组

语法:

newgrp [-] [group]

示例:

如果用户本不属于某组,则需要组密码,如下示例
[root@localhost ~]# id haha
uid=2048(haha) gid=2048(haha) groups=2048(haha),0(root),1(bin),100(users),502(admins)
[root@localhost ~]# su - haha
[haha@localhost ~]$ newgrp admins
[haha@localhost ~]$ id
uid=2048(haha) gid=502(admins) groups=502(admins),0(root),1(bin),100(users),2048(haha)
[haha@localhost ~]$ newgrp harry(组)
Password:

6、groupmems

功能:

管理和查看主组成员

语法:

groupmems -a user_name | -d user_name | [-g group_name] | -l | -p

选项:

-a:将一个用户添加到组成员列表
-d:从组成员列表中删除用户
-g:超级用户可以指定修改哪个组的组成员列表,需要配合其他几个选项使用
-l:列出组成员
-p:从组成员列表中删除所有用户

示例:

显示bin组的成员
[root@localhost ~]# groupmems -l -g bin
bin  daemon  haha
向bin组添加成员linuxpao
[root@localhost ~]# groupmems -a linuxpao -g bin
[root@localhost ~]# groupmems -l -g bin
bin  daemon  haha  linuxpao

7、groups

功能:

 查看用户所属组

语法:

groups [OPTION]... [USERNAME]...

示例:

显示haha用户所在的组
[root@localhost ~]# groups haha
haha : haha root bin users admins

五、用户与组管理的相关命令补充

1、newusers

功能:

批量更新和创建新用户

语法:

newusers [选项] [文件]

选项:

-c:使用指定的方法加密密码,可用的方法有 DES, MD5, NONE, and SHA256 或 SHA512,前提是您的 libc 支持这写方法
-r:创建一个系统账户
-s:使用指定次数的轮转来加密密码,值 0 表示让系统为加密方法选择默认的轮转次数 (5000),默认,轮转数由 /etc/login.defs 文件中的 SHA_CRYPT_MIN_ROUNDS 和 SHA_CRYPT_MAX_ROUNDS变量确定

文件格式:

必须是/etc/passwd文件的格式,如下:
pw_name:pw_passwd:pw_uid:pw_gid:pw_gecos:pw_dir:pw_shell
对应  用户名:密码:UID:GID:GECOS:家目录:登录shell

示例:

创建文件user.txt,以批量添加用户haha1,haha2,haha3.
vim user.txt(以下是文件内容)
haha1:x:3001:3001::/home/haha1:/bin/bash
haha2:x:3002:3002::/home/haha2:/bin/bash
haha3:x:3003:3003::/home/haha3:/bin/bash
------------------------------------------
[root@localhost testdir]# newusers user.txt (批量创建)
[root@localhost testdir]# tail -3 /etc/passwd (查看创建结果)
haha1:x:3001:3001::/home/haha1:/bin/bash
haha2:x:3002:3002::/home/haha2:/bin/bash
haha3:x:3003:3003::/home/haha3:/bin/bash

2、chpasswd

功能:

批量更新用户密码

语法:

chpasswd [选项]

格式:

user_name:password,默认必须明文提供密码,然后由 chpasswd 加密

选项:

-c:使用指定的方法加密密码
-e:提供的密码是已经加密了的
-m:如果提供的密码没有加密,则使用 MD5 加密而不是 DES
-s:使用指定次数的轮转来加密密码

示例:

创建文件passwd.txt,以批量添加用户haha1,haha2,haha3的密码,算法使用MD5。
vim passwd.txt (以下为文本内容)
haha1:123456
haha2:qwerty
haha3:asdfgh
-----------------------------------------
[root@localhost testdir]# cat passwd.txt | chpasswd -c MD5(批量加密)
[root@localhost testdir]# tail -3 /etc/shadow   (加密结果)
haha1:$1$Epulz/Ew$.VMMX.uodFeo7wOay6slU.:17015:0:99999:7:::
haha2:$1$YMvrS/Ks$S5aDmDuaRwG3NsOe4z7wS1:17015:0:99999:7:::
haha3:$1$hwyABoHg$tY0ZP4xmRQ.pwmkuMKiXD0:17015:0:99999:7:::

3、id

功能:

显示真实有效的用户和组ID号

语法:

id [OPTION]... [USER]

选项:

-u:显示用户UID
-g:显示用户主组的GID
-G:显示用户所属附加组的GID
-n:显示组名称而非数字,与-ugG 一起使用
-r:显示真实ID 而非有效ID,与-ugG 一起使用
-Z:仅显示当前用户的安全环境

示例:

显示haha的用户ID和所有组ID
[root@localhost testdir]# id haha
uid=2048(haha) gid=2048(haha) groups=2048(haha),0(root),1(bin),100(users),502(admins)

4、su

功能:

切换用户或以其他用户身份执行命令

语法:

su [options...] [-] [user [args...]]

选项:

-l:使用新用户的所有相关环境设定文件,相当于 su - username
-m:表示使用目前的环境设定,而不重新读取新用户的设定文件
-c:仅执行一次命令,所以 -c 后面可以加上命令
-s:指定要执行的shell

示例:

使用帐号为root并在执行ls指令后退出变回原使用者
[root@localhost testdir]# su -c ls root(需要注意文件权限问题)
bc   file   haha    ls  passwd.txt  uset.txt  cat  file1  lost+found
[root@localhost testdir]#

5、getent

功能:

用来察看系统的数据库中的相关记录

语法:

getent database [key ...]

datebase包括的列表:

ahosts;ahostsv4;ahostsv6;aliases;ethers;group;gshadow;hosts;initgroups;
netgroup;networks;passwd;protocols;rpc;services;shadow

示例:

使用命令getent查看Linuxpao用户在/etc/passwd文件中信息
[root@localhost testdir]# getent passwd linuxpao
linuxpao:x:500:500::/home/linuxpao:/bin/bash

6、pwconv和pwunconv

功能:

pwconv:开启用户的投影密码
pwunconv:关闭用户的投影密码

示例:

[root@localhost testdir]# getent passwd haha
haha:x:2048:2048::/testdir/haha:/bin/csh
[root@localhost testdir]# getent shadow haha
haha:$6$3X8z.cbV$khAmbdajf7fyqZaNtRZWKBlRAaKuPUm6pvGIyvfhJfSMObQVX08k/6wUoksDDc/G71UhxBUNBeO0/Waa.hUPN1:17015:0:99999:7:::
-----------以上是关闭用户的投影密码前haha用户的/etc/passwd和/etc/shadow
[root@localhost testdir]# pwunconv (关闭投影密码)
[root@localhost testdir]#getent passwd haha  (可以看到/etc/shadow密码移到了/etc/passwd)
haha:$6$3X8z.cbV$khAmbdajf7fyqZaNtRZWKBlRAaKuPUm6pvGIyvfhJfSMObQVX08k/6wUoksDDc/G71UhxBUNBeO0/Waa.hUPN1:2048:2048::/testdir/haha:/bin/csh
[root@localhost testdir]# cat /etc/shadow | grep haha(提示/etc/shadow不存在)
cat: /etc/shadow: No such file or directory
-------------
[root@localhost testdir]# pwconv (开启投影密码,恢复系统默认状
文章名称:新手学Linux之用户与组管理
文章地址:http://cdxtjz.cn/article/ihhjpj.html

其他资讯