您的位置:首页 > 运维架构 > Linux

新手学Linux之用户与组管理

2016-08-02 21:57 113 查看

一、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 (开启投影密码,恢复系统默认状态)
[root@localhost testdir]# getent shadow haha
haha:$6$3X8z.cbV$khAmbdajf7fyqZaNtRZWKBlRAaKuPUm6pvGIyvfhJfSMObQVX08k/6wUoksDDc/G71UhxBUNBeO0/Waa.hUPN1:17015:0:99999:7:::

7、pwck

功能:
检查密码文件的完整性
语法:
pwck [选项] [passwd [ shadow ]]
选项:
-q:只报告错误。不显示那些不需要用户操作的警告
-r:在只读模式下执行 pwck
-s:根据用户UID排序
示例:
[root@localhost testdir]# pwck -r /etc/passwd /etc/shadow
user 'adm': directory '/var/adm' does not exist
user 'uucp': directory '/var/spool/uucp' does not exist
user 'gopher': directory '/var/gopher' does not exist
user 'ftp': directory '/var/ftp' does not exist
user 'avahi-autoipd': directory '/var/lib/avahi-autoipd' does not exist

8、grpck

功能:
检查组文件的完整性。grpck检查发现错误以后,在命令行提示用户是否删除错误的记录
语法:
grpck [选项] [group [ shadow ]]
选项:
-r:在只读模式下执行grpck
-s:根据用户GID排序
示例:
[root@localhost testdir]# grpck /etc/gshadow
invalid group file entry
delete line 'root:::haha,linuxpao'? y(回复y表示同意删除)

9、vipw

功能:
编辑/etc/passwd或/etc/shadow文件
语法:
vipw [选项]
选项:
-p:编辑passwd数据库
-q:安静模式
-s:编辑shadow数据库
示例:
[root@localhost testdir]# vipw -p /etc/passwd
root:x:0:0:xiaobao,北京三里屯,010020,12345678:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

10、vigr

功能:
编辑/etc/group和/etc/gshadoww
语法:
vigr [选项]
选项:
-g:编辑group数据库
-q:安静模式
-s:编辑gshadow数据库
示例:
[root@localhost testdir]# vigr -s
root:::haha,linuxpao
bin:::bin,daemon,haha,linuxpao
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 管理员 系统