前言
Linux 是一个多用户、多任务的操作系统。在这样的系统中,搞懂用户管理往往是不可或缺,且必备的。
Linux的三类用户
第一类:root(超级管理员),UID为0,这个用户有极大的权限,可以直接无视很多的限制,包括读写执行的权限。所以这个用户的使用要小心,因为他的权限太大了。
第二类:系统用户,UID为1~499。系统用户是Linux系统正常工作所必需的内建的用户,一般是用于管理服务所用。系统用户不能用来登陆,如bin、daemon等用户。
第三类就是普通用户,UID范围一般是500~65534。这类用户是为了让使用者能够使用Linux系统资源而建立的,一般新建的都是普通用户。
用户管理
查看当前用户
查看当前用户可以用who
(有些系统不支持)或者whoami
命令
$ who
yangan console Dec 28 10:53
yangan ttys005 Jan 10 13:15
$ whoami
yangan
查看用户详情
查看用户详情可以用 finger
(有些系统不支持) 或者 id
命令
$ finger yangan
Login: yangan Name: hongxin xie
Directory: /Users/yangan Shell: /bin/zsh
On since 一 12 28 10:53 (CST) on console, idle 13 days 2:39 (messages off)
On since 五 1 8 12:55 (CST) on ttys000, idle 1:21
On since 日 1 3 15:09 (CST) on ttys003, idle 1 day 19:19
On since 六 1 9 15:34 (CST) on ttys006 (messages off)
On since 二 12 29 20:52 (CST) on ttys010, idle 4 days 22:46
On since 日 1 10 13:15 (CST) on ttys005
On since 六 1 9 13:31 (CST) on ttys012 (messages off)
No Mail.
No Plan.
$ id yangan
uid=501(yangan) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm)...
创建用户
创建用户有两种方式,分别是 adduser
和 useradd
。
adduser
adduser
命令使用交互模式创建用户、创建时会为创建的用户指定主目录、系统shell版本和用户密码。
$ adduser user1
Adding user `user1' ...
Adding new group `user1' (1000) ...
Adding new user `user1' (1000) with group `user1' ...
# 创建主目录
Creating home directory `/home/user1' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for user1
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y
如果你想跳过上述的chfn交互,即填入Full name,Room number,Work phone,Home phone,则可以加上--gecos
参数。
useradd
useradd
命令使用非交互模式创建用户,像上述的主目录都需要通过参数指定,如果不指定,则创建的用户无主目录、无密码。
# 无参的情况
$ useradd user2
$ passwd user2 # 由于无指定密码,所以需要重置
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# 指定参数
-d:指定主目录
-m:目录不存在则创建
-s:指定shell
$ useradd -d "/home/user3" -m -s "/bin/bash" user3
删除用户
# 只删除用户
$ userdel user1
# 连同主目录一起删除
$ userdel -r user1
用户组
创建用户组
groupadd linux-test
查看用户组
# 显示当前用户所属的用户组
$ groups
root
# 搜索用户组
$ cat /etc/group | grep linux-test
linux-test:x:1002:
删除用户组
groupdel linux-test
将用户添加到其他组
语法:usermod -a -G your_group your_user
示例:usermod -a -G linux-test user3
查看用户所属组
$ id user3
uid=1001(user3) gid=1001(user3) groups=1001(user3),1002(linux-test)
将用户从组内删除
$ gpasswd -d user3 linux-test
Removing user user3 from group linux-test
将用户添加到sudo用户组
目的:只有sudo组的用户才能使用sudo命令。
1.打开文件 sudo visudo
2.加入此命令
# Centos7
在 root ALL=(ALL) ALL 这条语句下添加“用户 ALL=(ALL) ALL”
# Ubuntu18.04
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
yangan ALL=(ALL:ALL) NOPASSWD:ALL # sudo不需要密码
yangan2 ALL=(ALL:ALL) ALL # sudo需要密码
用户/用户组相关配置说明
/etc/group
/etc/group
是用户组的配置文件,内容包括用户和用户组,并且能显示出用户是归属哪个用户组。
$ cat /etc/group | grep linux-test
linux-test:x:1002:
$ usermod -a -G linux-test user3
# 多了user3
$ cat /etc/group | grep linux-test
linux-test:x:1002:user3
/etc/group
的输出信息可以拆分为四部分:
- 第一部分是用户组名称,比如 linux-test
- 第二部分是用户组密码,原先用来保存密码的,现在密码都放在/etc/shadow中,所以这里显示x
- 第三部分是GID,也就是 group id
- 第四部分是用户列表,每个用户之间用逗号分割。如果为空则表示该用户名与用户组名一致
/etc/passwd
/etc/passwd
存储了用户的密码。
$ cat /etc/passwd | grep 'user3'
user3:x:1001:1001::/home/user3:/bin/bash
上面的输出信息解释如下:
- 第一字段:用户名称
- 第二字段:用户组密码,原先用来保存密码的,现在密码都放在/etc/shadow中,所以这里显示x
- 第三字段:UID,也就是用户ID。默认的系统管理员的UID为0,我们添加用户的时候最好使用1000以上的UID,1-1000范围的UID最好保留给系统用。
- 第四字段:GID,也就是群组ID
- 第五字段:关于账号的一些说明信息(暂时可以忽略)
- 第六字段:账号的家目录,家目录就是你登陆系统后默认的那个目录
- 第七字段:账号使用的shell
/etc/shadow
/etc/shadow
是/etc/passwd
的影子文件,它存储了实际的密码。
$ cat /etc/shadow | grep 'user3'
user3:$6$isHqGuaA$aO1F9.W17GTYIPy7OHAgV12DcY7GMlcJbgLGVhg6ZqKOrq4lxKVSoV/073zR.Kjpybcd4kcG1p/aID0QmcHs20:18637:0:99999:7:::
上面的输出信息解释如下:
- 第一字段:用户名称
- 第二字段:加密后的密码。如果这一栏的第一个字符为!或者*的话,说明这是一个不用登录的账户
- 第三字段:最近改动密码的日期。这个是从1970年1月1日算起的总的天数
- 第四字段:密码不可被变更的天数:设置了这个值,则表示从变更密码的日期算起,多少天内无法再次修改密码,如果是0的话,则没有限制
- 第五字段:密码需要重新变更的天数:密码经常更换才能保证安全,为了提醒某些经常不更换密码的用户,可以设置一个天数,强制让用户更换密码,也就是说该用户的密码会在多少天后过期,如果为99999则没有限制
- 第六字段:如果设置了密码需要重新变更的天数,则会在密码过期的前多少天进行提醒,提示用户其密码将在多少天后过期
- 第七字段:密码过期的宽恕时间:如果在第五个字段中设置的日期过期后,用户仍然没有修改密码,则该用户还可以继续使用的天数
- 第八字段:账号失效日期,过了这个日期账号就不能用了
- 第九字段:保留字段
/etc/passwd VS /etc/shadow
1./etc/passwd
只有系统管理员才可以修改,但对所有用户可见;/etc/shadow
也只有系统管理员才能修改,但只对管理员可见。
2./etc/shadow
是 /etc/passwd
的一个影子(就像其名字),/etc/shadow
文件中的记录行与/etc/passwd
中的一一对应。
写在最后
各位老板,创作不易,更需不断地磨练和总结,欢迎关注我,我是言淦,为你分享各种实用的编程知识与编程技巧,你们的点赞与关注是我前进和创作的最大动力!!