No.10 Linux的用户管理

150 阅读5分钟

前言

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)...

创建用户

创建用户有两种方式,分别是 adduseruseradd

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中的一一对应。

写在最后

各位老板,创作不易,更需不断地磨练和总结,欢迎关注我,我是言淦,为你分享各种实用的编程知识与编程技巧,你们的点赞与关注是我前进和创作的最大动力!!

参考

1.linux下查看所有用户及所有用户组
2.Linux下/etc/passwd和…