LINUX用户和用户组(二)

简介: 系统环境:CentOS Linux release 7.3.1611 x86_64 GNU/Linux查看所有用户信息$ cat /etc/passwdroot:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologin.

系统环境:CentOS Linux release 7.3.1611 x86_64 GNU/Linux

查看所有用户信息

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...
rethink:x:1001:1001::/home/rethink:/bin/bash
jenkins:x:1002:1002::/home/jenkins:/bin/bash

$ cat /etc/passwd | grep jenkins
jenkins:x:1002:1002::/home/jenkins:/bin/bash
#字段格式说明:
`用户名:密码:用户UID:用户组GID:备注:用户家目录:用户默认shell`

/etc/passwd 所有用户都有读权限,但只有管理员有写权限,每一行都表示一个用户。第三个字段表示用户UID,0表示管理员root,1~500表示系统用户,501-65535表示普通用户,不同的Linux发行版,可能会有所差别。最后一个字段表示用户默认shell的路径,系统用户默认shell一般为/sbin/nologin,表示该用户不可登录。

第二个字段是用户的密码,x是占位符,用户真正的密码是密文保存在/etc/shadow文件中的,这个文件只有管理员可读。

# cat /etc/shadow
root:$1$7TJOo0N3$jWOx8FmXcEMN88gdGISg0/::0:99999:7:::
rethink:$6$/XN/F6Eu$yAwE5WN811EnmyLEa.k02MbYCDVw/vWlqn57QItruVRWMpVQGL1LLcg3xbOKhLGpiQ8f/6S7DKt.GJntPu7Kn/:17620:0:99999:7:::
jenkins:$6$oIK6zhjM$GVOCRHB4X1XU.iUhEHi5LHmuv06HFWub7dz7IRT7hHTanKffyBFXyGGZ5mIXt8gD40kB18KdHTZEH4xbOXjFP1:17645:0:99999:7:::

/etc/shadow文件中各个字段对应的含义,可以通过man 5 shadow命令来查看。

img_78ce559d576a0314d7bbbc0cee404e09.png

用户管理命令

使用--help参数,可查看命令更多详细介绍;

  • 添加新用户:useradd
# useradd test
# cat /etc/passwd | grep test
test:x:1004:1004::/home/test:/bin/bash

以上可以看到,useradd命令确实新增了一个新用户:test,并且系统会自动设置用户的一些属性,如UID,GID,HOME,SHELL HOME等。我们也可以创建新用户时指定这些信息:

useradd -u UID:指定新用户的UID,这个UID必须大于500,并且没有被其他用户占用;
useradd -g GID/GROUP_NAME:指定用户所属组,可以是GID或GROUPNAME,用户组必须是真实存在的;
useradd -G GROUPS:指定附属用户组;
useradd -c COMMENT:指定用户的备注信息
useradd -d PATH:指定用户的家目录
useradd -s SHELL:指定用户的默认shell
useradd -s /sbin/nologin:该用户不可登录,和系统用户最后一个字段的值相同
  • 设置用户的认证信息: passwd,包括用户密码、密码过期时间等

普通用户只能修改自己的密码,直接运行passwd即可 。新建用户后,若要为新用户创建密码,可使用 passwd USERNAME

# passwd test
Changing password for user test.
New password: 
Retype new password: 
passwd: all authentication tokens updated successfully.
  • 删除用户: userdel
# userdel USERNAME
`删除用户的同时删除用户HOME目录`
# userdel -r USERNAME 
  • 修改用户属性信息: usermod
Usage: usermod [options] LOGIN

Options:
  -c, --comment COMMENT         new value of the GECOS field
  -d, --home HOME_DIR           new home directory for the user account
  -e, --expiredate EXPIRE_DATE  set account expiration date to EXPIRE_DATE
  -f, --inactive INACTIVE       set password inactive after expiration
                                to INACTIVE
  -g, --gid GROUP               force use GROUP as new primary group
  -G, --groups GROUPS           new list of supplementary GROUPS
  -a, --append                  append the user to the supplemental GROUPS
                                mentioned by the -G option without removing
                                him/her from other groups
  -h, --help                    display this help message and exit
  -l, --login NEW_LOGIN         new value of the login name
  -L, --lock                    lock the user account
  -m, --move-home               move contents of the home directory to the
                                new location (use only with -d)
  -o, --non-unique              allow using duplicate (non-unique) UID
  -p, --password PASSWORD       use encrypted password for the new password
  -R, --root CHROOT_DIR         directory to chroot into
  -s, --shell SHELL             new login shell for the user account
  -u, --uid UID                 new UID for the user account
  -U, --unlock                  unlock the user account
  -Z, --selinux-user SEUSER     new SELinux user mapping for the user account
  • 检索用户属性信息: id
# id jenkins
uid=1002(jenkins) gid=1002(jenkins) groups=1002(jenkins)
`显示用户UID`
#id -u USERNAME
`显示用户默认组ID`
#id -g USERNAME
`显示用户附加组ID`
#id -G USERNAME
`显示用户/默认组/附加值的名称`
#id -n -g/-G/-u USERNAME
  • 检索用户属性信息 : finger,显示格式比id命令更加友好
`安装finger命令`
# yum install finger -y

# finger
Login     Name       Tty      Idle  Login Time   Office   Office Phone   Host
root      root       pts/0          Jun 28 16:28                         (101.81.92.18)

# finger jenkins
Login: jenkins                  Name: 
Directory: /home/jenkins                Shell: /bin/bash
Last login Wed Jun 27 19:05 (CST) on pts/0
No mail.
No Plan.

# finger -s jenkins
Login     Name       Tty      Idle  Login Time   Office     Office Phone   Host
jenkins              pts/0       *  Jun 27 19:05   

查看所有用户组信息

$ cat /etc/group
root:x:0:
bin:x:1:
...
rethink:x:1001:
jenkins:x:1002:
docker:x:1003:

#字段说明
`组名:组密码:GID:以group_name为附加组的用户列表`

# cat /etc/group | grep test:x
test:x:1005:test4,test5

Linux下,每个用户都有一个用户组,系统可以对用户组中的所有用户进行集中的权限管理。当创建用户时,如果没有为其指明所属组,则就为其定义一个私有的用户组,其名称与用户名相同。私有组可以变成普通用户组,当把其他用户加入到该组中时,其就变成了普通用户组。

用户组管理命令

  • 添加新用户组:groupadd
# groupadd bbox
# cat /etc/group|grep bbox
bbox:x:1011:
  • 删除用户组: groupdel
# groupdel bbox
# cat /etc/group|grep bbox
# 
  • 重命名用户组:groupmod
`命令格式:groupmod -n new_name old_name`
# groupmod -n test_1 test
# cat /etc/group|grep test_1
test_1:x:1005:test4,test5

补充命令

  1. who命令、whoami命令、who am i命令和w命令
# who
root     tty1         2018-06-28 18:18
root     pts/0        2018-07-03 17:43 

# who am i
root     pts/0        2018-07-03 17:43 

# su - docker
Last login: Mon Jul  2 18:51:11 CST 2018 on pts/0

$ whoami
docker

$ who am i
root     pts/0        2018-07-03 17:43 

$ who
root     tty1         2018-06-28 18:18
root     pts/0        2018-07-03 17:43 

$ w
 18:32:24 up 5 days, 15 min,  2 users,  load average: 0.00, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      Thu18    4days  0.10s  0.10s -bash
root     pts/0    101.81.92.18     17:43    0.00s  0.00s  0.00s w

总结如下 :

  • whoami 显示的是当前操作用户的用户名
  • who am i显示的是登录时的用户名 ,此命令相当于who -m
  • who 显示当前真正登录系统中的用户(不会显示那些用su命令切换用户的登录者)
  • w 不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细 ;
  1. Linux切换用户命令:su
    su是单词switch user的缩写。通过su命令,可以从普通用户切换到root用户,也可以从root用户切换到普通用户。从普通用户切换到root用户需要密码(该密码是普通用户的密码,但从root用户切换到普通用户不需要密码。
    susu -的区别

su - root is the same as su - just like login as root,then the shell is login shell,which mean it will expericene a login process,usually .bash_profile and .bashrc will be sourced. su root is the same as su like you open an interactive shell in root name,then only .bashrc will be sourced.
su命令只是切换到了root身份,但shell工作环境仍然是普通用户的环境;而su - 命令会将用户身份和shell环境一起切换到root,只有切换了shell环境才不会出现PATH环境变量的错误。su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su -命令切换以后,工作目录变成root的工作目录了。所以要从当前用户切换到其它用户时,应该使用su -命令。如:

$ whoami
docker

$ su root
Password: 

# echo $PWD
/home/docker

# su - root
Last login: Tue Jul  3 18:54:23 CST 2018 on pts/1
[root@JDu4e00u53f7 ~]# echo $PWD
/root
`用户的HOME目录已经改变了`

【To be continued...】

相关文章
|
2月前
|
Unix Linux 数据安全/隐私保护
Linux用户与用户组管理(详解)
Linux用户与用户组管理(详解)
35 5
|
2月前
|
安全 Shell Linux
Linux 用户和用户组管理
Linux 用户和用户组管理
25 1
|
4月前
|
Linux 文件存储 数据安全/隐私保护
Linux用户组管理实战:创建、管理与删除的全面指南
在 Linux 系统中,用户组管理是实现权限控制和资源共享的关键。本文档详细介绍如何创建用户组、管理用户组成员及查看与删除用户组。首先,通过 `groupadd` 命令创建新用户组,并在 `/etc/group` 文件中记录。接着,利用 `usermod` 和 `gpasswd` 命令来添加或删除用户组成员,其中 `gpasswd` 提供更灵活的管理方式。最后,使用 `getent` 或直接读取 `/etc/group` 查看用户组信息,并通过 `groupdel` 删除空用户组。这些操作有助于高效管理和保护系统资源。
324 4
|
7月前
|
Linux Shell C语言
【Shell 命令集合 系统管理 】Linux 删除Linux系统中的用户组 groupdel命令 使用指南
【Shell 命令集合 系统管理 】Linux 删除Linux系统中的用户组 groupdel命令 使用指南
153 0
|
6月前
|
Linux 数据处理 数据安全/隐私保护
Linux中的groups命令:管理用户组信息的利器
`groups`命令在Linux中用于显示用户所属的用户组,帮助管理员进行权限管理。它读取`/etc/group`和`/etc/passwd`文件获取信息,特点是简单直观,支持多用户组。命令参数如`-a`显示主组,`-g`显示主组ID,`-n`以数字形式显示,`-r`显示实际组。在实际应用中,结合其他命令可进行权限分析和定制输出。注意权限问题及用户组可能随系统变化。
|
5月前
|
存储 Linux 数据安全/隐私保护
Linux用户和用户组,useradd test2 -g itcast -d /home/test222 设置分组和存放路径
Linux用户和用户组,useradd test2 -g itcast -d /home/test222 设置分组和存放路径
|
6月前
|
Linux
34. 【Linux教程】Linux 添加用户组
34. 【Linux教程】Linux 添加用户组
39 2
|
6月前
|
Linux 数据安全/隐私保护 安全
33. 【Linux教程】Linux 用户组
33. 【Linux教程】Linux 用户组
38 2
|
7月前
|
存储 安全 Linux
从基础到高级:Linux用户与用户组权限设置详解
从基础到高级:Linux用户与用户组权限设置详解
863 2
|
7月前
|
存储 安全 Linux
深入理解 Linux 用户和用户组的基本概念 + 相关命令 (一篇就够)
深入理解 Linux 用户和用户组的基本概念 + 相关命令 (一篇就够)
147 2