用户管理

  • 用户账号

  • 用户管理

用户一般来说是指使用计算机的人,计算机对针使用其的每一个人给了一个特定的名称,用户就可以使用这些名称来登录使用计算机,除了人之外,一些系统服务也需要含有部分特权的用户账户运行;因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,root在计算机中用拥有至高特权,所以一般只作管理用,非特权用户可以通过SU或SUDO程序来临时获得特权

个人可以拥有很多账户,只不是彼此名称不同,比如root名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获得该组的特权

GNU/Linux 系统中的每一个文件都有属一个用户(属主)和一个用户组(属组)。另外,还有三种类型的访问权限:读(read)、写(write)、运行(execute)。我们可以针对文件的属主、属组、而设置相应的访问权限。再次,我们可以通过

ls | stat命令查询文件属主、属组和权限


[root@love ~]# ll | head -2

总用量 8

-rw-------. 1 root root 1680 9月 19 2017 anaconda-ks.cfg

[root@love ~]# stat anaconda-ks.cfg

文件:"anaconda-ks.cfg"

大小:1680 块:8 IO 块:4096 普通文件

设备:803h/2051d Inode:16797763 硬链接:1

权限:(0600/-rw-------)  Uid:(    0/ root)   Gid:(    0/ root)

用户账号

  1. 用户的分类

Linux用户三种角色

  • 超级用户:root 拥有对系统的最高的管理权限 ID=0

  • 普通用户:

    • 系统用户 UID:1-999(centos7版本) 1-499(centos6版本)

    • 本地用户 UID:1000+ 500+

    • 虚拟用户 伪用户 一般不会用来登录系统的,它主要是用于维持某个服务的正常运行.如:ftp,apache

下图是用户和组的关系:

📷 图片

  • 一对一:一个用户可以存在一个组中; 一对多:一个用户可以存在多个组中

  • 多对一:多个用户可以存在一个组中; 多对多:多个用户可以存在多个组中

配置文件

| 名称 | 帐号信息 | 说明 |

|-----------|-------------|------------------------------------------------------------------------------|

| 用户配置文件 | /etc/passwd | 记录了每个用户的一些基本属性,并且对所有用户可读,每一行记录对应一个用户,每行记录通过冒号进行分隔 |

| 用户组文件 | /etc/group | 用户组的所有信息存放地儿,并且组名不能重复 |

| 用户对应的密码信息 | /etc/shadow | 因为passwd文件对所有用户是可读的,为安全起见把密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有读权限,从而保证密码安全性 |

用户命令

useradd

useradd -d -u “UID” -g "初始组" -G "附加组" -s "登陆的shell” 用户

| 参数 | 作用 |

|-----|-------------------------------------------------------------------------------------------------------------------------------------|

| -d | 用户主目录路径, 可以指定用户家目录 |

| -M | 不创建用户的主目录 |

| -g | 设置用户初始组的名称或数字 |

| ID | 该组必须是存在的;如果没有设置该选项,useradd会根据/etc/login.defs文件中的USERGROUPS_ENAB环境变量进行设置。默认USERGROUPS_ENAB yes 会用和用户名相同的名字创建群组,GID 等于UID. |

| -G | 用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组。(一个用户只允许有一个主组,可以有多个附属组) |

| -s | 用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定;请确保使用的shell已经安装,默认是 Bash。有时候需要禁止某些用户执行登录动作,例如用来执行系统服务的用户。将shell设置成/sbin/nologin 就可以禁止用户登录。 |

添加登录用户

例:添加一个名为harry的用户,并使用bash作为登录的shell


useradd harry

tail -1 /etc/passwd

harry:x:1001:1001::/home/harry:/bin/bash

上面操作说明:

  • 此命令会自动创建harry组,并成为harry用户的默认主组,同时默认的登录shell是bash

  • 用户帐户的全部信息被保存在/etc/passwd文件。这个文件以如下格式保存了每一个系统帐户的所有信息 (字段以“:”分割)

harry:x:1001:1001::/home/harry:/bin/bash

📷 图片

查看系统中,支持哪些shell

cat /etc/shells #查看系统中,支持哪些shell

  • /bin/sh

  • /bin/bash

  • /sbin/nologin

  • /bin/csh

指定用户UID


[root@love ~]# useradd -u 1100 oracle

[root@love ~]# id oracle

uid=1100(oracle) gid=1100(oracle) 组=1100(oracle)

[root@love ~]# tail -1 /etc/passwd

oracle:x:1100:1100::/home/oracle:/bin/bash

[root@love ~]# ls /home/oracle/ -a

. .. .bash_logout .bash_profile .bashrc .mozilla

指定用户主目录


[root@love ~]# useradd -d /opt/mk1 mk1

[root@love ~]# tail -1 /etc/passwd

mk1:x:1102:1102::/opt/mk1:/bin/bash

指定用户的主组


[root@love ~]# useradd xue

[root@love ~]# id xue

uid=1103(xue) gid=1103(xue) 组=1103(xue)

[root@love ~]# useradd -g xue xue2

[root@love ~]# id xue2

uid=1104(xue2) gid=1103(xue) 组=1103(xue)

指定用户的附属组

我们也可以把这个附属组称为补充组,用户可以有0个或多个附加组的成员;如果一个组有多个成员,我们是可以在/etc/group文件中最后一个字段看到的。


[root@love ~]# useradd -G xue,harry,root xue3

[root@love ~]# id xue3

uid=1105(xue3) gid=1105(xue3) 组=1105(xue3),0(root),1001(harry),1103(xue)

[root@love ~]# vim /etc/group #在文件的最后

创建用户的另外一个命令


[root@love ~]# adduser xue4

[root@love ~]# id xue4

uid=1106(xue4) gid=1106(xue4) 组=1106(xue4)

[root@love ~]# which adduser

/usr/sbin/adduser

[root@love ~]# ll /usr/sbin/adduser

lrwxrwxrwx. 1 root root 7 9月 19 2017 /usr/sbin/adduser -> useradd  

# 注: adduser是useradd的软链接

删除用户

userdel [options] LOGIN

选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录

密码文件 /etc/shadow


[root@love ~]# head -3 /etc/shadow

root:$6$C88LCVx5ZjfBU7xv$cKcdyNeTFmOYTs9NbRZDTA4hGcbMXc/5hQEWZKCtNyLqlBagrjct.pMfs39iEaF1UbEvcOzWZHMDf9Q5KojXM1::0:

99999:7:::

给用户添加密码


[root@panda home]# passwd oracle # 交互操作

Changing password for user oracle.

New password:

BAD PASSWORD: The password is shorter than 8 characters

Retype new password:

passwd: all authentication tokens updated successfully.

[root@love ~]# echo 123456 | passwd --stdin xue # 不交互

[root@love ~]# echo 123456 | passwd --stdin harry

查看用户相关命令

  • id 用户和组的信息

  • whoami #查看当前有效用户名

  • who #显示目前登入系统的用户信息

  • w # w命令用于显示已经登陆系统的用户列表

  • users #用于显示当前登录系统的所有用户的用户列表

修改用户信息

  • 语法:usermod 【参数】用户名

  • 常用参数:

    • -u UID

    • -d 宿主目录

    • -g 起始组 #只能有一个

    • -G 附加组 #可以有多个

    • -s 登录shell

    • -L 锁定

示例:修改UID


[mk@love ~]# id oracle

uid=1100(oracle) gid=1100(oracle) 组=1100(oracle)

[mk@love ~]# usermod -u 1111 oracle

[mk@love ~]# id oracle

uid=1111(oracle) gid=1100(oracle) 组=1100(oracle)

示例:更改用户主目录


[root@panda home]# usermod -m -d /mnt/market market

# -m选项会自动创建新目录并且移到内容到新目录里面

示例:添加说明信息


[root@panda mnt]# usermod -c "hello world" market

直接改vim /etc/passwd 也可以达到同样的效果