Linux中的用户和组

用户和组的基本概念

Linux操作系统是一个多用户操作系统,用户在使用的时候必须向系统申请一个帐号,以这个帐号的身份进入系统使用操作系统分配的资源。每个用户都有一个用户名、UID、所属组、密码(非必须)、登录终端等。每个用户都有一个用户组,系统可以对一个用户组中的所有用户进行集中管理。每个组也有自己的名称、组唯一编号GID 。系统通过UID和GID来区分不同的用户和组,相同的UID和 GID会被系统认为是同一个用户。一般来说,GID和UID是可以不相同的,但绝大多数都会让它们保持一致,组分为主组和附加组两种,在Linux下用户必须拥有一个主组,但可以同时属于多个附加组。
通常我们把Linux下的用户分为以下三类
1. 超级用户
超级用户就是我们通常说的管理员一般为root用户,超级用户拥有控制Linux的所有权限,超级用户的UID是0,意思是只要我们把一个用户的UID修改为0他就拥有了系统的所有权限成为超级用户。
2. 系统用户
系统用户是指系统自动创建的用户,在RHEL6系列默认UID范围 为1-500,RHEL7系类变更为1-1000。系统用户通常不可登录,由某些应用或服务在安装到时候创建。
3. 普通用户
普通用户的权限受限,只可以执行特定目录下“/bin、/usr/bin、/usr/local/bin”和自身home目录下的命令,其UID从系统用户之后开始。

常用用户管理命令和相关文件

useradd 用户创建

    useradd [option] username
        -u 创建时指定用户UID,配合 -o 选项不检查用户UID的唯一性
        -g 指定新用户的主组,主组必须已经存在,可以使用组名或GID
        -G 指定新用户附属组,多个组以逗号分割
        -N 新建用户时不再创建同名主组,使用GID为100的组作为主组
        -c 添加描述信息
        -d 指定新用户homedir
        -r 创建系统用户,默认不会创建homedir,可以配合 -m选项创建
        -s 指定新用户登录shell
        -M 不创建homedir
        -D 查看配置文件中的默认值(/etc/default/useradd)
        -D -s 修改配置文件中的默认登陆shell

示例:

[root@VMCent6 ~]# useradd -u 1024 -g root -G bin,adm -c 'this is a new user' -d /home/test -s /sbin/nologin newuser 

\\创建名为newuser的新用户,UID 为1024,主组为root,附加组为bin,adm,用户描述为this is a new user ,homedir为/home/test,并且指定不可登录。

[root@VMCent6 ~]# useradd -D \\在不指定参数的情况下,新建用户读取此文件默认设定(/etc/default/useradd)
GROUP=100               \\使用-N时不创建同名主组,将此用户组作为新用户主组
HOME=/home              \\新建用户默认homedir
INACTIVE=-1             \\是否启用账户过期,-1表示禁用
EXPIRE=                 \\帐号过期时间,空表示不启用
SHELL=/bin/bash         \\默认登录shell
SKEL=/etc/skel          \\默认框架目录
CREATE_MAIL_SPOOL=yes   \\是否创建mail目录

[root@VMCent6 ~]# useradd -D -s /sbin/nologin   \\设定新用户默认登陆shell为nologin(命令会修改上述文件配置)
[root@VMCent6 ~]# useradd -D
..
SHELL=/sbin/nologin
..
[root@VMCent6 ~]# cat /etc/default/useradd
..
SHELL=/sbin/nologin
..

userdel 删除指定用户

    userdel [option] username
    -r  \\删除用户的同时递归删除用户homedir
    -f  \\强制删除用户即使正在登录,会同时删除用户homedir

usermod 修改用户信息

usermod [options] username
    -l:修改用户名,仅仅只是改用户名,其他的一切都不会改动(uid、家目录等)
    -u:给用户指定新的UID,UID必须唯一,除非同时使用了-o选项
    -g:修改用户主组,可以是以gid或组名。
    -m:移动homedir内容到新的位置,须配合-d选项一起使用
    -d:修改用户的homedir位置,若不存在则自动创建。默认旧的homedir不
        会删除如果同时指定了-m选项,会将旧homedir中内容移动到新的目录
        中,如果当前用户homedir不存在或没有,则不会创建新的homedir
    -o:允许用户使用非唯一的UID
    -s:修改用的shell,留空则选择默认shell
    -c:修改用户注释信息
    -a:将用户以追加的方式加入到辅助组中,只能和-G选项一起使用
    -G:将用户加入指定的附加组中,若此处未列出某组,而此前该用户又是
        该组成员,则会删除该组中此成员
    -L:锁定用户的密码,将在/etc/shadow的密码列加上前缀"!"或"!!"
    -U:解锁用户的密码,解锁的方式是移除shadow文件密码列的前缀"!"或"!!"
    -e:帐户过期时间,时间格式为"YYYY-MM-DD",如果给一个空的参数,
        则立即禁用该帐户
    -f:密码过期后多少天,帐户才过期被禁用,0表示密码过期帐户立即
        禁用,-1表示禁用该功能

passwd 修改密码

passwd命令用来修改用户密码

passwd [option] username
    -d  \\删除指定用户密码
    -l  \\锁定用户-u解锁用户
    -e  \\强制用户下次登录必须修改密码
    -n  \\指定密码最短使用期
    -x  \\最长使用期
    -w  \\提前几天警告
    --stdin \\从标准输入接收密码
    echo magedu | passwd --stdin nginx  \\将ngix密码改为magedu

chpasswd 批量修改密码

cat file | chpasswd     \\从file文件批量修改密码
chpasswd < file         \\file文件格式为每行对应一个用户及密码,以':'分割

newusers 批量创建用户

newusers file       \\从file批量创建用户,file格式同/etc/passwd格式

chage 密码策略

修改指定用户密码策略

chage [option] username
    -l  \\显示指定用户密码策略
    -E  \\指定账户过期时间,0为立即过期
    -M  \\密码最大生存期,-m最小生存期
    -W  \\警告天数

相关配置文件

/etc/passwd

/etc/passwd文件中存放系统用户信息,格式如下(截取部分内容):

[root@VMCent6 ~]# cat /etc/passwd
...
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
...

/etc/passwd 以”:”为分隔符分成七列,每部分含义如下

  1. 用户名
  2. 旧版此位置存放用户密码,新版本只有一个占位符
  3. UID
  4. GID,主组
  5. 描述信息 \\chfn username 可用此命令修改用户描述信息
  6. homedir
  7. 登录shell \\chsh -s /bin/bash username修改指定用户登录shell,–list查看可用shell

!!修改此文件可能造成严重的后果,不建议直接修改此文件

/etc/shadow

/etc/shadow存放用户的登录密码等信息,由于其数据特殊性,普通用户并不能访问此文件。同样不建议直接进行修改。格式如下(截取部分内容):

[root@VMCent6 ~]# cat /etc/shadow

root:$6$CcFPE5IR8rRV4jXV$sxD7yVJoNLFWxQiaCO/193dr0L83ZbVAmckEovf
xy5bAwN40k2oYyTSZHon4IjN4BaUhxL/7BnUkni5RwGJ0J.:17621:0:99999:7:::
bin:*:17246:0:99999:7:::
daemon:*:17246:0:99999:7:::
adm:*:17246:0:99999:7:::
lp:*:17246:0:99999:7:::
sync:*:17246:0:99999:7:::
shutdown:*:17246:0:99999:7:::
halt:*:17246:0:99999:7:::
...

具体含义如下,依旧是‘:’作为分隔符:

  1. 用户名
  2. 密码 \\前两位代表加密算法,$6代表SHA512
    \\第二个$和第三个$之间的是加密密码时添加的随机字符,也叫做盐
    \\加密后的密码,使用usermod锁定用户会在密码字段最前方添加!!
  3. 密码更改时间,从1970-1-1开始至当前天数。
  4. 最短口令有效期 \\最短修改密码间隔,为0表示不设置此选项,以天为单位。
  5. 最长口令有效期 \\口令最长可以使用多久
  6. 口令过期前几天提醒修改
  7. 宽限期 \\宽限期内可以使用原密码登录
  8. 账户过期时间 \\通常用于创建临时账户
  9. 保留字段

/etc/login.defs

/etc/login.defs包含系统默认密码策略以及一些其他默认设定

PASS_MAX_DAYS   99999   \\默认最长口令有效期,/etc/shadow中第5个字段
PASS_MIN_DAYS   0       \\最短口令有效期,/etc/shadow中第4个字段
PASS_MIN_LEN    5       \\密码最短长度
PASS_WARN_AGE   7       \\提醒天数
...
UID_MIN           500   \\普通用户UID起始值
UID_MAX         60000   \\最大值,-u指定的值不受此影响
...
GID_MIN           500   \\groupadd新建组的起始GID
GID_MAX         60000   \\最大值
...
CREATE_HOME     yes     \\新用户是否默认创建homedir
...
ENCRYPT_METHOD SHA512   \\默认加密算法
...
UMASK           077     \\新建用户UMASK值,权限相关
...
USERGROUPS_ENAB yes     \\新新建用户是否同时创建同名组

/etc/skel

/etc/skel是一个目录,包含新用户创建homedir文件夹时的文件

/etc/default/useradd

参照上文useradd命令部分

常用组命令和相关文件

group相关命令

groupadd用来创建新组
groupadd [option] groupname
    -g      \\指定GID,必须唯一,除非使用-o
    -r      \\创建系统组

groupmod用来修改组的属性
groupmod [option] grpname
    -n ngrpname     \\指定新组名
    -g GID          \\新GID
gropumems组成员管理
groupmems [option] [action]
    -a      \\指定用户加入组
    -d      \\从组中删除指定用户
    -p      \\清除所有组员
    -l      \\显示组成员
    -g      \\指定要修改的组仅root可用

组相关文件

和user相同,分别在/etc/group和/etc/gshadow文件保存着组信息和组密码信息
/etc/group格式如下
组名:组密码(占位符,加密后密码在个shadow文件):GID:以当前组为附加组的组成员
/etc/gshadow格式如下
组名:加密后组密码:组管理员:以当前组为附加组的组成员(以逗号分割)

参考内容:http://www.cnblogs.com/f-ck-need-u/p/7011669.html
更多资料:https://www.linuxidc.com/Linux/2016-10/136251.htm

上一篇
下一篇