linux基本的用户管理。
⽤户的添加(useradd)⽤户的删除(userdel)⽤户的修改(usermod)⽤户的查看(查看/etc/passwd) id
①⽤户组的添加(groupadd)②⽤户组的删除③⽤户组的查看④⽤户组的修改primary group(主要组),private group(私有组),attachedgroup(附加组)/etc/group存放着⽤户组的信息[root@foundation0 ~]# head /etc/grouproot:x:0:bin:x:1:daemon:x:2:sys:x:3:adm:x:4:tty:x:5:disk:x:6:lp:x:7:mem:x:8:kmem:x:9:/etc/group每⼀个冒号分割了⼀个内容第⼀列表示组名第⼆列表示组密码,x表示密码存放在/etc/gshadows⽂件⾥第三列表示组ID第四列表示"组成员"
①⽤户组的添加
[root@foundation0 ~]# groupadd kcz
[root@foundation0 ~]# grep kcz /etc/group
kcz:x:5001:
[root@foundation0 ~]# grep lsz /etc/group
[root@foundation0 ~]#
[root@foundation0 ~]# groupadd lsz
[root@foundation0 ~]# grep lsz /etc/group
lsz:x:5002:
[root@foundation0 ~]# groupadd lsj
[root@foundation0 ~]# grep lsj /etc/group
lsj:x:5003:
②⽤户组的删除
[root@foundation0 ~]# groupdel lsz
[root@foundation0 ~]# grep lsz /etc/group
[root@foundation0 ~]# grep lsj /etc/group
lsj:x:5003:
[root@foundation0 ~]# groupdel lsj
[root@foundation0 ~]# grep lsj /etc/group
③⽤户组的查看
grep 组名 /etc/group
④⽤户是有UID的,对于⽤户组来说也有GID(group ID),GID也是唯⼀
的。
可以添加⽤户组的同时指定GID
[root@foundation0 ~]# groupadd -g 10000 kcq
[root@foundation0 ~]# grep kcq /etc/group
kcq:x:10000:
⑤修改组(⼀般功能很鸡肋,就是修改个组ID)
[root@foundation0 ~]# groupmod -g 20000 kcq
[root@foundation0 ~]# grep kcq /etc/group
kcq:x:20000:
由于任何⽤户都必须依赖于⽤户组才能存在,所以如果创建⽤户没有指定⽤
户组(primary group),那么系统会为该⽤户创建⼀个同名的组。这个组
叫做该⽤户的private group(私有组),私有组默认⾥⾯只有⼀个和该私
有组同名的⽤户。
经验之谈:私有组的意义就在于让⽤户有了⼀个⽤户组。
[root@foundation0 ~]# grep hzz /etc/passwd
hzz:x:5232:5232::/home/hzz:/bin/bash
[root@foundation0 ~]# grep 5232 /etc/group
hzz:x:5232:
如果你创建了⼀个⽤户,指定了该⽤户的所属组,那么该⽤户就没有私有
组。
[root@foundation0 ~]# groupadd lsj -g 30000
[root@foundation0 ~]# useradd tgb -g lsj
[root@foundation0 ~]# grep tgb /etc/passwd
tgb:x:5233:30000::/home/tgb:/bin/bash
[root@foundation0 ~]# grep tgb /etc/group
[root@foundation0 ~]#
/etc/passwd的第四列GID表示该⽤户属于的primary group(主要
组),⼀个⽤户可以属于多个组,记录在/etc/passwd的那个组就是
primary group(主要组)
[root@foundation0 ~]# grep hzz /etc/passwd
hzz:x:5232:5232::/home/hzz:/bin/bash
[root@foundation0 ~]# grep hzz /etc/group
hzz:x:5232:
在上⾯的例⼦,我们看到了,hzz这个组既是hzz⽤户的private group,
⼜是primary group。
添加附加组(attached group),⼀个⽤户只可以属于⼀个primary
group,但是可以同时属于多个attached group
useradd -g 指定的是添加⽤户该⽤户的primary group,-G 指定的是
添加该⽤户的attached group。
[root@foundation0 ~]# groupadd diqiu
[root@foundation0 ~]# useradd yzq -G diqiu
[root@foundation0 ~]# grep yzq /etc/passwd
yzq:x:5236:5236::/home/yzq:/bin/bash
[root@foundation0 ~]# grep 5236 /etc/group
yzq:x:5236:
附加组理论上可以随便将任何⼀个⽤户组当做任何⼀个⽤户的附加组,但是
理论上,应该尽可能的不将私有组作为某个⽤户的附加组。
[root@foundation0 ~]# id yzq
uid=5236(yzq) gid=5236(yzq)
groups=5236(yzq),30001(diqiu)
id查看⼀个⽤户的时候,可以看到uid和gid还有该⽤户属于的所有组。
gid就表示该⽤户的primary group,除了gid之外的所有组都是
attached group。
添加⽤户的时候直接指定附加组
useradd username -G attached group
将⼀个现有的⽤户添加到附加组
[root@foundation0 ~]# useradd gousheng
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng)
[root@foundation0 ~]# usermod -G lsj gousheng
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),30000(lsj)
[root@foundation0 ~]# usermod -G kcq gousheng
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),20000(kcq)
[root@foundation0 ~]# usermod -aG lsj gousheng
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),20000(kcq),30000(lsj)
⽤户密码的管理(最常⻅的运维操作)
[root@foundation0 ~]# usermod -Ga lys gousheng
usermod: group 'a' does not exist'
[root@foundation0 ~]# gpasswd -a gousheng lys
Adding user gousheng to group lys
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),20000(kcq),30000(lsj),5237(lys)
[root@foundation0 ~]# gpasswd -d gousheng lys
Removing user gousheng from group lys
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),20000(kcq),30000(lsj)
[root@foundation0 ~]# gpasswd -d gousheng kcq
Removing user gousheng from group kcq
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng),30000(lsj)
[root@foundation0 ~]# gpasswd -d gousheng lsj
Removing user gousheng from group lsj
[root@foundation0 ~]# id gousheng
uid=5238(gousheng) gid=5238(gousheng)
groups=5238(gousheng)
①给⽤户设置密码
[root@foundation0 ~]# id wjx
uid=5001(wjx) gid=5000(wjx) groups=5000(wjx)
[root@foundation0 ~]# passwd wjx
Changing password for user wjx.
New password: 1
BAD PASSWORD: The password is a palindrome
Retype new password: 1
passwd: all authentication tokens updated successfully.
②⽤户的密码信息存放在/etc/shadow中
[root@foundation0 ~]# grep wjx /etc/shadow
wjx:$6$ae3uY4p/bFgASqKo$pjbAm7hpnwfsEq3fMdvDUIsRmqRhLMHs
kZizAWLZbLUTuI3EcAi7yce0KhNrptMVz5a1z12PrVyN3o4LHYGjU/:1
8363:0:99999:7:::
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:!!:18363:0:99999:7:::
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:$6$iCqzFNJ7wLtjp/96$iKAyxBortuzeDEpFChKZavAnM6qzhlbu
JEdzrECQeZwK8D5UzwwQh/yhTeBOp29tzAvEtNEozxkAg8ZZxChTS.:1
8363:0:99999:7:::
/etc/shadow存放的是密码信息,每⼀列密码信息都被冒号分割开来。
第⼀列表示存放的是哪个⽤户的密码信息(username)
第⼆列存放的就是密码,该密码并不是明⽂的,⽽是使⽤算法⽣成的,算法
在/etc/login.defs中有指定。
第三列存放的是上次修改密码的时间
第四列存放的是密码最⼩有效期
如果是0,就可以⽆限次的不考虑间隔的修改密码
如果是1,就表示,修改完密码之后,必须使⽤该密码⼀天才能再次修改
第五列存放的是密码的最⼤有效期
默认是99999,表示密码99999天就会失效。
如果该数字是3,就表示,3天后密码会过期,如果你想继续使⽤,必须要在
密码到期之前修改。
第六列存放的是密码到期前提前多少天警告的时间信息
如果该数字为7,就表示密码到期之前的7天就会发出警告,告诉你密码即将
过期。
第七列表示⽤户密码到期后宽限⽇期
如果该数字是2,就表示密码到期后,你还能使⽤该密码2天,如果2天到了,
你还没修改或更新密码,密码就失效了。
第⼋列表示账号失效⽇期
第⼋列的⽇期就是账号的失效⽇期。如果到了第⼋列的时间,账号直接失
效。不可登录。
第九列保留
使⽤passwd命令控制⽤户的密码信息
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:$6$iCqzFNJ7wLtjp/96$iKAyxBortuzeDEpFChKZavAnM6qzhlbu
JEdzrECQeZwK8D5UzwwQh/yhTeBOp29tzAvEtNEozxkAg8ZZxChTS.:1
8363:0:99999:7:::
[root@foundation0 ~]# passwd -d tgb
Removing password for user tgb.
passwd: Success
[root@foundation0 ~]# grep tgb /etc/shadow
tgb::18363:0:99999:7:::
-d 参数可以删除⼀个⽤户的密码
passwd不能设置上次修改密码的时间信息
[root@foundation0 ~]# passwd -n 3 -x 10 -w 5 -i 2 tgb
Adjusting aging data for user tgb.
passwd: Success
[root@foundation0 ~]# grep tgb /etc/shadow
tgb::18363:3:10:5:2::
passwd的账号失效⽇期-e,直接加⽤户名,能将该⽤户的密码直接设置过
期。
[root@foundation0 ~]# passwd -e tgb
Expiring password for user tgb.
passwd: Success
[root@foundation0 ~]# grep tgb /etc/shadow
tgb::0:3:10:5:2::
上次修改密码时间的字段变成了0,就表示该⽤户下次登录必须修改密码。在
windows server当中,创建完⽤户,默认该值就是0。
使⽤chage(change age)来修改⽤户的密码信息,相⽐于passwd更灵
活的修改所有的密码信息。
[root@foundation0 ~]# chage -d 1300 -m 2 -M 20 -W 10 -I
4 -E 2021-1-1 tgb
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:$6$akpmgINkDix4ueTo$8g0O70/JD303RjQ7M9iYggZStkpDpHV9
ES/gaipVu5qgORqHDjT61U2664IgPcfNPYR/8wNMG5W0yPpdo0aQ81:1
300:2:20:10:4:18628:
⼀般来说,针对上次修改密码的时候,要么不修改,要么设置为0,表示让⽤
户下次登录必须修改密码。(tgb登录的时候,先输⼊tgb原来的密码,然后
设置tgb新的密码,新的密码必须有⼀定的密码强度)
如何锁定⽤户的密码
[root@foundation0 ~]# passwd -l tgb
Locking password for user tgb.
passwd: Success
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:!!$6$akpmgINkDix4ueTo$8g0O70/JD303RjQ7M9iYggZStkpDpH
V9ES/gaipVu5qgORqHDjT61U2664IgPcfNPYR/8wNMG5W0yPpdo0aQ81
:0:2:20:10:4:18628:
当账号被锁定了,除了root之外,任何其它⽤户不能切换到被锁定的账号
[root@foundation0 ~]# passwd -u tgb
Unlocking password for user tgb.
passwd: Success
[root@foundation0 ~]# grep tgb /etc/shadow
tgb:$6$akpmgINkDix4ueTo$8g0O70/JD303RjQ7M9iYggZStkpDpHV9
ES/gaipVu5qgORqHDjT61U2664IgPcfNPYR/8wNMG5W0yPpdo0aQ81:0
:2:20:10:4:18628:
-l 锁定
-u 解锁
passwd命令root⽤户可以⽤passwd修改任何⽤户的密码,包括⾃⼰的。
普通⽤户只可以⽤passwd命令修改⾃⼰的密码。
[tgb@foundation0 ~]$ passwd wjx
passwd: Only root can specify a user name.
[tgb@foundation0 ~]$
[tgb@foundation0 ~]$ passwd hzz
passwd: Only root can specify a user name.
[tgb@foundation0 ~]$
[tgb@foundation0 ~]$
[tgb@foundation0 ~]$ passwd tgb
passwd: Only root can specify a user name.
[tgb@foundation0 ~]$
[tgb@foundation0 ~]$ passwd
Changing password for user tgb.
Current password:
New password:
普通⽤户想修改⾃⼰的密码,直接passwd就可以的。
passwd --stdin 可以让passwd接收标准的输⼊,只能root使⽤
⽤户组密码信息
[root@foundation0 ~]# echo 123 | passwd --stdin tgb
Changing password for user tgb.
passwd: all authentication tokens updated successfully.
将tgb的密码设置为123
⽤户组密码信息存放在/etc/gshadow
[root@foundation0 ~]# usermod -G lsj tgb
[root@foundation0 ~]# grep lsj /etc/gshadow
lsj:!::tgb
[root@foundation0 ~]# grep lsj /etc/group
lsj:x:30000:tgb
组密码的第⼆列记录的是组密码
默认的组和默认的⽤户⼀样没有密码
[root@foundation0 ~]# gpasswd lsj
Changing the password for group lsj
New Password:
Re-enter new password:
[root@foundation0 ~]# grep lsj /etc/gshadow
lsj:$6$Xw4eSQtu$j5cnpBa/aHXzdub9PQwru5k.9tGw70A6.UOV5ThA
NF4SWwnU.KVmAz5Hl6xz6JaU1LF4ZcG.nf8neb7lfVIjd0::tgb
对于任何⼀个⽤户来说,创建的⽂件,默认的拥有⼈就是该⽤户,默认的所
属组是该⽤户的primary group
[tgb@foundation0 ~]$ id
uid=5239(tgb) gid=5239(tgb) groups=5239(tgb),30000(lsj)
context=unconfined_u:unconfined_r:unconfined_t:s0-
s0:c0.c1023
[tgb@foundation0 ~]$ touch aaa.avi
[tgb@foundation0 ~]$ ls -l
total 0
-rw-rw-r--. 1 tgb tgb 0 Apr 11 22:51 aaa.avi
[tgb@foundation0 ~]$ newgrp lsj
[tgb@foundation0 ~]$ touch bbb.avi
[tgb@foundation0 ~]$ ls -l
total 0
-rw-rw-r--. 1 tgb tgb 0 Apr 11 22:51 aaa.avi
-rw-r--r--. 1 tgb lsj 0 Apr 11 22:51 bbb.avi
newgrp groupname,能让⼀个⽤户临时的切换到另外⼀个组,那么切换成
功之后,该⽤户创建的⽂件就都属于切换后的组。
组密码的作⽤是让那些不属于该组的⽤户,可以切换到该组的⼀种⽅式,只
要提供正确的组密码,即可切换成功。
touch /etc/nologin 除了root之外的所有⽤户都进制登录。
rm -rf /etc/nologin 解除⽤户登录限制