linux使用者管理——用户管理
谈到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
下一篇: python切片中容易出错的情况