欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux使用者管理——用户管理

程序员文章站 2022-06-03 08:41:24
...

谈到linux系统,很多人都知道这是一个多用户、多任务的系统,因此可能常常会有很多人同时来使用这台主机进行工作,那么Linux系统中的这么多用户到底怎么管理呢?

当我们登录linux主机的时候,输入的是我们的账号,但是linux系统并不会直接认识我们的“账号名称”。它仅仅认识0、1。也就是它只认识我们的id。先来看看id与账号对应关系文件:/etc/passwd

[[email protected] ~]# 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
…………
…………
…………
gg_1:x:1006:1006::/home/gg_1:/bin/bash
gaofan:x:1007:1007::/home/gaofan:/bin/bash
mysql-proxy:x:994:992:MySQL-Proxy user:/:/sbin/nologin
mysql:x:993:306::/home/mysql:/bin/bash
redis:x:992:305:Redis Database Server:/var/lib/redis:/sbin/nologin
mongod:x:991:304:mongod:/var/lib/mongo:/bin/false
ntp:x:38:38::/etc/ntp:/sbin/nologin

会发现里面的每条记录都按照固定格式,’:'作为分隔符。一共7个字段,分别是:
1、账号名称: 就是账号,用来对应UID的。例如root的UID就是0。
2、密码: 密码一般不保存在这个文件中,但是也不省略,用x占位。
3、UID: 用户的标识符。

 分类(RHEL6中):
	0:root用户(系统管理员)
	1-499:系统用户
	500-65535:普通用户
 在RHEL7中:
 	0:root用户(系统管理员)
 	1-999:系统用户
 	1000-65535:普通用户
 上面写的系统管理员所对应的UID,其实其UID权限与普通的没有什么差别,只是一个习惯而已。
 把小的数字留给系统使用。但是系统用户账号通常并不希望它登录,因此它的shell一般是/sbin/nologin。
 普通用户就是我们可以使用的id号的范围,但是随着版本的更新,已经不局限在65535之内了。

4、GID: 这个其实与/etc/group有关,就是组名与GID的对应而已。格式与/etc/passwd文件差不多。
5、用户信息说名列: 相当于注释。
6、家目录: 用户的主文件夹。
7、Shell: 就是用户在登录之后就会取得一个Shell用来与系统的内核通信进行用户的操作任务。
登录时还需要输入密码,再来看看密码的对应文件:/etc/shadow

[[email protected] Python]# cat /etc/shadow
root:$6$LMr6FS8x0MIlY5Jk$c1TfsURG3QLddRFt9qJh/wAUA6nwinSlksNYVkSSI6gjXE0uqQqwnOh3tkZ9fteTDqez4kUMG5aD63iyu875q.::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
…………
…………

字段解释:
1、账号名称
2、密码: 这个字段才是真正的密码,但是只经过编码加密后的密码。

	加密算法:
		$1:MD5
		$5:SHA-256
		$6:SHA-512
在这一列如果密码的显示为*,表示该账号不能用于登录系统,若为!!代表该账号已经被锁定。

3、最近密码更新日期: 该时间是按照1970年1月1日作为1而累加出来的日期。
4、密码修改的最小间隔时间: 也就多少天内密码不允许修改。默认为0,不限制。
5、密码修改的最大时间间隔: 密码在多少天后必须进行修改。
6、密码需要修改前的警告天数: 用来提醒用户密码还有几天就要过期了。
7、密码过期后的宽限时间: 一般用户的密码可以使用的最长时间是“第三个字段”+“第五个字段”之和。过了这段时间就表示密码过期了。虽然密码还可以使用,可以正常工作,但是系统就会要求你更改密码。
8、账号失效日期: 跟“第三个字段类似”,默认为空,表示永久可用。
9、保留: 以后使用。
既然要管理用户,当然首先从新增与删除用户开始,相关命令:

1、useradd用来创建用户。

常见选项:
	-u:指明创建用户的UID
	-g:指明用户的自己初始用户组
	-G:指明用户还可以加入的附加组
	-M:不创建用户的主文件夹(系统用户默认)
	-m:创建用户的主文件夹(普通用户默认)
	-c:用户的注释信息
	-d:所创建的用户的家目录
	-r:创建一个系统账号
	-s:创建的用户的shell

example 1:

[[email protected] Python]# useradd nebula
[[email protected] Python]# ll -d /home/nebula/
drwx------. 2 nebula nebula 59 Nov  1 08:34 /home/nebula/
可以看到默认会创建用户的家目录,而且目录权限是700,表示只有nebula用户可以进入。
[[email protected] Python]# grep nebula /etc/passwd /etc/shadow /etc/group
/etc/passwd:nebula:x:1008:1008::/home/nebula:/bin/bash
/etc/shadow:nebula:!!:17836:0:99999:7:::
/etc/group:nebula:x:1008:
在/etc/passwd中创建一行与账号相关的数据,包括创建的UID,GID。
在/etc/passwd中将密码填入,目前没有密码
还会创建一个与用户名同名的组名。记录在/etc/group 中

example 2:

创建一个UID为2000,初始组是nebula 的用户nebula1。
[[email protected] Python]# useradd -u 2000 -g nebula  nebula1
[[email protected] Python]# ll -d /home/nebula1
drwx------. 2 nebula1 nebula 59 Nov  1 08:40 /home/nebula1
[[email protected] Python]# id nebula1
uid=2000(nebula1) gid=1008(nebula) groups=1008(nebula)
我在创建一个用户nebula2。我不指定它的UID,看看它UID应该是多少?
[[email protected] Python]# useradd nebula2
[[email protected] Python]# id nebula2
uid=2001(nebula2) gid=2001(nebula2) groups=2001(nebula2)
它是2001,所以说是当我们创建用户时,用户的默认UID是从上一个用户的UID加1.

example 3:

创建一个系统用户nebula3
[[email protected] Python]# useradd -r nebula3
[[email protected] Python]# id nebula3
uid=990(nebula3) gid=990(nebula3) groups=990(nebula3)
[[email protected] Python]# grep nebula3 /etc/passwd /etc/shadow /etc/group
/etc/passwd:nebula3:x:990:990::/home/nebula3:/bin/bash
/etc/shadow:nebula3:!!:17836::::::
/etc/group:nebula3:x:990:
[[email protected] Python]# ll -d /home/nebula3
ls: cannot access /home/nebula3: No such file or directory

其实useradd命令在添加用户时有一个参考文件:

[[email protected] Python]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
一般还有一个文件UID/GID的密码参数参考:/etc/login.defs可以去修改默认的模板。

创建了用户,密码的添加:

命令:passwd

常见选项:
	--stdin:可以通过来自前一个管道的数据,作为密码的输入	
	-l:对用户进行加锁,不能登录
	-u:解锁
	-n:后接天数,多久不可以修改密码天数
	-x:多久必须修改密码
	-w:密码过期前警告天数
	-i:后接日期,密码失效日期

example 1

给nebula用户密码:
[[email protected] Python]# passwd nebula
Changing password for user nebula.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
当nebula登录后也可以修改自己的密码:
[[email protected] ~]$ passwd
Changing password for user nebula.
Changing password for nebula.
(current) UNIX password: 
New password: 
Retype new password: 
Sorry, passwords do not match.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.

example 2

非交互式设置密码为nebula1用户:
[[email protected] Python]# echo 123456 | passwd --stdin nebula1
Changing password for user nebula1.
passwd: all authentication tokens updated successfully.

example 3

将nebula 设置为不能登录:
[[email protected] Python]# grep "nebula\>" /etc/shadow
nebula:$6$aKhOUUoF$bHE916Rl64bU0KMoGHSp9iU8/lS.f3m.yMP8wpQPodHS6HKFs5TuE/QkbVmCgOKChk6bN5SdyqwaxhWFSgb1M.:17836:0:99999:7:::
[[email protected] Python]# passwd -l nebula
Locking password for user nebula.
passwd: Success
[[email protected] Python]# grep "nebula\>" /etc/shadow
nebula:!!$6$aKhOUUoF$bHE916Rl64bU0KMoGHSp9iU8/lS.f3m.yMP8wpQPodHS6HKFs5TuE/QkbVmCgOKChk6bN5SdyqwaxhWFSgb1M.:17836:0:99999:7:::
可以看到加锁后密码列多了一个!!

chage :用来详细显示密码的参数:

example 1

[[email protected] Python]# chage -l nebula
Last password change					: Nov 01, 2018
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

example 2

使用chage可以用来限制当创建一个用户后,当该用户一登录就必须要求它修改密码:
[[email protected] Python]# useradd nebula5
[[email protected] Python]# echo 123456 | passwd  --stdin  nebula5
Changing password for user nebula5.
passwd: all authentication tokens updated successfully.
[[email protected] Python]# chage -d 0 nebula5
[[email protected] ~]$ su - nebula5
Password: 
You are required to change your password immediately (root enforced)
Changing password for nebula5.
(current) UNIX password: 
New password: 
Retype new password: 
Sorry, passwords do not match.
New password: 
Retype new password: 

usermod :用来修改一些用户参数

常见参数:
	-c:注释信息
	-d:修改家目录
	-g:后接用户的初始用户组
	-G:附加组,常于-a结合使用
	-a:追加
	-l:修改账号名称
	-s:修改Shell
	-u:修改UID
	-L:冻结用户
	-U:解锁

example 1

修改nebula1的注释信息为nebula1:
[[email protected] Python]# usermod -c 'nebula1' nebula1
[[email protected] Python]# grep nebula1 /etc/passwd
nebula1:x:2000:1008:nebula1:/home/nebula1:/bin/bash

examle 2

修改nebula1用户的家目录为/tmp/nebula1:
[[email protected] Python]# cp -a /home/nebula1 /tmp/nebula1
[[email protected] Python]# ll -d /tmp/nebula1
drwx------. 2 nebula1 nebula 59 Nov  1 08:40 /tmp/nebula1
[[email protected] Python]# usermod -d /tmp/nebula1 nebula1
[[email protected] Python]# grep nebula1 /etc/passwd
nebula1:x:2000:1008:nebula1:/tmp/nebula1:/bin/bash

删除用户:userdel

常见参数:
	-r:连同家目录一起删除

example 1

删除nebula4包括家目录:
[[email protected] Python]# userdel -r  nebula4
[[email protected] Python]# ll -d /home/nebula4
ls: cannot access /home/nebula4: No such file or directory

新增用户组:groupadd

常见选项:
	-g:指定组的某个特定的GID
	-r:新建系统用户组

修改组的参数:groupmod 类似usermod

常见选项:
	-g:修改GID
	-n:修改组名

删除组:groupdel

当删除用户组时,如果一个组是另一个用户的初始用户组,那么这个组将不能删除,因为当另一个用户登录时,找不到GID,将会很麻烦。如果强制删除,可以修改用户的GID,或者删除该用户吧!

用户组管理员功能:gpasswd

常见选项:
	-A:创建一个组,将主控权交给后面的用户
	-M:将某些账号加入到这个用户组中
	-r:将该组的密码删除
	-a:添加某位用户进入该组
	-d:将某位用户删除该组之外

example 1

添加一个组book,并将掌控权交给nebula.
[[email protected] Python]# groupadd book
[[email protected] Python]# gpasswd book
Changing the password for group book
New Password: 
Re-enter new password: 
[[email protected] Python]# gpasswd -A nebula book
[[email protected] Python]# grep book /etc/group /etc/gshadow
/etc/group:book:x:2002:
/etc/gshadow:book:$6$pNnxr/8rXNh/3c7v$k7IPSE57PbD3o1iV9WjcVy3G03sDg.7RZvUMFwmu2DAIdbFAVjNudlIsAFtNWXWEHkJe954Vh8cwdUcQwEOK5.:nebula:
nebula登录系统,将nebula1、nebula2 加入该组:
[[email protected] ~]$ gpasswd -a nebula1 book
Adding user nebula1 to group book
[[email protected] ~]$ gpasswd -a nebula2 book
Adding user nebula2 to group book
[[email protected] ~]$ grep book /etc/group
book:x:2002:nebula1,nebula2

查看某个用户属于哪个组:groups

[[email protected] ~]$ groups nebula1
nebula1 : nebula book

newgrp:附加组之间的切换

[[email protected] ~]$ groups
nebula book
将nebula1的组切换为book,会发现你调用上一条命令上键没反应,是因为当切换后,nebula1这个用户是按照另一个shell登录的。exit后恢复恢复正常。
[[email protected] ~]$ newgrp book
[[email protected] ~]$ exit
exit

finger:显示用户的很多相关信息

[[email protected] Python]# finger gaofan
Login: gaofan         			Name: 
Directory: /home/gaofan             	Shell: /bin/bash
Last login Tue Jul 31 23:26 (CST) on pts/0
No mail.
No Plan.
查看当前系统上登录的用户与时间:
[[email protected] Python]# finger
Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
root      root       tty1     2:04  Oct 31 21:39           
root      root       pts/0   11:25  Oct 31 21:49                           (192.168.0.1)
root      root       pts/1          Nov  1 07:40                           (192.168.0.1)
root      root       pts/2      14  Nov  1 08:57                           (192.168.0.1)
root      root       pts/3      14  Nov  1 08:57                           (192.168.0.106)

chsh:修改shell

常见选项:
	-l:列出系统上所有的shell
	-s:设置自己的shell
[[email protected] Python]# chsh -l
/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

id:查询某人或者自己的相关UID/GID

[[email protected] Python]# id nebula
uid=1008(nebula) gid=1008(nebula) groups=1008(nebula)
[[email protected] Python]# man id
[[email protected] Python]# id -u nebula
1008
[[email protected] Python]# id -g nebula
1008
相关标签: linux基础