Linux 用户管理工具介绍

Linux 用户管理工具介绍

Linux 用户管理工具介绍
本文主要介绍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...] <accountName>
  -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)测试添增用户是否成功;
好全,适合新人学习
谢谢了,我正在找者相关的内容