Linux基础系列(用户,组管理)

   Linux是一个多用户操作系统多任务的分时操作系统,平时的日常使用离不开用户登录以及用户组的管理,熟练管理用户和用户组,会提升我们的工作效率。

 

Linux用户管理:

  Linux包括系统管理员,普通用户。普通用户又分为系统用户和登录用户。系统用户一般不会登陆系统,其shell类型一般为/etc/nologin.

      管理员:root, 0
      普通用户:1-65535
         系统用户:1-499(CENTOS6), 1-999
            对守护进程获取资源进行权限分配
         登录用户:500(CENTOS6)+, 1000+
         交互式登录

   配置文件:

        /etc/passwd :存放用户账号信息

       /etc/shadow  :存放用户密码信息

/etc/passwd文件格式:

[root@localhost ~]# getent passwd root
root:x:0:0:root:/root:/bin/bash
gentoo:x:4322:4322:Gentoo Distribution:/home/gentoo:/bin/csh

可以看到/etc/passwd文件一共存在七个字段,每个字段用冒号隔开,其意义分别为:

   用户名:密码位:uid:gid:描述信息:家目录:shell类型

可以看到密码位为x,是因为为了保险起见,密码被放在了另一个文件中,这个文件就是/etc/shadow,让我们也来看看这个文件的格式内容

/etc/shadow:

[root@localhost test]# tail /etc/shadow
gentoo:!!:17015:0:99999:7:::
natasha:$6$Fr6mxmMZ$QZzqqAJAlZzsygjzHo6NwaEkgM0oOl16sn8h.lfVht4k2VbnhMpImBqy2VOy8eRPHkhvGrjyEflmwaYSYLaq41:17015:0:99999:7:::
harry:$6$cf2ssZV3$roPCkbiIdQKZGwyg5EW9bP5g/KWDYxFBlx8db5JbT4J575zlOGAjUEBLmK/8G1hUL/fBS28DbQ0dyNpaUPMfy.:17015:0:99999:7:::
sarah:$6$Cx7kTnrR$n.Ly6GsbMxkM9Xen/QzahpQjAM8N.7u.TMqXMf.UTbdJy8XUucCByCkMnGYOkGzHcGvTSxpFgO9UAy2BXHAwP/:17015:0:99999:7:::
rooter:!!:17015:0:99999:7:::
router:!!:17015:0:99999:7:::
user1:!!:17016:0:99999:7:::

   同上,这个文件也是用冒号隔开,不过一共有九个字段

用户名:加密的口令:最后一次更改密码的时间:密码最短使用时间:密码最长使用时间:提前几天通知:密码过期后可以使用几天:账户可用时间:保留字段

  可以看到加密的口令字段开头都有$6,这是一种加密方式,加密类型为sha512:512bits。加密口令后面跟着好几个时间,下面有个图,可以较为清晰地来区分这几个时间。


注意:添加用户时如果没有设密码,此时密码位显示两个!!号,表示双重锁定的意思,如果将! !删去,那用户便可以空密码登录。

在centos6,7中,使用usermod -L 解锁只能去掉一个!号,在redhat5中,使用usermod -L可以解锁两个!号 ,从而实现空密码登录

QQ截图20160802110223.jpg


last change date :最后一次修改密码的时间,如若此值为0,则表示下次登录必须修改密码

min days:密码最少被使用的天数(0表示随时可被变更)

max days:密码最长能使用多少天(99999表示永不过期)

warn days:当密码最长使用天数快到时,提前几天通知

inactive days:当密码过期后,还能使用多少天

账号管理命令:

    useradd
    usermod
    userdel

useradd[options] LOGIN
-u UID: [UID_MIN, UID_MAX]定义在/etc/login.defs
-o 配合-u 选项,不检查UID的唯一性
-g GID:指明用户所属基本组,可为组名,也可以GID
-c "COMMENT":用户的注释信息
-d HOME_DIR:以指定的路径(不存在)为家目录
-s SHELL: 指明用户的默认shell程序,可用列表在/etc/shells文件中
-G GROUP1[,GROUP2,…]:为用户指明附加组,组必须事先存在
-N 不创建私用组做主组,使用users组做主组
-r: 创建系统用户CentOS 6: ID<500,CentOS 7: ID<1000

练习:创建一个用户jane,要求其的UID为2222,注释信息为“hello world”,用户家目录为/testdir/hello,默认shell类型为csh,附加组为root。

[root@localhost ~]# useradd -u 2222 -c "hello world" -d /testdir/hello -s /shell/csh -G root jane
[root@localhost ~]# getent passwd jane
jane:x:2222:2222:hello world:/testdir/hello:/shell/csh
[root@localhost ~]# useradd -u 2222 -c "hello world" -d /testdir/hello -s /shell/csh -G root jane
[root@localhost ~]# getent passwd jane
jane:x:2222:2222:hello world:/testdir/hello:/shell/csh

当你想创建两个uid相同的用户时,使用-o选项,他会忽略UID的唯一性:

[root@localhost ~]# useradd -u 2222 -o lilei
[root@localhost ~]# getent passwd lilei
lilei:x:2222:4333::/home/lilei:/bin/bash

每个用户在创建的时候系统都会重建一个与他重名用户组,如果指定主组,则会使用它做用户的主组

[root@localhost ~]# useradd tom
[root@localhost ~]# getent passwd tom
tom:x:4331:4334::/home/tom:/bin/bash
[root@localhost ~]# getent group tom
tom:x:4334:

使用-N选项可以不创建私用组做主组,使用users组做主组

[root@localhost ~]# useradd -N tomre
[root@localhost ~]# id tomre
uid=4332(tomre) gid=100(users) groups=100(users)

至于为什么会用users做主组,这个取决于用户配置的默认配置文件/etc/default/useradd,使用useradd -D可以显示或更改默认设置:

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

usermod[OPTION] login
-u UID: 新UID
-g GID: 新基本组
-G GROUP1[,GROUP2,…[,GROUPN]]]:新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项,表示append;
-s SHELL:新的默认SHELL;
-c 'COMMENT':新的注释信息;
-d HOME: 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,同时使用-m选项
-l login_name: 新的名字;
-L: lock指定用户,在/etc/shadow 密码栏的增加!
-U: unlock指定用户,将/etc/shadow 密码栏的! 拿掉
-e YYYY-MM-DD: 指明用户账号过期日期;
-f INACTIVE: 设定非活动期限;

可以发现usermod和useradd的大多数参数差不多,用法也大致相同,下面我们来实验几个参数。

-l 更改用户名:

[root@localhost ~]# usermod -l tomch tom
[root@localhost ~]# id tom
id: tom: no such user
[root@localhost ~]# id tomch
uid=4331(tomch) gid=4334(tom) groups=4334(tom)

-L 锁定用户,使其不能登录

[root@localhost ~]# passwd tomre
Changing password for user tomre.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: 
passwd: all authentication tokens updated successfully.
[root@localhost ~]# usermod -L tomre

QQ截图20160804105940.jpg

-U 解锁被锁定的用户:

[root@localhost ~]# usermod -U tomre

QQ截图20160804110137.jpg

userdel[OPTION]… login 删除用户
-r: 删除用户家目录;

如果不加参数直接跟账号,那么用户会被删除,但是用户的家目录还在,其属主属组被原用户的UID和GID代替。

[root@localhost ~]# useradd lihua
[root@localhost ~]# id lihua
uid=4333(lihua) gid=4335(lihua) groups=4335(lihua)
[root@localhost ~]# userdel lihua
[root@localhost ~]# id lihua 
id: lihua: no such user

QQ截图20160804111928.jpg

-r 删除家目录

[root@localhost home]# useradd lihua
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.
Creating mailbox file: File exists
[root@localhost home]# id lihua
uid=4333(lihua) gid=4335(lihua) groups=4335(lihua)
[root@localhost home]# userdel -r lihua

QQ截图20160804112241.jpg

用户密码修改:

passwd[OPTIONS] UserName: 修改指定用户的密码,仅root用户权限
passwd: 修改自己的密码;
常用选项:
-l:锁定指定用户
-u:解锁指定用户
-e:强制用户下次登录修改密码
-n mindays: 指定最短使用期限
-x maxdays:最大使用期限
-w warndays:提前多少天开始警告
-iinactivedays:非活动期限;
–stdin:从标准输入接收用户密码;
echo "PASSWORD" | passwd–stdinUSERNAME

root用户可以更改自己密码以及其他普通用户的密码,而普通用户只能更改自己的密码。

[root@localhost home]# passwd user1
Changing password for user user1.
New password: 
BAD PASSWORD: The password fails the dictionary check - it is based on a dictionary word
Retype new password: 
passwd: all authentication tokens updated successfully.

-l 锁定指定用户:

[root@localhost home]# passwd  -l user1
Locking password for user user1.
passwd: Success

QQ截图20160804113043.jpg

-u 解锁用户

[root@localhost home]# passwd  -u user1
Unlocking password for user user1.
passwd: Success

QQ截图20160804113145.jpg

-e:强制用户下次登录修改密码

[root@localhost home]# passwd  -e user1
Expiring password for user user1.
passwd: Success

QQ截图20160804113503.jpg

还有一种修改密码的方法就是使用echo命令管道送给passwd,不过这种方法是明文,可以再历史命令中查看到

echo "PASSWORD" | passwd–stdinUSERNAME

[root@localhost /]# echo "centos" | passwd --stdin xiaoshui
Changing password for user xiaoshui.
passwd: all authentication tokens updated successfully.

chage[OPTION]… LOGIN
-d LAST_DAY
-E, –expiredateEXPIRE_DATE
-I, –inactive INACTIVE
-m, –mindaysMIN_DAYS
-M, –maxdaysMAX_DAYS
-W, –warndaysWARN_DAYS
–l,显示密码策略

chage命令作用和passwd的用法差不多,这里只举例一两个:

[root@localhost /]# chage -l root
Last password change                    : never
Password expires                    : never
Password inactive                    : never
Account expires                        : never
Minimum number of days between password change        : 0
Maximum number of days between password change        : 99999
Number of days of warning before password expires    : 7

chage -d0 表示用户下次登录必须要修改密码:

[root@localhost /]# chage -d0 user1

QQ截图20160804130954.jpg

此外还有一些其他的账户管理命令:

chfn

更该用户的注释信息

2016-08-02_095438.png

finger:查看详细的用户注释信息

QQ截图20160802100211.jpg

chsh 更改用户shell类型

QQ截图20160802101010.jpg

用户组管理:

有关用户组的两个文件:

   /etc/group

   /etc/gshadow

/etc/group存放着用户组信息,/etc/gshadow中存放着组密码及相关信息

/etc/group文件格式:

QQ截图20160802110824.jpg

每个字段用:隔开,分为四个字段:

组名:组密码:GID:组成员

/etc/gshadow文件格式:

QQ截图20160802112334.jpg

组名:组密码:组管理员:组成员

管理用户组也是通过命令来实现;

groupadd[OPTION]… group_name
-g GID: 指明GID号;[GID_MIN, GID_MAX]
-r: 创建系统组(CentOS 6: ID<500;CentOS 7: ID<1000)

[root@localhost /]# groupadd -g 3333 ad
[root@localhost /]# getent group ad
ad:x:3333:

组属性修改:groupmod
groupmod[OPTION]… group
-n group_name: 新名字
-g GID: 新的GID;

[root@localhost /]# groupmod -n newad ad
[root@localhost /]# getent group ad
[root@localhost /]# getent group newad
newad:x:3333:
[root@localhost /]# groupmod -g 3111 newad 
[root@localhost /]# getent group newad
newad:x:3111:

组删除:groupdel
groupdelGROUP

[root@localhost /]# groupdel newad
[root@localhost /]# getent group newad
[root@localhost /]#

组密码:gpasswd
gpasswd[OPTION] GROUP
-a user: 将user添加至指定组中;
-d user: 从指定组中移除用户user
-A user1,user2,…: 设置有管理权限的用户列表
newgrp命令:临时切换基本组;
如果用户本不属于此组,则需要组密码

[root@localhost /]# gpasswd -a user1 root
Adding user user1 to group root
[root@localhost /]# id user1
uid=4329(user1) gid=4329(user1) groups=4329(user1),0(root)
[root@localhost /]# gpasswd -d user1 root
Removing user user1 from group root
[root@localhost /]# id user1
uid=4329(user1) gid=4329(user1) groups=4329(user1)
[root@localhost /]# gpasswd -A user1 user2
[root@localhost /]# getent gshadow user2
user2:!:user1:

组密码:使用没有加入过的组名当作当前主组时候,需要输入这个组的组密码

QQ截图20160802112840.jpg

groupmems[options] [action]
options:
-g, –group groupname更改为指定组(只有root)
Actions:
-a, –add username 指定用户加入组
-d, –delete username 从组中删除用户
-p, –purge 从组中清除所有成员
-l, –list 显示组成员列表

groupmems就不练习,基本上用法都差不多

[root@localhost /]# groupmems -l 
gentoo  jane

groups [OPTION].[USERNAME]… 查看用户所属组列表

[root@localhost /]# groups gentoo
gentoo : gentoo root bin    

好了,以上是此次博客的全部内容,还是需要多多练习,才能熟练掌握。

原创文章,作者:我的滑板鞋,如若转载,请注明出处:http://www.178linux.com/28329

(0)
我的滑板鞋我的滑板鞋
上一篇 2016-08-04
下一篇 2016-08-04

相关推荐

  • Linux中的文件和目录的权限管理

    Linux系统通过完善的权限管理来限制每一个用户对于系统中文档和目录的访问。在Linux系统中,文件和目录的权限是有些差异的。一、权限介绍:如上所示,通过ll命令列出目录下文件的时候同时也会列出文件的权限,从第二位开始,一直到第九位,即rw-r–r–就是文件的权限描述:其中3位为一组:第一组:rw-:代表文件的属主(user)对文件的…

    Linux干货 2017-04-01
  • 以后的运维是linux系统的天下

       搞IT行业差不多10年了,也接触过网络设备的配置,比如防火墙和交换机的管理,也管理过虚拟化平台,比如vmware的虚拟化,还懂一些简单的oracle数据库的安装,存储、光钎交换机的配置等,因为曾经在传统企业做过8年多的网管,当时的企业规模也是比较大,也接触了很多设备,但就是linux接触的不是很多,后来去一家公司做系统集成,也是什么…

    Linux干货 2016-10-19
  • 权限管理练习题

    权限管理练习题:     1、当用户xiaoming对/testdir 目录无执行权限时,意味着无法做哪些操作?         不能cd到该目录下,不能ls -l访问目录里面文件元数据的信息    &nbsp…

    Linux干货 2016-08-04
  • 文本三剑客之AWK

    文本三剑客—-awk(3) awk简介 awk是一个强大的文本分析工具,与grep(查找)、sed(编辑)一并称为“文本处理三剑客”。awk最强大的功能是对数据分析并生成报告。 awk有3个不同版本: awk、nawk和gawk,未作特别说明,一般指gawk,gawk是AWK的GNU版本。 awk其名称得自于它的创始人 Alfred Aho 、P…

    2017-07-17
  • 马哥教育网络班21期+第一周课程练习

    1,描述计算机的组成及其功能。 2.按系列罗列linux的发行版,并描述不同发行版之间的练习与区别。 3.描述linux的哲学思想,并按照自己的理解对其进行解释性描述。 1.       一切皆文件,计算机中所有的文件目录,        包括计算机的硬件设备显示为文件格式。 2…

    Linux干货 2016-07-07
  • 网络管理3

    七、网络接口配置-bonding     Bonding         就是将多块网卡绑定同一IP地址对外提供服务,可以实现高可用或者负载均衡。当然,直接给两块网卡设置同一IP地址是不可能的。通过bonding,虚拟一块网卡对外提供连接,…

    Linux干货 2016-09-10

评论列表(1条)

  • 马哥教育
    马哥教育 2016-08-04 13:56

    总结的很详细,一个命令主要有语法、选项、参数,希望能分层次,有缩进的写下来,这样看起来不会这么凌乱了。