本次博文的主题是Linux用户和组。我们先来说说操作系统中用户和组的基本知识哈!

一、用户和组基础:

有谁能告诉我“用户”和“组”分别是什么?OS是如何识别每个用户的?

用户:是能够获取系统资源的权限的集合;它由两部分组成:用户名+用户ID。我们的操作系统就是通过用户ID来识别每个用户的(类似于人的姓名与×××号码)。

操作系统上有个与用户相关的信息库,采用某种对应关系,将每个用户的用户名与用户ID对应,例如:root用户的用户ID是0。

组:指派权限的容器,用于一次性完成用户权限的指派。它由两部分组成:组名+GID。Linux就是通过GID来识别每个组的。

那么操作系统保存用户和组的信息的方式主要有如下几种:

1、存放在文本文件中;

2、存放在数据库中;

3、采用ldap(轻量级目录访问协议)保存;

Linux中,所有的配置都是保存在配置文件中的,下面具体说说Linux下跟用户和组相关的配置文件:

1、/etc/passwd:保存用户的属性信息的文件

字段说明:

从左到右共7个字段分别表示为:

用户名:密码占位符:UID:GID:注释信息:家目录:默认shell

说明:所谓密码占位符只是表示这是一个密码字段,但用户密码却不是存放在这里,而是存放在/etc/shadow文件中。之所以这样设计,是由于在早期的UNIX操作系统中,用户账号的密码信息是存放在passwd中的,但这样不法用户可以很容易地获取密码字串并进行暴力破解,因此存在一定的安全隐患。所以后来经改进后,将密码转存入专门的shadow文件中,并严格控制权限,这样passwd文件中就仅保留密码占位符"x”

默认法则:

UID:已有最大的UID+1

GID:/etc/group中已有最大GID+1

家目录:/home/USERNAME

shell:/bin/bash

2、/etc/shadow:用户的影子口令

从左到右共9个字段,分别表示如下:

用户名:用户密码:最近一次修改密码的时间:密码最短使用期限:密码最长使用期限:告警时间:帐号的非活动天数:账号过期日期:保留字段

每个字段的具体说明如下:

用户名 用户密码 最近一次修改密码的时间 密码最短使用期限 密码最长使用期限 告警时间 帐号的非活动天数 账号过期日期 保留字段
表示用户的登录名称 如果有些用户在这个字段是"x"或"*"或"!!"表示此用户不能登录到系统;          
密码一共由3个字段组成,用$分隔,各字段的含义分别为:

第一个字段:

$1:表示加密方法

第二个字段:

$8位随机数:salt              
第三个字段:

$字符串: 真正的密码

从1970年1月1号开始至上次修改密码时,中间所经过的天数; 表示用户必须经过多少天才能修改其口令;如果设置成0,则禁用此功能 两次修改密码的最长时间间隔;在密码到期时必须要修改密码,99999表示不需要修改 提前多少天通知用户口令即将过期 口令过期后多久禁用此用户,也就是说系统不会再让此用户登录,也不会提示用户过期,而是完全禁用此用户账号 指定的时间到达,即锁定此账号(从1970年1月1号开始的天数),如果这个字段的值为空,表示此账号永久可用 一般为空,为Linux以后发展保留的字段

补充知识:加密方法

  • 对称加密:加密和解密使用同一个密钥;最常见的为:3DES(3轮DES加密), AES(Advanced Encrption Standard);密钥管理及分发功能很差;

  • 公钥加密: 也叫非对称加密,私钥/公钥(s/p),公钥可以从私钥中提取得到;加密速度慢,但安全性高;通常用于密钥分发;目前常见的公钥加密的算法为:RSA, DSA

  • 单向加密:提取数据特征码,特性:      
            (1)无论输入是多大的数据,其输出是定长的;       
            (2)如果输入的数据一样,其结果一定一样;反之,输入数据微小改变,将引起结果的巨大改变,这种现象称之为“雪崩效应”;       
            (3)算法:md5(message digest),SHA(Secure Hash Algorithm), SHA1       
                   md5: 无论输入是多长,输出为定长128bits       
                   sha1: 无论输入是多长,输出为定长160bits       
                   sha-256: 无论输入是多长,输出为定长256bits       
                   sha-512: 无论输入是多长,输出为定长512bits

"salt”的意义:随机加入,防止用户设置同一个口令后的加密算法生成的密码相同;

举例说明如下:

[root@rhel5 home]# openssl passwd -1 -salt 12345678 redhat
$1$12345678$0ME5N6oDyoEAwUp7b5UDM/
[root@rhel5 home]# openssl passwd -1 -salt 12345678redhat    
$1$12345678$0ME5N6oDyoEAwUp7b5UDM/        #可以看到,两次输入的salt相同,加密后生成的密码是相同的哈
[root@rhel5 home]# openssl passwd -1 -salt 12345698 redhat    
$1$12345698$jX8ffqc5lSEfqT.NXmyP2.        #这里可以看到,两次输入的salt有细微的差别,则生成的密码差别甚大

3、/etc/group:组的属性信息

一共4个字段;从左到右各字段的含义:

组名:密码占位符:GID:以此组为额外组的用户列表,用户间用逗号分隔

4、/etc/gshadow:组的密码(小知识:windows系统中组是没有密码的)

一共4个字段,从左到右各字段的含义:

组名称:组密码(空或!表示没有密码):组管理者(可以为空,如果有多个管理者用逗号隔开):组成员(如果有多个成员,用逗号隔开)

Linux中组的类型有哪些呢?下面具体说说:

从用户的角度来说,Linux中的组类型有两种:

1、私有组:也叫“基本组”,创建用户时如果不指明其基本组,则会默认创建与用户同名的基本组

2、额外组:每个用户可以同时加入多个组,用户另外加入的组称为该用户的额外组(附加组)

Linux中用户和组可以用下面的表格来总结:

用户类型说明 用户/组分类 UID/GID范围 说明
Linux系统中的所有用户账号信息都存放在/etc/passwd和/etc/shadow文件中,文件的每一行就代表一个用户。Windows系统中所有本地用户账号信息都存放%systemroot%\system32\config\sam文件和注册表中;域用户账户信息则存放在活动目录数据库中; 管理员root 0 root是Linux系统中默认的超级用户账号,类似于windows系统中的administrator账户,但需要注意的是Linux中真正的管理员只有root用户一个
Linux系统每创建一个用户账号就会自动创建一个与该账号同名的用户组,该组为用户的基本组。每个用户可以同时加入多个组,用户另外加入的组称为该用户的额外组(附加组);Windows系统没有所谓基本组和附加组的概念 系统用户 1~499 在安装Linux系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登陆到系统,而仅用于维持系统或程序的正常运行

普通用户(可登陆用户)

500+ 此类用户账号需要由root用户或其他管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的主目录中有完全权限
管理员组(root) 0 类似于windows系统的系统管理员组
系统用户组 1~499 一般加入一些用于日常系统管理的用户
普通用户组 500+ 当创建用户时,默认创建一个与用户名同名的基本组,还可以指定加入其它额外组

二、用户和组的管理:

创建用户:

命令名称:useradd(adduser)

命令所在路径:/usr/sbin/useradd

执行权限:root

功能描述:创建用户,在添加用户的过程中会自动完成以下几项任务:

(1)在“/etc/passwd”和“etc/shadow”文件的末尾增加该用户账号的记录;

(2)若未指明用户的主目录,则在“/home”目录下自动创建与该用户账号同名的主目录,并在该目录中建立用户的初始配置文件;

(3)若未指明用户所属的组,则自动创建与该用户账号同名的基本组账号,组账号的记录信息保存在"/etc/group”和"/etc/gshadow”文件中;

语法:useradd [options] LOGIN

范例:

[root@rhel5 jjx]#tail -2 /etc/passwd
jjx:x:500:500:jijianxin:/home/jjx:/bin/bash
xin:x:501:501::/home/xin:/bin/bash
[root@rhel5 jjx]# useradd redhat
[root@rhel5 jjx]# tail -2 /etc/passwd
xin:x:501:501::/home/xin:/bin/bash
redhat:x:502:502::/home/redhat:/bin/bash
[root@rhel5 jjx]#

通过useradd命令的选项可以定制用户属性:

-u:定制UID,有效范围0~65535

范例:

[root@rhel5 jjx]# useradd -u 1000 ubuntu
[root@rhel5 jjx]# tail-3/etc/passwd
xin:x:501:501::/home/xin:/bin/bash
redhat:x:502:502::/home/redhat:/bin/bash
ubuntu:x:1000:1000::/home/ubuntu:/bin/bash

-g:定制GID,有效范围为已有的GID(注意:指定GID时,所表示的组必须存在)

范例:

[root@rhel5 jjx]# useradd -g 1001 debian
useradd:未知的组 1001
[root@rhel5 jjx]#

可以看到:指定的组不存在(可以事先用groupadd命令添加);

-G:创建额外组,有效范围为已有的GID;可以有多个,用逗号分隔

范例:

[root@rhel5 ~]# groupadd testGroup
[root@rhel5 ~]# useradd -G testGroup user01
[root@rhel5 ~]#tail -1 /etc/passwd
user01:x:2003:2004::/home/user01:/bin/bash
[root@rhel5 ~]#tail -2 /etc/group
testGroup:x:2003:user01   #创建了testGroup额外组
user01:x:2004:   #系统自动创建了与用户user01同名的基本组
[root@rhel5 ~]#id -ng user01
user01   #验证用户user01的基本组
[root@rhel5 ~]#

-c:定制注释信息

范例:

[root@rhel5 jjx]# useradd -c "Linux Distribution" gentoo
[root@rhel5 jjx]# tail-4/etc/passwd
xin:x:501:501::/home/xin:/bin/bash
redhat:x:502:502::/home/redhat:/bin/bash
ubuntu:x:1000:1000::/home/ubuntu:/bin/bash
gentoo:x:1001:1001:Linux Distribution:/home/gentoo:/bin/bash   #可以看到"gentoo"用户属性中注释字段中添加了相应的条目
[root@rhel5 jjx]#

说明:以上选项可以组合起来使用,例如:

[root@rhel5 jjx]# useradd -c "Light Weight Distribution" -u 2000 archlinux
[root@rhel5 jjx]# tail -1 /etc/passwd
archlinux:x:2000:2000:Light Weight Distribution:/home/archlinux:/bin/bash
[root@rhel5 jjx]#

-d:定制所创建用户的家目录(/path/to/somewhere)

范例:

[root@rhel5 jjx]#mkdir /tmp/users
[root@rhel5 jjx]# useradd -d /tmp/users/user01 slackware
[root@rhel5 jjx]#tail-1/etc/passwd
slackware:x:2001:2001::/tmp/users/user01:/bin/bash  #可以看出,用户slackware的家目录被指定为user01
[root@rhel5 jjx]#

补充知识1:转换用户

su(switch user):

范例:

[root@rhel5 ~]#su jjx
[jjx@rhel5 root]$ exit
exit
[root@rhel5 ~]#su - jjx
[jjx@rhel5 ~]$pwd
/home/jjx
[jjx@rhel5 ~]$ exit
logout

提示:中间那个 - 符号的意思完整切换到jjx用户。所谓的完整就是连着所有变量一起切换,即交互式切换;否则属于非交互式切换。大家不要忘记,不然你切换用户会出现莫名其妙的问题。管理员切换到普通用户不需要输入密码,反之不行!

对于“-”;切换的效果是看不出来的,在哪里能体现到这一点?

举例说明:先是完整切换到一般用户,然后不用切换回root。再用useradd新建一个用户试试。

[root@rhel5 ~]#su - jjx
[jjx@rhel5 ~]$su root
口令:
[root@rhel5 jjx]# useradd user01
bash: useradd: command not found   #可以看到,出现了无法找到命令的提示
[root@rhel5 jjx]#

补充知识2:如何查看有哪些shell可用?

cat /etc/shells,举例如下:

[root@rhel5 ~]#cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/tcsh
/bin/csh
/bin/ksh
/bin/zsh

提示:SHELL是个环境变量(保存当前用户的shell)

-s:定制用户的shell

[root@rhel5 ~]# useradd -s /etc/csh suse
[root@rhel5 ~]#tail-1/etc/passwd
suse:x:2002:2002::/home/suse:/etc/csh    #可以看到指定新用户suse的shell为csh。

补充知识: 如何查看用户id?有两种方法:

1、id命令:

命令名称:id

命令所在路径:/usr/bin/id

执行权限:所有用户

功能描述:查看用户的id

语法:id [OPTION] [USERNAME]

常有选项:

-u:查看UID

-g:查看GID

-n:一般与-u、-g合用,显示的是用户名或组名

范例:

[root@rhel5 ~]#tail -1 /etc/passwd
suse:x:2002:2002::/home/suse:/etc/csh
[root@rhel5 ~]#id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@rhel5 ~]#id -u suse
2002
[root@rhel5 ~]#id -un suse
suse    #可以看到显示的是用户名哈

2:finger命令(如果没有此命令,则需要用"yum install finger”导入一下)

语法:finger [user]

范例:

[root@rhel5 ~]# finger suse
Login: suse 
Name: (null)
Directory: /home/suse
Shell: /etc/csh
Never logged in.
No mail.
No Plan.


删除用户:

命令名称:userdel

命令所在路径:/usr/sbin/userdel

执行权限:root

功能描述:删除用户

语法:userdel [options] LOGIN

范例:

不带任何选项删除用户账号是不会删除其家目录的:

常用选项:

-r:删除用户连同其家目录一并删除

范例:

[root@rhel5 ~]#tail -2 /etc/passwd
user01:x:2003:3005::/home/user01:/bin/bash
user02:x:2004:2004::/home/user02:/bin/bash
[root@rhel5 ~]# userdel -r user02
[root@rhel5 ~]#id user02
id: user02:无此用户
[root@rhel5 ~]#ls /home/archlinux  
gentoo  jjx  mandriva  redhat  ubuntu  user01  xin
[root@rhel5 ~]#ls /home/user02
ls: /home/user02: 没有那个文件或目录     #user02的家目录一并被删除了哈
[root@rhel5 ~]#


修改用户属性

命令名称:useremod

命令所在路径:/usr/sbin/usermod

执行权限:root

功能描述:修改用户属性

语法:usermod [option] username

常用选项:

-a -G合用:修改用户的额外组

范例:

[root@rhel5 etc]#tail -5 /etc/passwd
mandriva:x:2002:3003::/home/mandriva:/bin/bash
user01:x:2003:3005::/home/user01:/bin/bash
hadoop:x:2004:2004::/home/hadoop:/bin/bash
hive:x:2005:2005::/home/hive:/bin/bash
centos:x:2006:2006::/home/centos:/bin/bash
[root@rhel5 etc]# usermod -a -G centos user01  #user01加入额外组centos
[root@rhel5 etc]# id user01    #验证命令结果
uid=2003(user01) gid=3005(user01)groups=3005(user01),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@rhel5 etc]# tail-5/etc/group
grp02:x:5000:
magedu:x:5001:
hadoop:x:2004:
hive:x:2005:
centos:x:2006:user01   #从这里也可以看出usere01被加入了额外组centos哈

-l:修改用户登录名

范例:

[root@rhel5 etc]#id user01
uid=2003(user01) gid=3005(user01)groups=3005(user01),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@rhel5 etc]# usermod -l user1 user01  #将user01用户名修改为user1
[root@rhel5 etc]# id user1  #验证命令结果
uid=2003(user1) gid=3005(user01)groups=3005(user01),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh

-d -m合用:修改用户的家目录(-m是把原有家目录里的数据一并移入新的家目录中)

范例:

[root@rhel5 home]#tail -2 /etc/passwd
centos:x:2006:2006::/home/centos:/bin/bash
user1:x:2003:3005::/home/user01:/bin/bash
[root@rhel5 home]# ls /home/user01/   #查看用户user1原来家目录user01的内容
rc  rc.local  rc.sysinit
[root@rhel5 home]# usermod -d /home/user1 -m user1  #修改用户user1的家目录为/home/user1,并且将原来家目录里的内容一并迁移过去
[root@rhel5 home]# ls /home/   #验证结果
archlinux  centos  gentoo  hadoop  hive  jjx  mandriva  redhat  ubuntu  user1  xin    
[root@rhel5 home]# ls /home/user1
rc  rc.local  rc.sysinit

-e:以“MM/DD/YY”为格式,指定账号的过期时间

范例:

[root@rhel5 home]#tail -3 /etc/shadow
hive:!!:16077:0:99999:7:::
centos:!!:16077:0:99999:7:::
user1:!!:16069:0:99999:7:::
[root@rhel5 home]# usermod -e 02/18/2014 user1    #修改user1的账号过期时间,系统会自动换算成自1970年1月1日开始的天数
[root@rhel5 home]# tail -1 /etc/shadow
user1:!!:16069:0:99999:7::16119:

-f #: 修改用户账号的非活动天数;

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16069:0:99999:7::16119:
[root@rhel5 home]# usermod -f7 user1  #修改user1账号的非活动天数为7天,7天后系统会禁用user1用户账号
[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16069:0:99999:7:7:16119:


修改用户影子口令属性:

命令名称:passwd

命令所在路径:/usr/bin/passwd

执行权限:root(普通用户只能用passwd命令修改自己的密码而不能修改密码的相关属性)

功能描述:修改密码属性

语法:passwd [options] username

常用选项:

-n: 密码最短使用天数;   
范例:

[redhat@rhel5 ~]$passwd -n 8
redhatOnly root can do that.  #提示只有管理员才能更改密码的属性哈
[root@rhel5 home]# passwd -n 8 redhat
Adjusting aging data for user redhat.
passwd: Success
[root@rhel5 home]# grep ^redhat /etc/shadow
redhat:!!:16062:8:99999:7::16216:

-x:最长使用天数;

[root@rhel5 home]# !grepgrep ^redhat /etc/shadow
redhat:!!:16062:8:99999:7::16216:
[root@rhel5 home]# passwd -x 365 redhat
Adjusting aging data for user redhat.
passwd: Success
[root@rhel5 home]# !grepgrep ^redhat /etc/shadow
redhat:!!:16062:8:365:7::16216: #将redhat用户的密码的最长使用天数改为365天

-w: 警告天数;

[root@rhel5 home]# !grep
grep ^redhat /etc/shadow
redhat:!!:16062:8:365:7::16216:
[root@rhel5 home]# passwd -w 10 redhat
Adjusting aging data for user redhat.
passwd: Success
[root@rhel5 home]# !grep
grep ^redhat /etc/shadow
redhat:!!:16062:8:365:10::16216:   #将redhat用户的密码的警告天数修改为10天(原来是7天),提醒用户10天后密码过期哈

-i: 非活动天数;

[root@rhel5 home]# !grep
grep ^redhat /etc/shadow
redhat:!!:16062:8:365:10::16216:
[root@rhel5 home]# passwd-i7 redhat
Adjusting aging data for user redhat.
passwd: Success
[root@rhel5 home]# !grep
grep ^redhat /etc/shadow
redhat:!!:16062:8:365:10:7:16216:   #修改用户redhat的密码非活动天数为7天,7天后系统将禁用此账号哈

-S:显示用户状态信息

[root@rhel5 home]#passwd -S redhat
redhat LK 2013-12-238365107(Password locked.)  #显示redhat用户的账号信息(LK表示锁定此账号)

命令名称:chage

命令所在路径:/usr/bin/chage

执行权限:root(普通用户只能用chage –l 命令查看自己密码的详细信息)

功能描述:修改影子口令属性(即密码时效管理)

语法:chage [options] username

常用选项:

-l:列出用户密码的详细时间参数

范例:

[root@rhel5 home]# chage -l 
user1Last password change                      : Dec 30,2013Password 
expires                                        :neverPassword 
inactive                                       : neverAccount 
expires                                        : Feb 18,2014
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

-d: 修改密码的最近一次修改时间,/etc/shadow中的第三字段,为0则表示用户第一次登录强制修改密码

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16040:0:99999:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Dec 01,2013
Password expires                                        : never
Password inactive                                       : neverAccount 
expires                                                 : Feb 18,2014
Minimum number of days between password change          : 0
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 
[root@rhel5 home]# chage -d11/01/2013 user1       #修改user1密码的最近一次修改时间为2013年11月1日
[root@rhel5 home]# tail -1 /etc/shadow             #验证结果
user1:!!:16010:0:99999:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Feb 18,2014
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

-m, –mindays MIN_DAYS:密码最短使用期限,/etc/shadow中的第四字段;

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16010:0:99999:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Feb 18,2014
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
[root@rhel5 home]# chage -m3 user1    #将user1的密码最短使用期限设置为3天
[root@rhel5 home]# tail-1/etc/shadow
user1:!!:16010:3:99999:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7

-M, --maxdays MAX_DAYS:密码最长使用期限,/etc/shadow中的第五字段;

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16010:3:99999:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : never
Password inactive                                       : never
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 99999
Number of days of warning before password expires       : 7
[root@rhel5 home]# chage -M365 user1         #设置user1的密码最长使用期限为365天
[root@rhel5 home]# tail-1/etc/shadow
user1:!!:16010:3:365:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 08,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 7

-W, --warndays WARN_DAYS:警告天数,/etc/shadow中的第六字段;

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16010:3:365:7:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 08,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 7
[root@rhel5 home]# chage -W10 user1      #提醒user1用户10天后密码到期(原来是7天)
10[root@rhel5 home]# tail-1/etc/shadow
user1:!!:16010:3:365:10:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 08,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 10

-I, --inactive INACTIVE:非活动天数,/etc/shadow中的第七字段;   
范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16010:3:365:10:7:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 08,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 10
[root@rhel5 home]# chage -I14 user1         #修改user1用户账号口令过期后14天禁用user1用户
[root@rhel5 home]# tail-1/etc/shadow
user1:!!:16010:3:365:10:14:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 15,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 10

-E, --expiredate EXPIRE_DATE:密码过期时间,/etc/shadow中的第八字段;

范例:

[root@rhel5 home]#tail -1 /etc/shadow
user1:!!:16010:3:365:10:14:16119:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 15,2014
Account expires                                         : Feb 18,2014
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 10
[root@rhel5 home]# chage -E01/01/2015 user1       #修改user1用户账号的密码在2015年1月1日过期
[root@rhel5 home]# tail -1 /etc/shadow
user1:!!:16010:3:365:10:14:16436:
[root@rhel5 home]# chage -l user1
Last password change                                    : Nov 01,2013
Password expires                                        : Nov 01,2014
Password inactive                                       : Nov 15,2014
Account expires                                         : Jan 01,2015
Minimum number of days between password change          : 3
Maximum number of days between password change          : 365
Number of days of warning before password expires       : 10


创建组

命令名称:groupadd(addgroup)

命令所在路径:/usr/sbin/groupadd

执行权限:root组

功能描述:创建组

语法:groupadd [options] groupname

范例:

[root@rhel5 ~]# groupadd grp01
[root@rhel5 ~]#tail -3 /etc/group
linux:x:3004:mandrivauser01:x:3005:grp01:x:3006:
[root@rhel5 ~]#

常用选项:

-g:用指定的GID创建新组

[root@rhel5 ~]# groupadd -g 5000 grp02  #创建grp02组,GID=5000
[root@rhel5 ~]#tail -3 /etc/group
user01:x:3005:
grp01:x:3006:
grp02:x:5000:
[root@rhel5 ~]#

-r:创建系统组

[root@rhel5 ~]#groupadd –r DBA
[root@rhel5 ~]#tail -3 /etc/group
grp01:x:3006:
grp02:x:5000:
DBA:x:101:    #可以看到DBA组的GID小于500,属于系统组哈


添加、删除组成员

命令名称:gpasswd

命令所在路径:/usr/bin/gpasswd

执行权限:root

功能描述:本来是用于设置组账号的密码,但很少使用,实际上该命令更多地用来添加和删除组成员

语法:gpasswd [选项] group

常用选项:

-a:添加组成员

范例:

[root@rhel5 home]#tail -3 /etc/group
centos:x:2006:
DBA:x:101:
user1:x:5002:
[root@rhel5 home]# gpasswd -a user1 centos   #将用户user1加入centos组
Adding user user1 to group centos
[root@rhel5 home]# id user1
uid=2003(user1) gid=5002(user1)groups=5002(user1),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh[root@rhel5 home]# tail -3 /etc/group
centos:x:2006:user1DBA:x:101:user1:x:5002:

-d:删除组成员

范例:

[root@rhel5 home]#tail -3 /etc/group
centos:x:2006:user1DBA:x:101:user1:x:5002:
[root@rhel5 home]# gpasswd -d user1 centos
Removing user user1 from group centos     #从centos组中删除用户user1
[root@rhel5 home]# tail -3 /etc/group
centos:x:2006:
DBA:x:101:
user1:x:5002:
[root@rhel5 home]# id user1
uid=2003(user1) gid=5002(user1)groups=5002(user1) context=root:system_r:unconfined_t:SystemLow-SystemHigh


临时设定基本组

命令名称:newgrp

命令所在路径:/usr/bin/newgrp

执行权限:所有用户

功能描述:临时设定指定组为其基本组,若被指定的组不是该用户的额外组,则在设定时需要该指定组的密码

语法:newgrp  [-]  groupname

范例:

[root@rhel5 ~]# tail -3 /etc/group
centos:x:2006:
DBA:x:101:
user1:x:5002:
[root@rhel5 ~]# gpasswd centos    #修改centos组的密码
正在修改 centos 组的密码新密码:
请重新输入新密码:
[root@rhel5 ~]# su - jjx
[jjx@rhel5 ~]$ ls
b_d  bin  file01.txt  file02.txt  include  kerberos  lang.sh  lib  sbin  scripts  sudo  test  testgrp  tmp
[jjx@rhel5 ~]$ cd tmp
[jjx@rhel5 tmp]$ ll
总计 20
drwxr-xr-x 2 root root 409601-0720:51 data
-rw-rw-r-- 1 jjx  jjx     001-2011:29 hellgrp
drwxr-xr-x 3 root root 409612-2316:27 users
[jjx@rhel5 tmp]$ id
uid=500(jjx) gid=500(jjx) groups=0(root),500(jjx) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[jjx@rhel5 tmp]$ newgrp centos   #临时设定centos组为用户jjx的基本组
密码:
[jjx@rhel5 tmp]$ id    #可以看到jjx的基本组被设定成了centos哈
uid=500(jjx) gid=2006(centos) groups=0(root),500(jjx),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[jjx@rhel5 tmp]$ touch hellogrp01    [jjx@rhel5 tmp]$ ll
总计 24
drwxr-xr-x 2 root root   409601-0720:51 data
-rw-rw-r-- 1 jjx  jjx       001-2011:29 hellgrp
-rw-r--r-- 1 jjx  centos    001-2011:34 hellogrp01  #可以看到hellogrp01的属组为centos哈
drwxr-xr-x 3 root root   409612-2316:27 users
[jjx@rhel5 tmp]$ exit   #退出centos组
exit
[jjx@rhel5 tmp]$ id    #用户jjx的基本组又变回原来的jjx组了哈
uid=500(jjx) gid=500(jjx) groups=0(root),500(jjx) context=root:system_r:unconfined_t:SystemLow-SystemHigh


修改组属性

命令名称:groupmod

命令所在路径:/usr/sbin/groupmod

执行权限:root

功能描述:修改组属性

语法:groupmod [选项] groupname

常用选项:

-n:修改组名(注意:新组名不能与已有的组名相同,否则不能改名)

范例:

[root@rhel5 home]#id user1
uid=2003(user1) gid=5002(test)groups=5002(test),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@rhel5 home]# groupmod -n user1 test   #将test组名改为user1
[root@rhel5 home]# id user1
uid=2003(user1) gid=5002(user1)groups=5002(user1),2006(centos) context=root:system_r:unconfined_t:SystemLow-SystemHigh
[root@rhel5 home]# groupmod -n centos user1
groupmod: centos is not a unique name      #提示centos的组名已经存在不能修改哈

-g:修改指定组的GID,如果被指定的GID存在而要强制修改,则与-o选项合用

范例:

[root@rhel5 home]#tail -1 /etc/group
51CTO:x:5004:
[root@rhel5 home]# groupmod -g5002 51CTO 
groupmod: 5002 is not a unique GID     #提示GID=5002已经存在,不能被指定哈
[root@rhel5 home]# groupmod -g5002-o 51CTO   #强制指定GID=5002
[root@rhel5 home]# tail-3/etc/group
DBA:x:101:
user1:x:5002:
51CTO:x:5002:


删除组

命令名称:groupdel

命令所在路径:/usr/sbin/groupdel

执行权限:root组

功能描述:删除组(若删除群组为某些用户的基本组,则必须先删除这些用户后,方能删除群组)

语法:groupdel groupname

范例:

[root@rhel5 home]# groupdel 51CTO
groupdel: cannot remove user's primary group.
[root@rhel5 home]#tail-3/etc/group
DBA:x:101:
user1:x:5002:
51CTO:x:5002:      #因为51CTO组的GID与user1组的GID相同,所以不让删除哈
[root@rhel5 home]# groupmod -g5003 51CTO
[root@rhel5 home]# groupdel 51CTO
[root@rhel5 home]# tail-3/etc/group
centos:x:2006:DBA:x:101:user1:x:5002:

本次博文的内容就这么多哈,欢迎大家指正!下期我们来说说用户权限哈!~~

转载于:https://blog.51cto.com/sweetpotato/1352690

Linux运维实战之用户和组相关推荐

  1. linux运维实战练习--用户和组管理各命令的使用

    1.useradd:创建用户 Redhat/CentOS,会从/etc/login.def获得自己的配置参数,这些参数决定了口令过期的控制.加密算法.邮件存储文件,以及UID/GID范围等问题) . ...

  2. Linux运维实战|大文件切割

    介绍 日常工作中需要对日志文件进行分析,当日志文件过大时,Linux中使用vim.cat.vim.grep.awk等这些工具对大文件日志进行分析将会成为梦魇,具体表现在: 执行速度缓慢,文件内容需要加 ...

  3. 《Linux运维实战:Centos7.6一键离线部署mongodb4.2.23副本集群》

    一.部署背景 由于业务系统的特殊性,我们需要面向不通的客户安装我们的业务系统,而作为基础组件中的mongodb针对不同的客户环境需要多次部署,作为一个运维工程师,提升工作效率也是工作中的重要一环.所以 ...

  4. Linux运维实战:CentOS7.6操作系统从入门到精通(6-10)

    第6章 CentOS用户管理 第7章 CentOS 7 文件权限管理 第8章 CentOS 7 程序包的管理与安装 第9章 文件的归档和压缩 第10章 CentOS 7 系统进程管理 Linux运维实 ...

  5. 《Linux运维实战:使用mongodump和mongorestore备份与恢复Mongodb数据》

    一.备份与恢复方案 mongodump是MongoDB官方提供的备份工具,它可以从MongoDB数据库读取数据,并生成BSON文件,mongodump适合用于备份和恢复数据量较小的MongoDB数据库 ...

  6. 老男孩linux运维实战培训中心讲师介绍

    老男孩linux运维实战培训中心讲师介绍 老男孩,资深unix/Linux系统运维网站架构专家.高级运维总监.从事一线网站运维及系统架构管理10年以上,13年的教育教学培训经历(擅长教育心理,职业规划 ...

  7. 《Linux运维实战:使用openssl生成免费证书》

    文章目录 一.背景 二.生成证书 2.1.证书格式为cer 2.2.证书格式为pem 三.Nginx配置 四.安装客户端证书 总结:整理不易,如果对你有帮助,可否点赞关注一下? 一.背景 由于第三方外 ...

  8. Linux运维实战:CentOS7.6操作系统从入门到精通(11-15)

    第11章 重定向和文件的查找 第12章 磁盘介绍及管理 第13章 Linux文件系统结构 第14章 RAID的原理与搭建 第15章 LVM管理和SSM工具使用 Linux运维实战:CentOS7.6操 ...

  9. 《Linux运维实战:使用Percona XtraBackup物理备份与恢复Mysql数据》

    一.Percona XtraBackup工具介绍 Percona XtraBackup是世界上唯一开源.免费的MySQL热备份软件,可为InnoDB和XtraDB数据库执行非阻塞备份.Percona ...

最新文章

  1. Docker容器私有仓库——Harbor私有仓库的搭建
  2. 【Paper】2021_领导-跟随多智能体系统容错一致性控制
  3. react 引入html文件_React起手式
  4. 白话经典算法系列之中的一个 冒泡排序的三种实现
  5. php订单日期分类,PHP订单即将到来的日期
  6. java递归mysql生成树_java递归生成树结构的数据
  7. 手把手教你如何罗列提纲,避开这3个坑,提升写作效率50%
  8. 常见消息部件(Common Message Components)
  9. two day python基础知识
  10. ubuntu1604 grep sed 正则表达式
  11. 2010―2011幼儿园大班下学期班务计划
  12. 第二篇:读曹德旺《心若菩提》
  13. 初几学的计算机二进制,说说二进制与计算机的那些事儿
  14. 4.多态(Thinking in java学习四)
  15. excel中计算单元格值等于1的数量
  16. linux windos 设计理念,Windows 20 概念设计
  17. NLP - 文本向量化
  18. 象棋软件新霸主诞生,旋风绝杀名手,再次夺冠,一统江湖了
  19. 华中科技大学计算机上机,华中科技大学_2010___考研计算机_复试上机
  20. 利用手机实现计算机无线上网的设置过程,win10系统使用点对点无线网络实现手机共享上网的具体方案...

热门文章

  1. 将批注用于类型化 DataSet (摘自MSDN)
  2. 游戏人生(一),我的lua之旅:那些坑爹的CCBReaderLoad
  3. Flex警告:framework.swc”具有默认样式并且在 library-path 中,表...
  4. 浅议 JavaScript 的 Promises/Futures 模式
  5. Android View体系(六)从源码解析Activity的构成
  6. JavaBean中DAO设计模式介绍
  7. sed用法之批量添加nagios services.cfg监控项
  8. Linux基础学习系列:对于fork()函数的学习,及进程创建相关知识
  9. CSS2简写和常用css总结笔记
  10. JS Array.reduce 实现 Array.map 和 Array.filter