Linux入门进阶第五天——用户管理(帐号管理 )上

一、帐号与群组

  关于使用者帐号:

  用户的ID与帐号信息所在位置是 /etc/passwd,而管理密码的数据则是在 /etc/shadow

每个登陆的使用者至少都会取得两个 ID ,

    一个是使用者 ID (UserID ,简称 UID)、

    一个是群组 ID (Group ID ,简称 GID)。

  之前提到的文件的所有者和所属组,Linux就是通过UID与GID赖进行判断的呢(它只认识0和1这样的,对字符型的帐号名称其实没什么概念!,所以说,当系统有需要的时候,其实是通过查找/etc/passwd 和 /etc/group来进行帐号的显示的!如果没有找到对应UID的帐号,则直接显示UID的数字了!)

  1./etc/passwd文件

[root@localhost ~]# cat /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
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

  格式

  

1:用户名,用户登录系统时使用的用户名(账户名称)
2:密码位
  在早期的Linux系统中,密码是存放在/etc/passwd文件中的,但是每个用户对该文件都有读的权限,这是比较危险的,
后来就不存放在这个文件了。
  ——转移到/etc/shadow下,所以显示x
3:UID,用户标识号

    管理员标识(root):0 不会改变

      普通用户: 1-65535

      系统用户(伪用户):1-499, 1-999       (centos6 ,centos7)                 

      登录用户:500-60000 , 1000-60000

4:GID,缺省组标识号
5:注释性描述
6:宿主目录,用户登录系统后的缺省目录
7:用户使用的shell,默认为bash

   2./etc/shadow文件

[root@localhost ~]# ll /etc/shadow
----------. 1 root root 703 12月 13 12:32 /etc/shadow

  // 这个权限表示:只有root可以读写!

  想要查询加密方式,可以通过:

 

authconfig --test | grep hashing

 

[root@localhost ~]# authconfig --test | grep hashing
 password hashing algorithm is sha512

  shadow文件内容:

 

[root@localhost ~]# head -n 4 /etc/shadow
root:$6$lWdDY9NwZNDiRLx8$PxOrJJojIcT93j4q7SBqapAnkgLqS9AA6qCLMWkW5EF1P4zYGpDLGPSehUbVJInRmHpsXaQKW8J2fnVUvPfgz/::0:99999:7:::
bin:*:17110:0:99999:7:::
daemon:*:17110:0:99999:7:::
adm:*:17110:0:99999:7:::

  格式

  

1:用户名
2:加密密码,如果是 !则代表密码无法使用!
3:最近一次修改时间,以天位单位,从1970年1月1日为参考点(两个时间点间累加的日期)
4:最小时间间隔,两次修改密码之间的最小天数,为0表示不限制,如改为3,表示间隔3天以上才能修改密码
5:最大时间间隔,密码保持有效的最多天数,超过天数不改密码,则用户无法登录
6:警告时间:从系统开始警告到密码失效的天数
7:账号闲置时间,密码过期后的帐号宽限时间
8:失效时间,密码失效的绝对天数,就是账号的失效日期,到了此日期帐号强制失效,例如用于收费服务等!
9:标志,一般不使用

  3.口令管理

  普通用户修改密码:直接运行passwd即可!passwd指令介绍,参考http://man.linuxde.net/passwd

[linuxde@localhost ~]$ passwd Changing password for user linuxde. //更改linuxde用户的密码; 
(current) UNIX password:
//请输入当前密码;
New UNIX password:
//请输入新密码;
Retype new UNIX password:
//确认新密码;
passwd: all authentication tokens updated successfully.
//更改成功; 来自: http://man.linuxde.net/passwd

  普通用户忘记密码以及root用户修改自己密码:(root修改自己密码运行 passwd root即可!)

[root@localhost ~]# passwd linuxde //更改或创建linuxde用户的密码; 
Changing password for user linuxde. New UNIX password:
//请输入新密码; Retype new UNIX password: //再输入一次; passwd: all authentication tokens updated successfully. //成功; 来自: http://man.linuxde.net/passwd

  口令密码详细的设置命令chage的参考http://linux.51yip.com/search/chage

  root用户忘记密码比较棘手,将在单人维护章节讲述!

  关于群组

  1./etc/group

[root@localhost ~]# head -n 4 /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:

1.组名称
2.组密码,通常不用,同样类似有/etc/gshadow文件
3.GID,群组ID
4.组员列表,新版Linux对于初始群组已经不显示默认成员了!

   一个用户可以加入多个群组(使用命令 groups 可以查看所有群组!),所以这里会有有效群组的概念(不然新建一个文件怎么确定是属于哪个群组呢)

[dmtsai@study ~]$ groups
dmtsai wheel users

  其中,第一个群组就是有效群组,新建文件所属的群组就是这个群组!

  切换有效群组可以使用 newgrp

[dmtsai@study ~]$ newgrp users

  修改用户加入群组,可以通过usermodhttp://man.linuxde.net/usermod

  2./etc/gshadow

[root@localhost ~]# head -n 4 /etc/gshadow
root:::
bin:::
daemon:::
sys:::

1.组名称
2.密码栏,空或者!表示无密码,表示无群组管理员
3.群组管理员帐号
4.加入群组的帐号列表,与/etc/group相似!

二、帐号管理

  1.添加用户——useradd

[root@localhost ~]# useradd --help
用法:useradd [选项] 登录
      useradd -D
      useradd -D [选项]

选项:
  -b, --base-dir BASE_DIR    新账户的主目录的基目录
  -c, --comment COMMENT         新账户的 GECOS 字段
  -d, --home-dir HOME_DIR       新账户的主目录
  -D, --defaults        显示或更改默认的 useradd 配置
  -e, --expiredate EXPIRE_DATE  新账户的过期日期
  -f, --inactive INACTIVE       新账户的密码不活动期
  -g, --gid GROUP        新账户主组的名称或 ID
  -G, --groups GROUPS    新账户的附加组列表
  -h, --help                    显示此帮助信息并推出
  -k, --skel SKEL_DIR    使用此目录作为骨架目录
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -l, --no-log-init    不要将此用户添加到最近登录和登录失败数据库
  -m, --create-home    创建用户的主目录
  -M, --no-create-home        不创建用户的主目录
  -N, --no-user-group    不创建同名的组
  -o, --non-unique        允许使用重复的 UID 创建用户
  -p, --password PASSWORD        加密后的新账户密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL        新账户的登录 shell
  -u, --uid UID            新账户的用户 ID
  -U, --user-group        创建与用户同名的组
  -Z, --selinux-user SEUSER        为 SELinux 用户映射使用指定 SEUSER

 

创建一般用户示例:

  useradd vbird1

CentOS 这些默认值主要会帮我们处理几个项目:
在 /etc/passwd 里面创建一行与帐号相关的数据,包括创建 UID/GID/主文件夹等;
在 /etc/shadow 里面将此帐号的密码相关参数填入,但是尚未有密码;
在 /etc/group 里面加入一个与帐号名称一模一样的群组名称;
在 /home 下面创建一个与帐号同名的目录作为使用者主文件夹,且权限为 700

  

[root@localhost ~]# useradd -u 1500 vbird2
[root@localhost ~]# ll -d /home/vbird2
drwx------. 2 vbird2 vbird2 62 12月 18 14:06 /home/vbird2
[root@localhost ~]# grep vbird2 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird2:x:1500:1500::/home/vbird2:/bin/bash
/etc/shadow:vbird2:!!:17518:0:99999:7:::
/etc/group:vbird2:x:1500:

  更多实例,参考菜鸟教程http://www.runoob.com/linux/linux-comm-useradd.html

创建系统用户示例:

[root@study ~]# useradd -r vbird3
[root@study ~]# ll -d /home/vbird3
ls: cannot access /home/vbird3: No such file or directorya <==不会主动创建主文件夹
[root@study ~]# grep vbird3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:vbird3:x:699:699::/home/vbird3:/bin/bash
/etc/shadow:vbird3:!!:16636::::::
/etc/group:vbird3:x:699:

 useradd的默认配置可以通过 -D选项进行查看:

[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

  关于参考目录SKEL,参考鸟哥的介绍:

SKEL=/etc/skel:使用者主文件夹参考基准目录
这个咚咚就是指定使用者主文件夹的参考基准目录啰~举我们的范例一为例, vbird1 主文件
夹 /home/vbird1 内的各项数据,都是由 /etc/skel 所复制过去的~所以呢,未来如果我想要让
新增使用者时,该使用者的环境变量 ~/.bashrc 就设置妥当的话,您可以到 /etc/skel/.bashrc
去编辑一下,也可以创建 /etc/skel/www 这个目录,那么未来新增使用者后,在他的主文件夹
下就会有 www 那个目录了!这样瞭呼?
View Code

  更多useradd默认配置可以参考https://www.cnblogs.com/craftor/p/3811612.html

   关于GID/UID以及密码的参考则是来自 /etc/login/defs,

MAIL_DIR /var/spool/mail <==使用者默认邮件信箱放置目录
PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏,多久需变更密码日数
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏,多久不可重新设置密码日数
PASS_MIN_LEN 5 <==密码最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏,过期前会警告的日数
UID_MIN 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
SYS_UID_MIN 201 <==保留给使用者自行设置的系统帐号最小值 UID
SYS_UID_MAX 999 <==保留给使用者自行设置的系统帐号最大值 UID
GID_MIN 1000 <==使用者自订群组的最小 GID,小于 1000 为系统保留
GID_MAX 60000 <==使用者自订群组的最大 GID
SYS_GID_MIN 201 <==保留给使用者自行设置的系统帐号最小值 GID
SYS_GID_MAX 999 <==保留给使用者自行设置的系统帐号最大值 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动创建使用者主文件夹?
UMASK 077 <==使用者主文件夹创建的 umask ,因此权限会是 700
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
ENCRYPT_METHOD SHA512 <==密码加密的机制使用的是 sha512 这一个机制!
View Code

关于这里,可以参考http://blog.csdn.net/u010181136/article/details/17436407

   综上:useradd至少会参考以下3个文件: 

    /etc/default/useradd
    /etc/login.defs
    /etc/skel/*

  2.修改用户——usermod

-c<备注>:修改用户帐号的备注文字; 
-d<登入目录>:修改用户登入时的目录;
-e<有效期限>:修改帐号的有效期限;
-f<缓冲天数>:修改在密码过期后多少天即关闭该帐号;
-g<群组>:修改用户所属的群组;
-G<群组>;修改用户所属的附加群组;
-l<帐号名称>:修改用户帐号名称;
-L:锁定用户密码,使密码无效;
-s:修改用户登入后所使用的shell;
-u:修改用户ID;
-U:解除密码锁定。

来自: http://man.linuxde.net/usermod

   示例:

[root@localhost ~]# usermod -c "test accout" vbird2 

   3.删除用户——userdel

  确定了不使用此帐号再删除,否则只需要usermod -L 锁定即可!

[root@study ~]# userdel [-r] username
选项与参数:
-r :连同使用者的主文件夹也一起删除

  以上3个都是管理员使用的指令,不过一般的使用者也是阔以有相关的命令的!

  1.查看信息——id

id [-gGnru][--help][--version][用户名称]

来自: http://man.linuxde.net/id

  详细选项这里不展开,反正直接使用id就列出所有洛!

[root@localhost ~]# id root
uid=0(root) gid=0(root) 组=0(root)

 [root@localhost ~]# id vbird2
 uid=1500(vbird2) gid=1500(vbird2) 组=1500(vbird2)

像这样我们之前直接指定UID为1500,则中间的1000-1049就直接废弃了!

   2.查看与修改指纹信息——finger与chfn,修改shell——chsh

  暂略。

三、群组管理

  与账户管理十分相似,也是增删改的相关操作!

  1.群组新增——groupadd

 groupadd [-g gid] [-r] 群组名称
选项与参数:
-g :后面接某个特定的 GID ,用来直接给予某个 GID ~
-r :创建系统群组啦!与 /etc/login.defs 内的 GID_MIN 有关。

  更多groupadd参考http://man.linuxde.net/groupadd

  2.群组修改——groupmod

groupmod [-g gid] [-n group_name] 群组名
选项与参数:
-g :修改既有的 GID 数字;
-n :修改既有的群组名称

  更多groupmod参考http://man.linuxde.net/groupmod

  3.群组删除——groupdel

groupdel [groupname]

  不过,这个命令需要注意,如果这个群组是某个用户的默认群组,则无法删除!(不然使用者一登录,发现默认群组都没了。。)

所以,要么你把那用户删了,要么改他的默认群组。

  更多groupdel参考http://man.linuxde.net/groupdel

   4.群组管理员设置——gpasswd

  和我们的社交帐号的群是一样的,不用什么事都通过root来干,可以设置群管理员,让群管理员来管理群

[root@study ~]# gpasswd groupname
[root@study ~]# gpasswd [-A user1,...] [-M user3,...] groupname
[root@study ~]# gpasswd [-rR] groupname
选项与参数:
:若没有任何参数时,表示给予 groupname 一个密码(/etc/gshadow)
-A :将 groupname 的主控权交由后面的使用者管理(该群组的管理员)
-M :将某些帐号加入这个群组当中!
-r :将 groupname 的密码移除
-R :让 groupname 的密码栏失效
# 关于群组管理员(Group administrator)做的动作:
[someone@study ~]$ gpasswd [-ad] user groupname
选项与参数:
-a :将某位使用者加入到 groupname 这个群组当中!
-d :将某位使用者移除出 groupname 这个群组当中。

  关于gpasswd的用法参考http://linux.51yip.com/search/gpasswd

   ACL不再赘述,待补充...

posted @ 2017-12-18 20:44  ---江北  阅读(395)  评论(0编辑  收藏  举报
TOP