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 的最大设置值;
 
Linux用户管理二
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  下的成员;我们在授权规则中以实例进行解说;
别名规则是每行算一个规则,如果一个别名规则一行容不下时,可以通过 \ 来续行;同一类型别名的定义,一次也可以定义几个别名,他们中间用 : 号分隔,
Linux用户管理三
/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 参数;他会删除用户的同时删除用户所有的文件和目录;如果用户目录下有重要的文件,在删除前请备份;
Linux用户管理四
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. 注:更改完成;  
Linux用户管理五
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 )测试添增用户是否成功;

你可能感兴趣的:(linux,职场,管理,用户,休闲)