一、用户(user)和用户组(group)概念

1、用户(user)的概念

Linux 是典型的多用户操作系统,我们可以建若干用户(user),用于系统服务的运行和权限管理,不同的用户登陆系统,按照设定的权限去操作系统,提高了安全性。在Linux系统中有一些用户是用来完成特定任务的,比如nobody和ftp 等;有的是为了权限安全,比如限制root直接登陆系统,创建一个sshusr用户,登陆sshusr后,再su到root下。可以通过查看/etc/passwd了解Linux系统有哪些帐号。

2、用户组(group)的概念

用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限。

3、用户和用户组的对应关系

一对一:某个用户可以是某个组的唯一成员; 多对一:多个用户可以是某个唯一的组的成员; 一对多:某个用户可以是多个用户组的成员,有附加组; 多对多:多个用户对应多个用户组,并且几个用户可以是归属相同的组。

二、用户(user)和用户组(group)相关的配置文件、命令或目录

1、与用户和用户组相关的配置文件;

1)与用户相关的配置文件; /etc/passwd 注:用户的配置文件; /etc/shadow 注:用户影子口令(密码)文件; 2)与用户组相关的配置文件; /etc/group 注:用户组配置文件; /etc/gshadow 注:用户组的影子口令文件; 2、管理用户和用户组的相关工具或命令; 1)管理用户的工具或命令; useradd :添加用户 adduser :添加用户 userdel :删除用户 passwd :为用户设置密码 usermod :修改用户命令,可以通过usermod 来修改登录名、用户的家目录等等; pwcov :同步用户从/etc/passwd 到/etc/shadow pwck :pwck是校验用户配置文件/etc/passwd 和/etc/shadow 文件内容是否合法或完整; pwunconv :是pwcov 的立逆向操作,是从/etc/shadow和 /etc/passwd 创建/etc/passwd ,然后会删除 /etc/shadow 文件; finger :查看用户信息工具 id :查看用户的UID、GID及所归属的用户组 chfn :更改用户信息工具 su :用户切换工具 sudo :sudo 是通过另一个用户来执行命令(execute a command as another user),su 是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo 能后面直接执行命令,比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现; visudo :visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的; sudoedit :和sudo 功能差不多;

2)管理用户组的工具或命令; groupadd :添加用户组; groupdel :删除用户组; groupmod :修改用户组信息 groups :显示用户所属的用户组 grpck :用于验证组文件的完整性 grpconv :通过/etc/group和/etc/gshadow 的文件内容来同步或创建/etc/gshadow ,如果/etc/gshadow 不存在则创建; grpunconv 注:通过/etc/group 和/etc/gshadow 文件内容来同步或创建/etc/group ,然后删除gshadow文件;

3、/etc/skel 目录

/etc/skel目录一般是存放用户启动文件的目录,这个目录是由root权限控制,当我们添加用户时,这个目录下的文件自动复制到新添加的用户的家目录下;/etc/skel 目录下的文件都是隐藏文件,也就是类似.file格式的;我们可通过修改、添加、删除/etc/skel目录下的文件,来为用户提供一个统一、标准的、默认的用户环境; [root@localhost beinan]# ls -la /etc/skel/ 总用量 92 drwxr-xr-x 3 root root 4096 8月 11 23:32 . drwxr-xr-x 115 root root 12288 10月 14 13:44 .. -rw-r--r-- 1 root root 24 5月 11 00:15 .bash_logout -rw-r--r-- 1 root root 191 5月 11 00:15 .bash_profile -rw-r--r-- 1 root root 124 5月 11 00:15 .bashrc -rw-r--r-- 1 root root 5619 2005-03-08 .canna -rw-r--r-- 1 root root 438 5月 18 15:23 .emacs -rw-r--r-- 1 root root 120 5月 23 05:18 .gtkrc drwxr-xr-x 3 root root 4096 8月 11 23:16 .kde -rw-r--r-- 1 root root 658 2005-01-17 .zshrc

/etc/skel 目录下的文件,一般是我们用useradd 和adduser 命令添加用户(user)时,系统自动复制到新添加用户(user)的家目录下;如果我们通过修改 /etc/passwd 来添加用户时,我们可以自己创建用户的家目录,然后把/etc/skel 下的文件复制到用户的家目录下,然后要用chown 来改变新用户家目录的属主;

4、/etc/login.defs 配置文件

/etc/login.defs 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限等等,这个文件是可以通过root来定义的;

比如Fedora 的 /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   5       注:密码最小过期天数;
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   注:是否创用户家目录,要求创建;

# The permission mask is initialized to this value. If not specified, 
# the permission mask will be initialized to 022.
UMASK           077


# Use SHA512 to encrypt password.
ENCRYPT_METHOD SHA512 

5、/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、创建一个用户组

命令格式: groupadd [选项] [用户组] 选项: -g :GID 指定新用户组的组标识号(GID)。 -o :一般与-g选项同时使用,表示新用户组的GID可以与系统已有用户组的GID相同。 例1:创建group1,GID会自动在系统已创建的基础上增加1 # groupadd group1 例2:创建一个新组group2,同时指定新组的组标识号是101。 #groupadd -g 101 group2

2、删除一个用户组

命令格式: groupdel [用户组] 例:此命令从系统中删除组group1。 #groupdel group1

3、修改用户组的属性

命令格式: groupmod [选项] [用户组] 选项: -g :GID 为用户组指定新的组标识号。 -o :与-g选项同时使用,用户组的新GID可以与系统已有用户组的GID相同。 -n :新用户组 将用户组的名字改为新名字 例:此命令将组group2的组标识号修改为102。 # groupmod -g 102 group2 例:此命令将组group2的标识号改为10000,组名修改为group3。 # groupmod –g 10000 -n group3 group2 4、用户切换用户组 如果一个用户同时属于多个用户组,那么用户可以在用户组之间切换,以便具有其他用户组的权限。用户可以在登录后,使用命令newgrp切换到其他用户组,这个命令的参数就是目的用户组。 例如: $ newgrp root 这条命令将当前用户切换到root用户组,前提条件是root用户组确实是该用户的主组或附加组。类似于用户账号的管理,用户组的管理也可以通过集成的系统管理工具来完成。

四、用户管理

(一),添加用户

1.命令 useradd或adduser命令用来建立用户帐号和创建用户的起始目录,使用权限是超级用户。 2.命令格式   useradd [-d home] [-s shell] [-c comment] [-m [-k template]] [-f inactive] [-e expire ] [-p passwd] [-r] name 3.主要参数   -c:加上备注文字,备注文字保存在passwd的备注栏中。   -d:指定用户登入时的主目录,替换系统默认值/home/<用户名>   -D:变更预设值。   -e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。   -f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.   -g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。   -G:指定用户所属的附加群组。   -m:自动建立用户的登入目录。   -M:不要自动建立用户的登入目录。   -n:取消建立以用户名称为名的群组。   -r:建立系统账号。   -s:指定用户登入后所使用的shell。默认值为/bin/bash。   -u:指定用户ID号。该值在系统中必须是唯一的。0~499默认是保留给系统用户账号使用的,所以该值必须大于499。 例:创建用户tom,没有登陆权限 # useradd -s /sbin/nologin tom

4.说明   useradd可用来建立用户账号,它和adduser命令是相同的。账号建好之后,再用passwd设定账号的密码。使用useradd命令所建立的账号,实际上是保存在/etc/passwd文本文件中。

(二)用户的删除

命令格式: userdel [用户名] #只是删除用户名,用户目录和邮件账户目录还在 userdel -r [用户名] #清除用户的家目录和邮件目录

(三)设置用户密码

root用户登陆时执行,如果是当前用户登陆,passwd回车后按提示设置密码即可。 1,命令格式: echo [密码] | passwd --stdin [用户名] 例如:新建用户test,密码test,另外添加usertest组

#useradd test 
#echo "test" | passwd --stdin test 
#groupadd usertest

2,用户的密码文件 用户修改的密码信息存在/etc/shadow中,

# sed -n '$p' /etc/shado`w`
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI.:17551:0:99999:7:0:17897:

--用户名 --密码 --从1970年1月1日起到上次修改密码所经过的天数 --密码再过几天可以被变更(0表示随时可以改变) --密码再过几天必须被变更(99999表示永不过期) --密码过期前几天提醒用户(默认为一周) --密码过期几天后帐号被禁用 --从1970年1月1日算起,多少天后账号失效

(四)修改用户属性 1.用usermod修改用户属性 语  法:usermod [参数选项] [用户帐号] 补充说明:usermod可用来修改用户帐号的各项设定。 选 项: -a|--append ##把用户追加到某些组中,仅与-G选项一起使用 -c|--comment ##修改/etc/passwd文件第五段comment -d|--home ##修改用户的家目录通常和-m选项一起使用 -e|--expiredate ##指定用户帐号禁用的日期,格式YY-MM-DD -f|--inactive ##用户密码过期多少天后采用就禁用该帐号,0表示密码一过期就禁用帐号,-1表示禁用此功能,默认值是-1 -g|--gid ##修改用户的gid,改组一定存在 -G|--groups ##把用户追加到某些组中,仅与-a选项一起使用 -l|--login ##修改用户的登录名称 -L|--lock ##锁定用户的密码 -m|--move-home ##修改用户的家目录通常和-d选项一起使用 -s|--shell ##修改用户的shell -u|--uid ##修改用户的uid,该uid必须唯一 -U|--unlock ##解锁用户的密码 2.示例 1).新建用户alex,密码alex,另外添加galex组

#useradd alex
#echo "alex" | passwd --stdin alex 
#groupadd galex 

2).把alex用户加入galex组 #usermod -aG galex alex #多个组之间用空格隔开

# id alex
uid=1005(alex) gid=1006(alex) 组=1006(alex),1007(galex)

3).修改alex用户的家目录为galex

# usermod -md /home/galex alex
# cat /etc/passwd|grep "alex"
alex:x:1005:1006::/home/galex:/bin/bash

4).修改用户名

# usermod -l nalex alex
# cat /etc/passwd|grep "alex"
nalex:x:1005:1006::/home/galex:/bin/bash

5).锁定nalex的密码

# sed -n '$p' /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::
#usermod -L nalex 
# sed -n '$p' /etc/shadow
nalex:!$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::

锁定后用户冒号后面会多一个感叹号“!” 6).解锁nalex的密码 #usermod -U nalex 去除用户后面的感叹号 7).修改用户的shell

#sed '$!d' /etc/passwd 
nalex:x:500:500::/home/usertest:/bin/bash 
#usermod -s /bin/sh nalex 
#sed -n '$p' /etc/passwd 
nalex:x:500:500::/home/galex:/bin/sh 

8)指定帐号过期日期

# sed -n '$p' /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:::
# usermod -e 2019-01-01 nalex
]# sed -n '$p' /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7::17897:

多了时间限制 9).指定用户帐号密码过期多少天后,禁用该帐号

# usermod -f 0 nalex
# sed -n '$p' /etc/shadow
nalex:$6$QCsCA/7/$jsBzKSSoEOFW/.TsFlkJi.nZndkZz3EZ2nOMtpjDk9UInBxY6g76HnuTMgl9GqC0E0WNe.oznUKANMYrZG2FI
.:17551:0:99999:7:0:17897: