本次博文的主题是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