Linux 用户管理工具介绍

时间:2021-09-22 15:00:04

 

本文主要介绍Linux系统的用户和用户组的查询、添加、修改及删除等管理工具;
Linux是一个多用户的操作系统,她有完美的用户管理工具,这些工具包括用户的查询、添加、修改,以及用户之间相互切换的工具等;通过这些工具,我们能安全、轻松的完成用户管理;
一、与用户管理相关的配置文件
1、/etc/passwd 和/etc/groups
在linux系统下,对用户和用户组进行添加、修改、删除等操作的最终目的都是通过修改用户和组的配置文件来实现的,这些主要配置文件主要有:
/etc/passwd、/etc/shadows、/etc/groups、/etc/gshadow、/etc/skel 目录等;
用户和用户组的配置文件,是系统管理员最应该了解和掌握的系统基础之一,从另一方面来说,了解这些文件也是系统安全管理的重要组成部分;
1、/etc/passwd 用户帐号密码文件
[root@jekay /]# cat /etc/passwd
登陆名 口令 UID GID 用户全称和描述 用户主目录 用户登陆的shell环境
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
……
在/etc/passwd 中,每一行都表示的是一个用户的信息;一行有7个段位;每个段位用:号分割,如上:
说明:
UID是用户的ID值,是确认用户权限的标识,在系统中每个用户的UID的值是唯一的,更确切的说每个用户都要对应一个唯一的UID
,系统管理员应该确保这一规则。系统用户的UID的值从0开始,是一个正整数,至于最大值可以在/etc/login.defs
可以查到,一般Linux发行版约定为60000; 在Linux
中,root的UID是0,拥有系统最高权限;把几个用户设置为同样的UID会造成系统安全的隐患,尤其是设置成root的 UID号0;
Linux系统中的用户角色:
用户在系统中是分角色的,在Linux 系统中,由于角色不同,权限和所完成的任务也不同;值得注意的是用户的角色是通过UID和识别的,特别是UID;在系统管理中,系统管理员一定要坚守UID 唯一的特性;
root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
普通用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;
/etc/login.defs是设置用户帐号限制的文件,在这里我们可配置密码的最大过期天数,密码的最大长度约束等内容;
多数发行版本,添加新用户时的UID从500开始的,GID也是从500开始;500内的为系统预留;
2、/etc/shadows 用户帐号的加密文件
[root@jekay /]# cat /etc/shadow
root:$1$MebjzxXM$0hVmQ6MMDB5ZVVAGuUG7G1:13599:0:99999:7:::
bin:*:13599:0:99999:7:::
daemon:*:13599:0:99999:7:::
adm:*:13599:0:99999:7:::
lp:*:13599:0:99999:7:::
sync:*:13599:0:99999:7:::
……
/etc/shadow 文件的内容包括9个段位,每个段位之间用:号分割;
第一字段: 用户名(也被称为登录名),在/etc/shadow中,用户名和/etc/passwd 是相同的,这样就把passwd 和shadow中用的用户记录联系在一起;这个字段是非空的;
第二字段:密码(已被加密),如果是有些用户在这段是x,表示这个用户不能登录到系统;这个字段是非空的;
第三字段:上次修改口令的时间;这个时间是从1970年01月01日算起到最近一次修改口令的时间间隔(天数),您可以通过passwd 来修改用户的密码,然后查看/etc/shadow中此字段的变化;
第四字段:两次修改口令间隔最少的天数;如果设置为0,则禁用此功能;也就是说用户必须经过多少天才能修改其口令;此项功能用处不是太大;默认值是通过/etc/login.defs文件定义中获取,PASS_MIN_DAYS 中有定义;
第五字段:两次修改口令间隔最多的天数;这个能增强管理员管理用户口令的时效性,应该说在增强了系统的安全性;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_MAX_DAYS 中定义;
第六字段:提前多少天警告用户口令将过期;当用户登录系统后,系统登录程序提醒用户口令将要作废;如果是系统默认值,是在添加用户时由/etc/login.defs文件定义中获取,在PASS_WARN_AGE 中定义;
第七字段:在口令过期之后多少天禁用此用户;此字段表示用户口令作废多少天后,系统会禁用此用户,也就是说系统会不能再让此用户登录,也不会提示用户过期,是完全禁用;
第八字段:用户过期日期;此字段指定了用户作废的天数(从1970年的1月1日开始的天数),如果这个字段的值为空,帐号永久可用;
第九字段:保留字段;
/etc/shadow文件是/etc/passwd 的投影文件,这个文件并不由/etc/passwd
而产生的,这两个文件是应该是对应互补的;shadow内容包括用户及被加密的密码以及其它/etc/passwd
不能包括的信息,比如用户的有效期限等;这个文件只有root权限可以读取和操作,权限如下:
-r-------- 1 root root 740 Mar 27 17:03 /etc/shadow
3、/etc/groups 用户组帐号文件
具有某种共同特征的用户集合起来就是用户组(Group)。用户组(Group)配置文件主要有 /etc/group和/etc/gshadow,其中/etc/gshadow是/etc/group的加密信息文件;
/etc/group文件相对来说比较简单,通过这个配置文件,我们可以清楚地看到系统中用户组,以及用户属于哪个组,某个组中的用户成员有谁等;
Linux系统下用户组分为2种,用户私有组和公有组;
私用组:只包含一个用户,创建用户时自动创建一个和用户同名的组
公有组:可以包含多个用户
当一个用户属于多个用户组时,某个用户的权限只能是当前所属组的权限,而不能是多个组权限的累加,这与windows是不一样的;
不要随便把普通用户加入到root组;
[root@jekay /]# cat /etc/group
组名 群组密码 GID 组中用户列表
root:x:0:root
bin:x:1:root,bin,daemon
daemon:x:2:root,bin,daemon
sys:x:3:root,bin,adm
adm:x:4:root,adm,daemon
tty:x:5:
……
在/etc/group 中的每条记录分四个字段,中间使用:隔开
GID和UID类似,是一个正整数或0,是用户组的ID值,GID从0开始,
0被系统赋予root用户组;系统会预留一些较靠前的GID给系统虚拟用户组之用;多数linux发行版本预留了500,也就是说新用户组的GID从
500开始;查看 /etc/login.defs 中的 GID_MIN 和GID_MAX 值,可以知道GID的最大设置值;
4、/etc/gshadow 用户组帐号的加密文件
[root@jekay /]# cat /etc/gshadow
用户组名 用户组密码 用户组的管理者 组成员列表
root:::root
bin:::root,bin,daemon
daemon:::root,bin,daemon
sys:::root,bin,adm
adm:::root,adm,daemon
tty:::
……
/etc/gshadow是/etc/group的加密文件;
用户组密码,用于结构比较复杂的权限模型;
5、/etc/skel 目录 用来初始化用户的主目录
[root@jekay /]# ls -al /etc/skel
total 20
drwxr-xr-x 2 root root 4096 Mar 27 16:59 .
drwxr-xr-x 32 root root 4096 Mar 27 17:04 ..
-rw-r--r-- 1 root root 24 Feb 11 2003 .bash_logout
-rw-r--r-- 1 root root 191 Feb 11 2003 .bash_profile
-rw-r--r-- 1 root root 124 Feb 11 2003 .bashrc
目录中存放有与用户相关的配置文件。一般来说,每个用户都有自己的主目录,用户
成功登录后就处于自己的主目录下。
当为新用户创建主目录时,系统会在新用户的主目录下建立一份/etc/skel目录下所有文件的拷贝,用来初始化用户的主目录。
2、超级权限控制sudo 的配置文件 /etc/sudoers
root超级用户是系统最高权限的拥有者;几乎无所不能,多数的系统设置和权限设置对root帐号来说是无用的;所以root帐号权限管理不善就会造成系统安全的隐患;
在对系统操作时尽量避免使用root登陆,也应该尽量避免直接使用root帐号对系统进行配置和操作;但有时普通用户可能需要root权限来完成必要的系统管理工作,我们可以使用su和sudo来实现;
用户帐号类型:
超级用户:在Linux操作系统中,root的权限是最高的,也被称为超级权限的拥有者。普通用户无法执行的操作,root用户都能完成,所以也被称之为
超级管理用户。在系统中,每个文件、目录和进程,都归属于某一个用户,没有用户许可其它普通用户是无法操作的,但对root除外。root用户的特权性还
表现在root可以超越任何用户和用户组来对文件或目录进行读取、修改或删除(在系统正常的许可范围内);对可执行程序的执行、终止;对硬件设备的添加、
创建和移除等;也可以对文件和目录进行属主和权限进行修改,以适合系统管理的需要(因为root是系统中权限最高的特权用户);UID为0;
普通用户和伪装用户:与超级用户相对的就是普通用户和虚拟(也被称为伪装用户),普通和伪装用户都是受限用户;但为了完成特定的任务,普通用户和伪装用户
也是必须的;Linux是一个多用户、多任务的操作系统,多用户主要体现在用户的角色的多样性,不同的用户所分配的权限也不同;这也是Linux系统比
Windows系统更为安全的本质所在;
但值得注意的是超级用户的操作是在系统最高许可范围内的操作;有些操作就是具有超级权限的root也无法完成;如:/proc目录、加了写保护的文件等;
[root@jekay /]# ls -ld /proc
dr-xr-xr-x 47 root root 0 Mar 27 12:03 /proc
[root@jekay tmp]# chattr +i file
[root@jekay tmp]# rm -f file
rm: cannot remove `file': Operation not permitted
获取超级权限的过程,就是切换普通用户身份到超级用户身份的过程;这个过程主要是通过su和sudo 来解决;
使用 su 命令临时切换用户身份
su命令就是切换用户的工具;
su [OPTION选项参数] [用户]
-, -l, --login 登录并改变到所切换的用户环境;
-c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境;
su 在不加任何参数,默认为切换到root用户,不改变shell环境;
su 加参数 - ,表示默认切换到root用户,并且改变到root用户的环境;
su
的确为管理带来方便,通过切换到root下,能完成所有系统管理工具,只要把root的密码交给任何一个普通用户,他都能切换到root来完成所有的系统
管理工作;但如果登陆的用户比较多,而多个用户都需要使用root权限,这时就可能会造成安全隐患,而且由于切换的过程是打开root的shell环境,
很多情况下也会造成root权限外泻;
sudo工具
由于su
对切换到超级权限用户root后,权限的无限制性,所以su并不能担任多个管理员所管理的系统。通过sudo,我们能把某些超级权限有针对性的下放,并且
不需要普通用户知道root密码,所以sudo 相对于权限无限制性的su来说,还是比较安全的,所以sudo 也能被称为受限制的su
;另外sudo 是需要授权许可的,所以也被称为授权许可的su;
sudo 执行命令的流程是当前用户切换到root(或其它指定切换到的用户),然后以root(或其它指定的切换到的用户)身份执行命令,执行完成后,直接退回到当前用户;而这些的前提是要通过sudo的配置文件/etc/sudoers来进行授权;
sudo的配置文件是/etc/sudoers ;可通过命令visudo直接进行编辑;
通过sudo -l 来查看哪些命令是可以执行或禁止的;
/etc/sudoers 文件中每行算一个规则,前面带有#号可以当作是说明的内容,并不执行;如果规则很长,一行列不下时,可以用\号来续行,这样看来一个规则也可以拥有多个行;
/etc/sudoers 的规则可分为两类;一类是别名定义,另一类是授权规则;别名定义并不是必须的,但授权规则是必须的;
默认/etc/sudoers配置文件
[root@jekay]# cat /etc/sudoers
# sudoers file.
# This file MUST be edited with the 'visudo' command as root.
# See the sudoers man page for the details on how to write a sudoers file.
# Host alias specification
# User alias specification
# Cmnd alias specification
# Defaults specification
# User privilege specification
root ALL=(ALL) ALL
# Uncomment to allow people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
# Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
# Samples
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom
# %users localhost=/sbin/shutdown -h now
别名规则定义格式如下:
Alias_Type NAME = item1, item2, ...
或Alias_Type NAME = item1, item2, item3 : NAME = item4, item5
别名类型(Alias_Type):别名类型包括如下四种
Host_Alias 定义主机别名;项目可以是主机名、可以是单个ip(整段ip地址也可以),也可以是网络掩码;
Host_Alias BE01=localhost,bt05,tt04,10.0.0.4,255.255.255.0,192.168.1.0/24 注:定义主机别名HT01,通过=号列出成员
User_Alias 用户别名,别名成员可以是用户,用户组(前面要加%号)
User_Alias SYSAD=jekay,linux,lt,benet:NETAD=jekay:WEBMASTER=admin
Runas_Alias 用来定义runas别名,这个别名指定的是“目的用户”,即sudo 允许切换至的用户;
Runas_Alias OP = root, operator
Cmnd_Alias 定义命令别名;
Cmnd_Alias DISKMAG=/sbin/fdisk,/sbin/parted
Cmnd_Alias NETMAG=/sbin/ifconfig,/etc/init.d/network
Cmnd_Alias KILL = /usr/bin/kill
NAME 就是别名了,NMAE的命名是包含大写字母、下划线以及数字,但必须以一个大写字母开头;
item 按中文翻译是项目,在这里我们可以译成成员,如果一个别名下有多个成员,成员与成员之间,通过半角,号分隔;成员在必须是有效并事实存在的。
item成员受别名类型 Host_Alias、User_Alias、Runas_Alias、Cmnd_Alias
制约,定义什么类型的别名,就要有什么类型的成员相配。我们用Host_Alias定义主机别名时,成员必须是与主机相关相关联,比如是主机名(包括远程
登录的主机名)、ip地址(单个或整段)、掩码等;当用户登录时,可以通过w命令来查看登录用户主机信息;用User_Alias和
Runas_Alias定义时,必须要用系统用户做为成员;用Cmnd_Alias
定义执行命令的别名时,必须是系统存在的文件,文件名可以用通配符表示,配置Cmnd_Alias时命令需要绝对路径;其中 Runas_Alias
和User_Alias 有点相似,但与User_Alias 绝对不是同一个概念,Runas_Alias 定义的是某个系统用户可以sudo
切换身份到Runas_Alias 下的成员;我们在授权规则中以实例进行解说;
别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过\来续行;同一类型别名的定义,一次也可以定义几个别名,他们中间用:号分隔,
/etc/sudoers中的授权规则
授权规则是分配权限的执行规则,我们前面所讲到的定义别名主要是为了更方便的授权引用别名;如果系统中只有几个用户,其实下放权限比较有限的话,可以不用定义别名,而是针对系统用户直接直接授权,所以在授权规则中别名并不是必须的;
授权用户 主机=命令动作
这三个要素缺一不可,但在动作之前也可以指定切换到特定用户下,在这里指定切换的用户要用( )号括起来,如果不需要密码直接运行命令的,应该加NOPASSWD:参数,但这些可以省略;
授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户组)] [是否需要密码验证] [命令3]......
注解:
凡是[ ]中的内容,是可以省略;命令与命令之间用,号分隔;可以使用NOPASSWD参数,就不要在运行命令时提示密码输入;
举例:
jekay ALL=(root) /bin/chown,/bin/chmod 执行时会提示输入jekay的密码
jekay ALL=(root) NOPASSWD: /bin/chown,/bin/chmod 就不需要密码
jekay ALL=(root) NOPASSWD: /bin/more
切换到jekay用户下使用more /etc/shadow就可以了,不会提示输入密码
User_Alias SYSUSER=jekay
SYSUSER ALL=(root) /sbin/fdisk
使用用户别名来完成;
sudo [参数选项] 命令
-l 列出用户在主机上可用的和被禁止的命令;一般配置好/etc/sudoers后,要用这个命令来查看和测试是不是配置正确的;
-v 验证用户的时间戳;如果用户运行sudo 后,输入用户的密码后,在短时间内可以不用输入口令来直接进行sudo 操作;用-v 可以跟踪最新的时间戳;
-u 指定以以某个用户执行特定操作;
-k 删除时间戳,下一个sudo 命令要求用求提供密码;
3、添加用户规则文件 /etc/login.defs 和 /etc/default/useradd
/etc/login.defs 配置文件
/etc/login.defs 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限等等,这个文件是可以通过root来定义的;
/etc/logins.defs 文件内容;
# *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
MAIL_DIR /var/spool/mail 注:创建用户时,要在目录/var/spool/mail中创建一个用户mail文件;
#MAIL_FILE .mail
# Password aging controls:
#
# PASS_MAX_DAYS Maximum number of days a password may be used.
# PASS_MIN_DAYS Minimum number of days allowed between password changes.
# PASS_MIN_LEN Minimum acceptable password length.
# PASS_WARN_AGE Number of days warning given before a password expires.
#
PASS_MAX_DAYS 99999 注:用户的密码不过期最多的天数;
PASS_MIN_DAYS 0 注:密码修改之间最小的天数;
PASS_MIN_LEN 5 注:密码最小长度;
PASS_WARN_AGE 7 注:
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN 500 注:最小UID为500 ,也就是说添加用户时,UID 是从500开始的;
UID_MAX 60000 注:最大UID为60000;
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN 500 注:GID 是从500开始;
GID_MAX 60000
#
# 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
#
# If useradd should create home directories for users by default
# On RH systems, we do. This option is ORed with the -m flag on
# useradd command line.
#
CREATE_HOME yes 注:是否创用户家目录,要求创建;
/etc/default/useradd 文件
通过useradd 添加用户时的规则文件;
# useradd defaults file
GROUP=100
HOME=/home 注:把用户的家目录建在/home中;
INACTIVE=-1 注:是否启用帐号过期停权,-1表示不启用;
EXPIRE= 注:帐号终止日期,不设置表示不启用;
SHELL=/bin/bash 注:所用SHELL的类型;
SKEL=/etc/skel 注: 默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;
二、用户相关工具命令;
1、添加用户工具有useradd和adduser ,这两个工具所达到的目的都是一样的;
2、通过修改用户配置文件/etc/passwd和/etc/groups的办法来实现;
3、还有图形下的工具;
1、useradd 工具
Useradd添加用户时,先读取/etc/login.defs和/etc/default/useradd中所定义的规则添加用户;并向
/etc/passwd和/etc/groups文件添加用户和用户组记录;当然/etc/passwd和/etc/groups的加密文件也同步生成记
录;同时发生的还有系统会自动在/etc/add/default中所约定的目录中建用户的主目录,并复制/etc/skel中的文件(包括隐藏文件)到
新用户的主目录中;
useradd 的语法:
(1) 对/etc/default/useradd进行修改,设置添加的新用户的默认设置;
useradd -D [-g group] [-b base] [-s shell]
[-f inactive] [-e expire ]
-D选项出现时,显示/etc/default/useradd配置文件中设置的useradd的设置;
-b default_home 注:定义用户所属目录的前一个目录。用户名称会附加在default_home后面用来建立新用户的目录。当然使用-d后则此选项无效。
-e default_expire_date 注:用户帐号停止日期。
-f default_inactive 注:帐号过期几日后停权。
-g default_group 注:新帐号起始用户组名或ID。用户组名须为现有存在的名称。用户组ID也须为现有存在的用户组。
-s default_shell 注:用户登入后使用的shell名称。往后新加入的帐号都将使用此shell.
如不指定任何参数,useradd显示目前预设的值。
(2)useradd 添加用户;
useradd [-u uid [-o]] [-g group] [-G group,...]
[-d home] [-s shell] [-c comment] [-m [-k template]]
[-f inactive] [-e expire ] [-p passwd] name
useradd 可使用的选项为
-c comment 注:新帐号 password 档的说明栏 。
-d home_dir 注:新帐号每次登入时所使用的home_dir。预设值为default_home内login名称,并当成登入时目录名称。
-e expire_date 注:帐号终止日期。日期的指定格式为MM/DD/YY。
-f inactive_days 注:帐号过期几日后永久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能,预设值为-1
-g initial_group 注:group名称或以数字来做为用户登入起始用户组(group)。用户组名须为现有存在的名称。用户组数字也须为现有存在的用户组。预设的用户组数字为1。
-G group,[...]
注:定义此用户为此一堆groups的成员。每个用户组使用","区格开来,不可以夹杂空白字元。用户组名同-g选项的限制。定义值为用户的起始用户组。。
-m
注:用户目录如不存在则自动建立。如使用-k选项skeleton_dir内的档案将复制至用户目录下。然而在/etc/skel目录下的档案也会复制过
去取代。任何在skeleton_dir or
/etc/skel的目录也相同会在用户目录下一一建立。The-k同-m不建立目录以及不复制任何档案为预设值。
-M 不建立用户目录,即使/etc/login.defs系统档设定要建立用户目录。
-n 预设值用户用户组与用户名称会相同。此选项将取消此预设值。
-r
此参数是用来建立系统帐号。系统帐号的UID会比定义在系统档上/etc/login.defs.的UID_MIN来的小。注意useradd此用法所建
立的帐号不会建立用户目录,也不会在乎纪录在/etc/login.defs.的定义值。如果你想要有用户目录须额外指定-m参数来建立系统帐号。
-s shell 注:用户登入后使用的shell名称。预设为不填写,这样系统会帮你指定预设的登入shell。
-u uid uid用户的ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为以/etc/login.defs中的UID_MIN的值为准,0到UID_MIN的值之间,为系统保留的UID ;
2、userdel 用法;
userdel 的语法格式:
userdel [-r] 名称
userdel很简单,只有一个参数可选 -r ;如果加参数-r ,表示在删除用户的同时,一并把用户的家目录及本地邮件存储的目录或文件也一同删除;
userdel 参数 用户名
警告: 请不要轻易用-r参数;他会删除用户的同时删除用户所有的文件和目录;如果用户目录下有重要的文件,在删除前请备份;
3、usermod 用户修改工具(极其强大)
usermod 不仅能改用户的SHELL类型,所归属的用户组,也能改用户密码的有效期,还能改登录名。
usermod [-u uid [-o]] [-g group] [-G group,...]
[-d 主目录 [-m]] [-s shell] [-c 注释] [-l 新名称]
[-f 失效日] [-e 过期日] [-p 密码] [-L|-U] 用户名
-c comment
更新用户帐号password档中的注解栏,一般是使用chfn(1)来修改。
-d home_dir
更新用户新的登入目录。如果给定-m选项,用户旧目录会搬到新的目录去,如旧目录不存在则建个新的。
-e expire_date 加上用户帐号停止日期。日期格式为MM/DD/YY.
-f inactive_days 帐号过期几日后永久停权。当值为0时帐号则立刻被停权。而当值为-1时则关闭此功能。预设值为-1。
-g initial_group 更新用户新的起始登入用户组。用户组名须已存在。用户组ID必须参照既有的的用户组。用户组ID预设值为1。
-G group,[...] 定义用户为一堆groups的成员。每个用户组使用","区格开来,不可以夹杂空白字元。用户组名同-g选项的限制。如果用户现在的用户组不再此列,则将用户由该用户组中移除。
-l login_name 变更用户login时的名称为login_name。其它不变。特别是,用户目录名应该也会跟着更动成新的登入名。
-s shell 指定新登入shell。如此栏留白,系统将选用系统预设shell。
-u
uid用户ID值。必须为唯一的ID值,除非用-o选项。数字不可为负值。预设为最小不得小于/etc/login.defs中定义的UID_MIN值。
0到UID_MIN值之间是传统上保留给系统帐号使用。用户目录树下所有的档案目录其userID会自动改变。放在用户目录外的档案则要自行手动更动。
警告:usermod不允许你改变正在线上的用户帐号名称。当usermod用来改变userID,必须确认这名user没在电脑上执行任何程序。你需手
动更改用户的crontab档。也需手动更改用户的at工作档。采用NISserver须在server上更动相关的NIS设定。
警告: usermod 最好不要用它来改用户的密码,因为他在/etc/shadow中显示的是明口令;修改用户的口令最好用passwd ;
4、添加用户组命令groupadd ;
语法格式:
groupadd [-g gid [-o]] [-r] [-f] 组名
-g 后接GID值,除非使用-o参数不然该值必须是唯一,不可相同,数值不可为负,预设值以/etc/login.defs为准;
-r 此参数是用来建立系统帐号的GID会比定义在系统档文件上/etc/login.defs
的GID_MIN来的小。注意useradd此用法所建立的帐号不会建立使用者目录,也不会纪录在/etc/login.defs.的定义值。如果你想要
有使用者目录须额外指定-m参数来建立系统帐号,它会自动帮你选定一个小于的GID_MIN的值,不需要再加上-g参数。
-f This is force flag.新增一个已经存在的用户组帐号,系统会出现错误讯息然后结束groupadd。
5、groupdel的用法;
groupdel 是用来删除用户组的;
语法格式:groupdel 用户组
6、passwd命令;
我们已经学会如何添加用户了,所以我们还要学习设置或修改用户的密码;passwd命令的用法也很多,我们只选如下的几个参数加以说明;想了解更多,请参考man passwd或passwd --help ;
passwd [OPTION...]
passwd 作为普通用户和超级权限用户都可以运行,但作为普通用户只能更改自己的用户密码,但前提是没有被root用户锁定;如果root用户运行passwd ,可以设置或修改任何用户的密码;
passwd 命令后面不接任何参数或用户名,则表示修改当前用户的密码;
[root@localhost]# passwd 注:没有加任何用户,我是用root用户来执行的passwd 表示修改root用户的密码;下面也有提示;
Changing password for user root.
New UNIX password: 注:请输入新密码;
Retype new UNIX password: 注:验证新密码;
passwd: all authentication tokens updated successfully. 注:修改root密码成功;
如果新建用户后,要为新用户创建密码,则用 passwd 用户名 ,注意要以root用户的权限来创建;
passwd 几个比较重要的参数;
[root@localhost]# passwd --help
Usage: passwd [OPTION...]
-k, --keep-tokens keep non-expired authentication tokens
注:保留即将过期的用户在期满后能仍能使用;
-d, --delete delete the password for the named account (root only)
注:删除用户密码,仅能以root权限操作;
-l, --lock lock the named account (root only)
注:锁住用户无权更改其密码,仅能通过root权限操作;
-u, --unlock unlock the named account (root only)
注:解除锁定;
-f, --force force operation
注:强制操作;仅root权限才能操作;
-x, --maximum=DAYS maximum password lifetime (root only)
注:两次密码修正的最大天数,后面接数字;仅能root权限操作;
-n, --minimum=DAYS minimum password lifetime (root only)
注:两次密码修改的最小天数,后面接数字,仅能root权限操作;
-w, --warning=DAYS number of days warning users receives before
注:在距多少天提醒用户修改密码;仅能root权限操作;
password expiration (root only)
-i, --inactive=DAYS number of days after password expiration when an
注:在密码过期后多少天,用户被禁掉,仅能以root操作;
account becomes disabled (root only)
-S, --status report password status on the named account (root only)
注:查询用户的密码状态,仅能root用户操作;
--stdin read new tokens from stdin (root only)
注意: 当我们清除一个用户的密码时,登录时就无需密码;这一点要加以注意;
7、chage 修改用户密码有效期限的命令;
chage 用语法格式:
chage [-l] [-m 最小天数] [-M 最大天数] [-W 警告] [-I 失效日] [-E 过期日] [-d 最后日] 用户
8、chfn 修改用户信息工具;
chfn 这个工具主要是用来改用户的全名,办公室地址,电话之类的;用法如下:
chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ -u ] [ -v ] [ username ]
[root@localhost]# chfn linux 注:更改用户linux的信息;
Changing finger information for linux.
Name []: jekay Linux 注:用户全名jekay Linux ,随便写一个就行;
Office []: benet
Office Phone []: 44444444
Home Phone []: 88888888
Finger information changed. 注:更改完成;
9、chsh 改变用户的SHELL类型;
[root@localhost]# chsh --help
Usage: chsh [ -s shell ] [ --list-shells ] [ --help ] [ --version ] [ username ]
如果chsh 不加任何参数及用户名的情况下,默认为更改当前操作用户的SHELL类型;
举例说明:
[root@localhost]# chsh --list-shells 注:列出当前系统中所有的SHELL;
/bin/sh
/bin/bash
/sbin/nologin 注:这个是不允许用户登录系统所用,是极为有用的;您可以通过查看/etc/passwd 中看哪些用户是nologin;
/bin/ksh
/bin/tcsh
/bin/csh
/bin/zsh
[root@localhost]# chsh -s /bin/ksh linux 注:更改linux所用的shell为ksh ;
Changing shell for linux.
Shell changed. 注:更改完成;
10、gpasswd 设置一个组的群组密码
格式:gpasswd 参数 用户名 组名
-a----将一个用户加入到一个组中
-d----将一个用户从一个组中删除掉
-r----取消一个用户组的群组密码
-g----修改一个用户组的gid号
-n----修改一个用户组的组名 groupmod -n 新组名 老组名
finger 参数 用户名
id 选项 用户名
除了直接查看用户(User)和用户组(Group)配置文件的办法除外,我们还有id和finger工具可用,我们一样通过命令行的操作,来完成对用户的查询;id和finger,是两个各有测重的工具,
id工具更测重用户、用户所归属的用户组、UID 和GID 的查看;
finger侧重用户资讯的查询,比如用户名(登录名)、电话、家目录、登录SHELL类型、真实姓名、空闲时间等等;
id 命令用法:
[root@localhost /]# id jekay
uid=500(jekay) gid=500(jekay) groups=500(jekay)
finger 的用法:
finger [参数选项] [用户名]
-l 采用长格式(默认),显示由-s选项所包含的所有信息,以及主目录、办公地址、办公电话、登录SHELL、邮件状态、.plan、.project和.forward;
-m 禁止对用户真实名字进行匹配;
-p 把.plan和.project文件中的内容省略;
-s 显示短格式,用户名(也被称为登录名Login)、真实名字(NAME)、在哪个终端登录(Tty)、写状态、空闲时间(Idle)、登录时间(Login Time)、办公地点、办公电话等;
[root@localhost /]# finger jekay
Login: jekay Name: (null)
Directory: /home/jekay Shell: /bin/bash
Never logged in.
No mail.
No Plan.
查看用户信息还可以通过配置文件去查询用户和组的信息;
w、who和users工具,是查询已登录当前主机的用户;另外finger -s 也同样能查询;侧重点不一样;
[root@localhost /]# w
22:43:44 up 3:03, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.1.104 7:41pm 0.00s 1.93s 0.35s w
[root@localhost /]# who
root pts/0 Mar 27 19:41 (192.168.1.104)
[root@localhost /]# users
rootbeinan pts/4 :0.0 12:06 0.00s 0.21s 0.00s w
w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。
w命令的显示项目按以下顺序排列:
-----当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。
然后是每个用户的各项数据,项目显示顺序如下:
-----登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。
16、pwcov 注:同步用户从/etc/passwd 到/etc/shadow
pwck 注:pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整;
pwunconv 注:是pwcov 的立逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件;
visudo 来编辑/etc/sudoers来实现;visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的;
通过修改用户和用户组配置文件的办法来添加用户和组
流程:
1)修改 /etc/passwd ,添加用户记录;
jekay:x:508:508::/home/jekay:/bin/bash
然后执行pwconv ,让/etc/passwd 和/etc/shadow同步,您可以查看 /etc/shadow的内容是否同步;
[root@localhost]# pwconv
2)修改/etc/group,添加私有用户组
jekay:x:508:
其次,是运行 grpconv 来同步/etc/group 和/etc/gshadow内容,您可以通过查看/etc/gshadow的内容变化确认是不是添加组成功了;
[root@localhost]# grpconv
3)创建用户的主目录,并把用户启动文件也复制过去;
在/home下创建jekay用户的主目录,名称与用户名相同,另外我们还需要把/etc/skel 目录下的.*隐藏文件复制过去;
[root@localhost]# cp -R /etc/skel/ /home/jekay
[root@localhost]# ls -la /home/jekay
4)改变新增用户家目录的属主和权限;
我们发现新增用户的主目录的属主目前是root ,并且主目录下的隐藏文件也是root权限;
[root@localhost]# chown -R jekay.jekay /home/jekay
[root@localhost]# chmod 700 /home/jekay/
5)设置新增用户的密码;
passwd 的用法:
passwd 用户名
6)测试添增用户是否成功