Linux教程:http://www.fdlly.com/m/linux
@[toc]
Linux用户管理
Linux操作系统是多用户
的多任务
操作系统
- 多用户:Linux操作系统可以允许建立多个用户,允许多个用户同时登陆到系统上,使用系统资源
- 多任务:Linux操作系统允许多个用户在在同一时间内登录到同一个系统执行各自不同的任务,并且相互之间互不影响
Linux下用户的角色分类
用户在系统中是分角色的,在Linux系统中,由于角色的不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和GID识别的;特别是UID,在运维工作中,一个UID是唯一标识一个系统用户的账号
在 Linux 下用户是根据角色定义的, 具体分为三种角色。
- 超级用户(root用户): 拥有对系统的最高管理权限, 默认是 root 用户。在Linux系统中,root用户的UID和GID都为0,在每台Linux操作系统中都是唯一且真实存在的,root用户拥有最高的管理权限,通过它可以登录系统,可以操作系统中任何文件和命令。在生产环境中应避免使用此类账号,错误的操作可能造成不可估量的损失,建议只有必要时才使用root登录系统
- 系统用户(虚拟用户): 也叫伪用户或加用户,这类用户都是系统自身拥有的。 这类用户最大的特点是不能登录系统,但却是系统运行中不可缺少的用户,系统用户的UID为1~999, 它们的存在主要是为了方便系统管理, 满足相应的系统进程对文件属主的要求。 例如, 系统默认的 bin、adm、daemon、ftp、nobody 用户等。 一般运行的 Web 服务, 默认使用的就是 nobody 用户,但是 nobody 用户是不能登录系统的
- 普通用户: 具有登录系统的权限,UID为1000~60000在Linux系统中可以进行普通操作,但只能对自己目录下的文件进行访问和修改,其使用系统的权限受限
/etc/passwd文件详解
该文件为纯文本文件,记录了每个用户的必要信息。任何用户都可以读取/etc/passwd
文件内容。 在/etc/passwd
文件中, 每一行代表一个用户账号的信息,每行的字符之间使用:分隔,共7个字段
用户名称:用户密码:用户标识号:组标志号:相关注释:主目录:默认shell
下面是/etc/passwd
文件的部分内容
root:x:0:0:root:/root:/bin/bash
- 用户名称:代表用户账号的字符串。用于区分不同的用户。在同一系统中注册名是惟一的。在很多系统上,该字段被限制在8个字符(字母或数字)的长度之内;并且要注意,通常在Linux系统中对字母大小写是敏感的
- 用户密码:存放着加密后的用户密码,用来校验用户的合法性。虽然这个字段存放的只是用户密码的加密串, 不是明文, 但是由于
/etc/passwd
文件对所有用户都可读, 因此这仍是一个安全隐患。现在许多 Linux 版本都使用了 shadow 技术,口令不再直接保存在passwd文件中,把真正加密后的用户密码存放到/etc/shadow 文件中, 而在/etc/passwd 文件的密码字段中只存放一个特殊的字符,例如用x
或者*
来表示。当然/etc/shadow文件是不能被普通用户读取的,只有超级用户才有权读取 - 用户标识号:User ID,简称UID,UID是一个数值,是Linux系统中惟一的用户标识,用于区别不同的用户。在系统内部管理进程和文件保护时使用 UID字段。在Linux系统中,注册名和UID都可以用于标识用户,只不过对于系统来说UID更为重要;而对于用户来说注册名使用起来更方便。在某些特殊目的下,系统中可以存在多个拥有不同注册名、但UID相同的用户,事实上,这些使用不同用户名称的用户实际上是同一个用户,同时也具备相同的用户权限.实际上,UID 就是一个 0~65535 之间的数,不同范围的数字表示不同的用户身份
- 组标志号:Group ID,简称GID。是一个整数,系统内部用它来标识用户所属的组。添加用户时,系统会建立一个和用户名相同的用户组。用户组相同的账户其GID相同
- 相关注释:字段记录着用户的一些个人情况,例如用户的真实姓名、电话、地址等,这个字段并没有什么实际的用途
- 主目录:用户的主目录,即用户登录系统后进入的目录,root目录为/root。每个用户都有自己的主目录,默认一般在/home下建立与用户名一致的目录
- 默认shell:用户登录后,要启动一个进程,负责将用户的操作传给内核,这个进程是用户登录到系统后运行的命令解释器或某个特定的程序,即Shell。Shell是用户与Linux系统之间的接口。Linux的Shell有许多种,每种都有不同的特点。常用的有
sh(BourneShell)
,csh(CShell)
,ksh(KornShell)
,tcsh(TENEX/TOPS-20typeCShell)
,bash(BourneAgainShell)
等。系统管理员可以根据系统情况和用户习惯为用户指定某个Shell。如果不指定Shell,那么系统使用sh为默认的登录Shell,即这个字段的值为/bin/sh。若此处shell为:/sbin/nologin
,则代表这个用户不能登录。这样做的好处是,ftp用户只能通过ftp登录ftp服务器,而不能登录到shell中
/etc/shadow:用户密码文件
该文件为普通文本文件,该文件包含用户及被加密的密码以及其他/etc/passwd不包括的信息等
该文件只允许超级管理员root读取,普通用户没有权限读取。文件的权限不能随便修改成其它用户可读,这是非常危险的。注意,如果这个文件的权限发生了改变,则需要注意是否是恶意攻击,防止系统安全问题的发生
在/etc/shadow
文件中, 每一行代表一个用户账号的信息,每行的字符之间使用:分隔,共9个字段
用户名称:用户密码:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:账号被取消激活前的天数:失效时间:保留字段
下面是/etc/shadow
文件的部分内容
root:$6$sEjoDM14JTLkNiWz$1s4kQfL4xNAIznxeqD9tqLLx.ZKF4s3MYtJhd2UY5SEiiBPrMqe/cFtJwp6wPSzN.0fDjAyDkD8/Yh4HiCR9p.::0:99999:7:::
- 用户名称:/etc/shadow文件中的用户名称和/etc/passwd文件中的用户名称相同,每一行是一一对应的,这样就把/etc/shadow文件和/etc/passwd文件联系在一起了
- 用户密码:加密后的密码,如果这里显示
!!
或x
,则标识这个而用户还没有设置密码,不允许登录系统 - 最后一次修改时间:从1970年1月1日算起到最后一次修改密码的时间间隔天数
- 最小时间间隔:两次修改密码的最小时间间隔,该字段如果为 0, 表示此功能被禁用, 如果是不为0的整数. 表示用户必须经过多少天需要修改密码
- 最大时间间隔:两次修改密码的最大时间间隔:主要作用是管理用户密码的有效期,增强系统的安全性,root用户中为99999,表示密码基本不需要修改
- 警告时间:提前多少天警告用户密码过期,在快到有效期时,当用户登录系统后,系统程序会提醒用户密码将要作废,以便及时更改
- 账号被取消激活前的天数:密码过期后,系统会在多少天后禁用此用户
- 失效时间:从1970年1月1日算起到用户账户禁用的天数,如果该字段为空,则表示用户永久可用
- 保留字段:目前为空,以备将来Linux系统发展使用
增加用户的命令useradd
/etc/login.defs文件
/etc/login.defs 是设置用户帐号限制的文件。该文件里的配置对root用户无效。/etc/login.defs 文件用于在Linux创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等
useradd命令通过读取/etc/login.def
和/etc/default/useradd
文件来确定新账户的默认值,我们可以通过使用标准的文本编辑器来编写这些文件来达到修改默认值
#
# Please note that the parameters in this configuration file control the
# behavior of the tools from the shadow-utils component. None of these
# tools uses the PAM mechanism, and the utilities that use PAM (such as the
# passwd command) should therefore be configured elsewhere. Refer to
# /etc/pam.d/system-auth for more information.
#
# *REQUIRED*
# Directory where mailboxes reside, _or_ name of file, relative to the
# home directory. If you _do_ define both, MAIL_DIR takes precedence.
# QMAIL_DIR is for Qmail
#
#QMAIL_DIR Maildir
#当创建用户时,同时在目录 /var/spool/mail中创建一个用户mail文件
MAIL_DIR /var/spool/mail
#MAIL_FILE .mail
# PASS_MAX_DAYS:两次修改密码的最大时间间隔:主要作用是管理用户密码的有效期
PASS_MAX_DAYS 99999
# PASS_MIN_DAYS:两次修改密码的最小时间间隔
PASS_MIN_DAYS 0
# PASS_MIN_LEN:密码最小长度
PASS_MIN_LEN 5
# PASS_MIN_LEN:提前多少天警告用户密码过期,在快到有效期时,当用户登录系统后,系统程序会提醒用户密码将要作废,以便及时更改
PASS_WARN_AGE 7
# ID_MIN:普通用户最小UID
UID_MIN 1000
# UID_MAX:普通用户最大UID
UID_MAX 60000
# SYS_UID_MIN:系统用户最小UID
SYS_UID_MIN 201
# SYS_UID_MAX:普通用户最大UID
SYS_UID_MAX 999
# GID_MIN:普通组最小GID
GID_MIN 1000
# GID_MAX:普通组最大GID
GID_MAX 60000
# SYS_GID_MIN:系统组最大GID
SYS_GID_MIN 201
# SYS_GID_MAX:系统组最大GID
SYS_GID_MAX 999
#
# If defined, this command is run when removing a user.
# It should remove any at/cron/print jobs etc. owned by
# the user to be removed (passed as the first argument).
#
#USERDEL_CMD /usr/sbin/userdel_local
#此项指定是否创建用户主目录,yes表示创建,no表示不创建
CREATE_HOME yes
# 权限掩码被初始化为此值。 如果未指定则初始化为022
UMASK 077
# 如果没有成员,这使userdel可以删除用户组
USERGROUPS_ENAB yes
# 使用SHA512加密密码
ENCRYPT_METHOD SHA512
/etc/default/useradd文件
useradd命令通过读取/etc/login.def
和/etc/default/useradd
文件来确定新账户的默认值,我们可以通过使用标准的文本编辑器来编写这些文件来达到修改默认值
/etc/default/useradd
内容
# useradd defaults file
# GROUP=100:默认用户
GROUP=100
# HOME=/home:将新建用户的主目录放在/home目录下
HOME=/home
# INACTIVE=-1:是否启用账号过期功能,-1:不启用
INACTIVE=-1
# EXPIRE=:代表账号过期日期,不设置i表示不启用
EXPIRE=
# SHELL=/bin/bash:代表新建用户的默认shell类型
SHELL=/bin/bash
# SKEL=/etc/skel:新用户主目录中默认文件来源,也就是说,新建用户主目录主目录下的文件是从/etc/skel目录复制而来
SKEL=/etc/skel
#CREATE_MAIL_SPOOL=yes:
CREATE_MAIL_SPOOL=yes
更改/etc/default/useradd
文件的方式
- 通过标准文本编辑器修改
- 通过useradd命令修改:在useradd命令后面加-D选项后,就可以修改
/etc/default/useradd
文件中的内容了
useradd语法
useradd可以用来建立用户账号,账号建立好后,因没有设置密码,所以不允许登录,需要使用passwd设定账号的密码后才可以登录使用
功能说明:建立用户账号
语法
useradd [选项][参数]
选项与参数:
-c<参数>
:加上备注文字。备注文件会保存在passwd的备注栏目中
-d<登入目录>
:指定用户登入时的起始目录
-D
:变更预设值
-e<有效期限>
:指定账号的有效期限
-f<缓冲天数>
:指定在密码过期后的多少天即关闭该账号
-g<群组>
:指定用户所属的群组
-G<群组>
:指定用户所属的附加群组
-m
:自动建立用户的登入目录
-M
:不要自动建立用户的登入目录
-n
:取消建立以用户名为名的群组
-r
:建立系统账号
-s<shell>
:指定用户登入后所使用的shell
-u<uid>
:指定用户ID
useradd实例
useradd创建普通用户账号
[root@localhost ~]# useradd newuser
useradd创建系统用户账号
[root@localhost ~]# useradd -r sysuser
useradd创建用户账号,并设置UID
创建newuser用户并设置UID为1666
[root@localhost ~]# useradd -u 1666 newuser
useradd创建用户账号,并设置用户组群
创建newuser用户并设置用户组群为root
[root@localhost ~]# useradd -g root newuser
useradd创建用户账号,并设置用户主目录
创建newuser用户并设置用户主目录为/home/newuser2
[root@localhost ~]# useradd -d /home/newuser2 newuser
useradd创建用户账号,并设置用户Shell类型
创建newuser用户并设置shell类型为/bin/csh
[root@localhost ~]# useradd -s /bin/csh newuser
useradd显示/etc/default/useradd文件的默认配置
查看显示/etc/default/useradd文件的默认配置
[root@localhost ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
useradd创建不能登录的用户账号
要拒绝系统用户登录,可以将其 shell 设置为 /usr/sbin/nologin
或者 /bin/false
。
-
/bin/false
什么也不做只是返回一个错误状态,然后立即退出。将用户的 shell 设置为/bin/false
,用户会无法登录,并且不会有任何提示。 -
/usr/sbin/nologin
会礼貌的向用户显示一条信息,并拒绝用户登录 - 有一些软件,比如一些 ftp 服务器软件,对于本地非虚拟账户,只有用户有有效的 shell 才能使用 ftp 服务。这时候就可以使用 nologin 使用户即不能登录系统,还能使用一些系统服务,比如 ftp 服务。
/bin/false
则不行,这是二者的重要区别之一。
[root@localhost ~]# useradd -s /usr/sbin/nologin newuser
如果存在 /etc/nologin 文件,则系统只允许 root 用户登录,其他用户全部被拒绝登录,并向他们显示 /etc/nologin 文件的内容。
修改用户的命令usermod
usermod可用来修改用户账号的各项设定
功能说明:修改用户账号
语法
userdel [选项][参数]
选项与参数:
-c<参数>
:修改用户账号的备注文字
-d<登入目录>
:修改用户登入时的起始目录
-e<有效期限>
:修改账号的有效期限
-f<缓冲天数>
:修改在密码过期后的多少天即关闭该账号
-g<群组>
:修改用户所属的群组
-G<群组>
:修改用户所属的附加群组
-l<账号名称>
:修改用户账号名称
-L
:锁定用户密码,使密码无效
-s<shell>
:修改用户登入后所使用的shell
-u<uid>
:修改用户ID
-U
:解除密码锁定
-m
, --move-home
将家目录内容移至新位置 (仅于 -d 一起使用)
usermod实例
usermod修改用户用户名
将username用户登录名修改为newusername
[root@localhost ~]# usermod -l newusername username
usermod修改用户备注
修改username用户的备注为remark
[root@localhost ~]# usermod -c remark username
usermod修改用户群组
修改username用户群组为root,该群组在修改时必须存在
[root@localhost ~]# usermod -g root username
usermod锁定用户密码
锁定username用户密码,使密码无效
锁定的用户无法直接登录,但是可以从其它用户切换到该账户
[root@localhost ~]# usermod -L username
usermod解锁用户密码
解锁username用户密码
[root@localhost ~]# usermod -U username
usermod修改用户主目录
修改username用户的主目录,该操作并不会自动创建文件夹,也不会自动将旧主目录中的文件和目录自动移动到新主目录中
[root@localhost ~]# usermod -d /home/username2 username
usermod修改用户主目录,并自动创建目录
修改username用户的主目录,该操作会自动创建文件夹,并自动将旧主目录中的文件和目录自动移动到新主目录中
[root@localhost ~]# usermod -d /home/username2 -m username
usermod修改用户账号被取消激活前的天数
密码过期后,系统会在11天后禁用此用户
[root@localhost ~]# usermod -f 11 username
usermod修改用户过期日期
修改username的过期日期是2111年11月11日
[root@localhost ~]# usermod -e 11/11/2111 username
usermod修改用户默认Shell类型
将username的默认shell类型更改为/bin/ksh
[root@localhost ~]# usermod -s /bin/ksh username
删除用户的命令userdel
userdel可删除用户账号与相关的文件。若不加参数,则仅删除用户账号,而不删除相关文件
功能说明:删除用户账号
语法
userdel [选项][参数]
选项与参数:
-r
:删除用户登入目录以及目录中所有文件
-f
:强制删除用户
userdel实例
userdel删除用户
[root@localhost ~]# userdel newuser
userdel删除用户,并删除用户主目录
[root@localhost ~]# userdel -r newuser
userdel强制删除用户
[root@localhost ~]# userdel -f newuser
userdel强制删除用户,并删除用户主目录
[root@localhost ~]# userdel -rf newuser