欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Linux笔记:用户和用户组

程序员文章站 2022-07-10 21:34:17
Linux中的用户通常分为root用户(超级管理员)和普通用户,因为不同场景的可能会想要新建一些特殊用途的普通用户,此时新建的用户可以根据不同的使用场景将他们划分在不同的用户组中,然后给用户组设置相关的权限,使得该用户组下的用户都可以执行某些操作或都不能执行某些操作,以此来管理众多的用户。建立用户组 ......

linux中的用户通常分为root用户(超级管理员)和普通用户,因为不同场景的可能会想要新建一些特殊用途的普通用户,此时新建的用户可以根据不同的使用场景将他们划分在不同的用户组中,然后给用户组设置相关的权限,使得该用户组下的用户都可以执行某些操作或都不能执行某些操作,以此来管理众多的用户。建立用户组的目的是方便管理,以便应对复杂的使用场景,当然,也可以不用将用户加到某个用户组里。本文讲一些用户和用户组的常用操作,以及如何查看用户和用户组的相关信息。

 

一、常用用户和用户组操作命令

useradd命令
useradd [选项] 用户名:添加一个用户。
添加一个用户之后,系统会自动生成或添加一些文件和配置:

  • /etc/password:添加对应的用户信息。
  • /etc/shadow:添加对应用户的密码信息。
  • /etc/group:添加用户的组信息。
  • /etc/gshadow:添加用户对应组的密码信息。
  • /home/用户名/:生成对应的用户家目录。
  • /var/spool/mail/用户名/:生成对应的用户邮箱目录。

选项:

  • -u uid:手工指定用户的uid(不建议自己手工指定)。
  • -d 家目录:手工指定用户的家目录(不建议自己手工指定)。
  • -c 用户说明:手工指定用户的说明。
  • -g 组名:手工指定用户的初始组(不建议自己手工指定)。
  • -g 组名:手工指定用户的附加组,如果是指定多个组,多个组名之间使用逗号连接。
  • -s shell:手工指定用户的登录shell,默认是/bin/bash。

注:在/etc/default/useradd中指定了useradd命令执行时的某些默认设置,比家目录在/home下等信息,其他的一些默认信息可以在/etc/login.defs中查看。

 

passwd命令
passwd [选项] [用户]:给某个用户设置密码,root用户可以给任何人设置密码。
如果没有输入用户名,则表示修改当前用户自己的密码,但只有root用户可以修改别人的密码,如果不是root用户,也根本指定不了用户名,因为根本不允许普通用户修改别人的密码。
普通用户设置自己的密码时必须符合密码规则,只有root用户才能强行地随意设置密码。
选项:

  • -s:查询用户密码的密码状态信息(仅root用户可用)。
  • -l:暂时锁定用户(仅root用户可用),该用户就暂时不能登录了,系统此时实际进行的操作就是在/etc/shadow文件(存放用户密码相关的信息)中对应用户的密码前加了一个感叹号!。
  • -u:解锁用户(仅root用户可用),也可以手动修改/etc/shadow文件中对应用户的密码,删除密码最前面的感叹号!即可。
  • --stdin:可以通过管道符输出的数据作为用户的密码,如echo "123"|passwd --stdin user1,即将123设置为user1的密码,这个选项在使用shell脚本编程的时候最常用。

 

who/w命令
who:直接查看当前登录的用户信息。包括用户名、登录终端、登录时间、登录的主机ip(没有值就表示本机登录)。
登录终端:

  • tty:表示本地终端,即直接在linux系统上登录。
  • pts:远程登录,即使用连接工具进行登录。

w:查看当前登录用户的详细信息。相较于who,额外的信息包括:

  • 当前系统时间。
  • up:系统连续运行的时间。
  • 当前登录用户数。
  • 当前系统的负载。
  • idle:登录用户空闲的时间(没有任何操作的时间)。
  • jcpu:登录用户总计占用cpu时间。
  • pcpu:登录用户执行操作占用的cpu时间。
  • what:登录用户当前执行的命令。

 

usermod/chage命令
usermod [选项] 用户:修改一个已经存在的用户的用户信息。
useradd命令中支持的命令,usermod都支持,额外支持的选项有:

  • -l:暂时锁定用户。
  • -u:解锁用户。

chage [选项] 用户名:修改用户密码状态。
选项:

  • -l:列出用户的详细密码状态。
  • -d 日期:修改密码的最后一次更改时间。通常在shell脚本中会经常使用这个选项,脚本中将这个值设置为0,这样就会导致这个用户第一次登陆就会被要求必须修改密码才能使用。
  • -m 天数:修改两次密码的间隔时间。
  • -m 天数:修改密码有效期。
  • -w 天数:密码过期前警告天数。
  • -i 天数:密码过期后宽限天数。
  • -e 日期:账号失效时间。

 

userdel/id/su命令
userdel [-r] 用户名:删除某个用户。-r选项表示删除用户的同时删除它的家目录。
id 用户名:查看用户的uid和gid信息。
su [选项] 用户名:切换用户身份。
选项:

  • -:表示连带用户的环境也一起切换,如su - root。
  • -c:仅使用该用户的身份执行一次命令,但不切换身份。如su - root -c "useradd user3"表示调用root用户添加一个user3用户。

 

groupadd/groupmod/groupdel/gpasswd命令
groupadd [选项] 组名:添加一个用户组。
选项:

  • -g gid:设置用户组的gid。

groupmod [选项] 组名:修改组信息。
选项:

  • -g gid:修改用户组的gid。
  • -n 新组名:修改组名。

groupdel 组名:删除对应的用户组。
gpasswd [选项] 组名:把用户添加入组或从组中删除。
选项:

  • -a 用户名:把用户加入组。
  • -d 用户名:把用户从组中删除。

 

二、查看用户和用户组信息

用户信息文件/etc/passwd
这个文件中存放着用户的基本信息,每一行存放一个用户的信息,有多少行就有多少个用户。
每一行中的用户信息使用冒号分隔,共有7个部分:

  • 第1个字段:用户名称。
  • 第2个字段:密码标识,一般为x,表示这个用户是有密码的(真正的密码存放在了文件/etc/shadow中),如果这个项没有值,则表示这个用户是没有密码的,即可以直接登录而不用输入密码(这种不设密码的情况只能在本机登录,通过远程连接的方式是无法登录的)。
  • 第3个字段:uid,即用户id,用户名和uid的关系,相当于域名和ip的关系,ip不好记,那就记域名,所以用户就只需要记用户名称即可,不用记uid,uid是系统来识别和记忆的。
    • 0:超级用户,叫root的不一定是管理员,但uid为0的一定是管理员。
    • 1-499:系统用户(伪用户),注意不能去修改这些用户的东西。
    • 500-65535:普通用户。
  • 第4个字段:gud,即用户初始组id。
    • 初始组:指用户一登录就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是使用这个用户的用户名作为这个组的名称(这个初始名虽然可以改,但是不建议修改)。
    • 附加组:一个用户可以属于多个组,并拥有这些组的权限,用户的所属组中,不是初始组的组就是它的附加组。
  • 第5个字段:用户说明信息,可以不用加这个信息。
  • 第6个字段:用户的家目录。
    • 超级用户:/root/
    • 普通用户:/home/用户名/
  • 第7个字段:登录之后的shell,默认是系统的标准shell:/bin/bash。同时普通用户的shell必须为/bin/bash,否则无法登录。如果把某个用户的shell指定为/sbin/nologin,表示将这个用户禁用,不允许这个用户登录。

 

用户密码文件/etc/shadow
这个文件保存用户密码的相关信息,并且此文件的权限为----------,即如果是普通用户,连读的权限也是没有的,当然root用户是可以进行读写的。
这个文件中每一行保存一个用户的信息,并且也是使用冒号来分隔不同的用户信息的,共有9个字段:

  • 第1个字段:用户名。
  • 第2个字段:加密后的密码。这个项如果是!!或者*表示这个用户是没有密码,且不能登录。如果想要禁用某个用户的登录,只需要在他的密码前加一个!即可。
  • 第3个字段:密码的最后一次修改日期(天),使用的是1970年1月1日到当前的天数。
  • 第4个字段:允许修改密码的最小时间间隔。
  • 第5个字段:密码有效期(天),指修改密码后多少天之内有效。
  • 第6个字段:密码到期之前的n天开始提醒用户更改密码,在这n天内每次登录都会提示你更改密码。
  • 第7个字段:密码过期后的宽限天数。如果没有写,表示此密码立即失效。密码失效后,该用户将不能登录。
    • 0:与不写效果相同,即密码过期后立即失效。
    • -1:表示密码永远不会失效。此时会覆盖第5个字段有效期的设置效果。
  • 第8个字段:账号失效时间,使用的是时间戳格式(天数)。设置了这个时间后会覆盖前面的所有相关设置,时间到了之后此账号会立即失效。
    • 时间戳转换为时间:执行命令如“date -d "1970-01-01 [16076] days"”即可,其中方括号中的76076天数可自行设置。
    • 时间转换为时间戳格式:执行命令“echo $(($date --date="2014/01/06" +%s)/86400+1)”即可查看对应的时间戳(1970-01-01到今天的天数)。
  • 第9个字段:保留字段(暂时没有用)。

 

组信息文件/etc/group
这个文件存放的就是用户的组信息,一行即代表一个组的信息,并使用冒号分隔不同组信息,共有4个字段:

  • 第1个字段:组名。
  • 第2个字段:组密码标识,一般为x,表示这个组是有密码的,但是组密码并不常用,也不推荐设置组密码。组密码也存放在一个影子文件中/etc/gshadow。
  • 第3个字段:gid,即组的id。
  • 第4个字段:组中附加用户。

 

组密码文件/etc/gshadow
用于存放组密码的相关信息,一行即代表一个组密码的信息,并使用冒号分隔不同组密码信息,共有4个字段:

  • 第1个字段:组名。
  • 第2个字段:组密码。
  • 第3个字段:组管理员用户名。
  • 第4个字段:组中附加用户。

 

用户模板目录
/etc/skel/:这个目录下默认是一些隐藏文件,创建用户时会自动将这个目录下的所有文件拷贝至对应的用户家目录下,当你想在创建用户时自动生成一些文件在对应的家目录下,就可以将这些文件放在这个目录下。