美文网首页
linux 用户与分组

linux 用户与分组

作者: 愤愤的有痣青年 | 来源:发表于2019-05-08 10:27 被阅读0次

    以下内容参考于Linux系统的用户和用户组管理

    用户

    linux中每个用户都有一个uid和gid,每个用户都有一个唯一的uid,其中root用户的uid和gid都是0.用户分为三类,如下所示

    超级用户root(0)
    程序用户(1~499)
    普通用户(500~65535)
    
    • 超级用户:
    默认是root用户,其UID和GID均为0。在每台unix/linux操作系统中都是唯一且真实存在的,通过它可以登录系统,可以操作系统中任何文件和命令,
    拥有最高的管理权限。在生产环境,一般禁止root账号远程登录SSH连接服务器,以加强系统安全。
    
    • 程序用户:
    与真实用户区分开来,这类用户的最大特点是安装系统后(或某些程序安装时)默认就会存在的,且默认情况不能登录系统,它们是系统正常运行必不可少的,
    他们的存在主要是方便系统管理,满足相应的系统进程都文件属主的要求。例如系统默认的bin、adm、nodoby、mail、nginx用户等。由于服务器角色的不同,
    有部分用不到的系统服务被禁止开机执行,因此,在做系统安全优化时,被禁止开机启动了的服务对应的虚拟用户也是可以处理掉的(删除或注释)。
    
    • 普通用户:
     这类用户一般是由具备系统管理员root的权限的运维人员添加的,程序开发者一般拥有的都是此类用户.
    

    分组

    简单的说,linux系统中的用户组(group)就是具有相同特性的用户(user)集合;
    有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件或目录,如果不用用户组,这种需求在授权时就很难实现。如果使用用户组就方便多了,只需要把授权的用户都加入到同一个用户组里,然后通过修改该文件或目录的对应的用户组的权限,让用户组具有符合需求的操作权限,这样用户组下的所有用户对该文件或目录就会具有相同的权限,这就是用户组的用途。
    将用户分组是linux系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,在很大程度上简化了运维管理工作。

    • 用户和组之间可以有如下关系
    一对一:即一个用户可以存在一个组中,也可以是组中的唯一成员。比如,root。
    一对多:即一个用户可以存在多个组中,这个用户就具有这些组。
    多对一:即多个用户可以存在一个组中,这些用户这些组的共同权限。
    多对多:即多用户可以存在于多个组中。并且几个用户可以归属相同的组;其实多对多的关系是前面三条的扩展。
    

    用户及用户组配置文件介绍

    Linux系统中下的账户文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow四个文件

    与用户相关的配置文件

    /etc/passwd:  #用户的配置文件, 保存用户账户的基本信息
    /etc/shadow  #用户影子口令文件
    

    /etc/passwd 文件

    /etc/passwd文件中每行定义一个用户账号,有多少行就表示多少个账号,在一行中可以清晰的看出,各内容之间又通过”:”号划分了7个字段,这7个字段分别定义了账号的不同属性,passwd文件实际内容如下:

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    
    • 每行以:分割可以得到7个字段,其含义如下:
    字段1:帐号名,这是用户登陆时使用的账户名称,在系统中是唯一的,不能重名
    字段2:密码占位符x;早期的unix系统中,该字段是存放账户和密码的,由于安全原因,后来把这个密码字段内容移到/etc/shadow中了。
          这里可以看到一个字母x,表示该用户的密码是/etc/shadow文件中保护的。
    字段3:UID;范围是0-65535
    字段4:GID;范围是0-65535;当添加用户时,默认情况下会同时建立一个与用户同名且UID和GID相同的组。
    字段5:用户说明;这个字段是对这个账户的说明
    字段6:宿主目录;用户登陆后首先进入的目录,一般与"/home/用户名"这样的目录
    字段7:登录Shell   当前用户登陆后所使用的shell,在centos/rhel系统中,默认的shell是bash;如果不希望用户登陆系统,可以通过usermod 或者手动修改passwd设置,将该字段设置为/sbin/nologin 即可。大多数内置系统账户都是/sbin/nologin,这表示禁止登陆系统。这是出于安全考虑的。
    

    /etc/shadow 文件

    由于passwd文件必须要被所有的用户读,所以会带来安全隐患。而shadow文件就是为了解决这个安全隐患而增加的。其文件权限为----------,即所有用户不可读写执行,其内容为

    root:$6$jmM2rFzPCFbmqBkf$oz3AUooR3qaV5uXU67HcXlYiE3hNf0sSsunk1eBTDPrGUOM1xYCyesGoj.ZLTIzdiXEdrnnqNyC5g8SsRnxQm.:16338:0:99999:7:::
    bin:*:15615:0:99999:7:::
    daemon:*:15615:0:99999:7:::
    adm:*:15615:0:99999:7:::
    lp:*:15615:0:99999:7:::
    
    • 其中以:为分隔符将每行数据分为9个字段,每个字段含义如下
        字段1:帐号名称
        字段2:加密的密码
        字段3:最近更改密码的时间;从1970/1/1到上次修改密码的天数
        字段4:禁止修改密码的天数;从1970/1/1开始,多少天之内不能修改密码,默认值为0
        字段5:用户必须更改口令的天数;密码的最长有效天数,默认值为99999
        字段6:警告更改密码的期限;密码过期之前警告天数,默认值为7;在用户密码过期前多少天提醒用户更改密码
        字段7:不活动时间;密码过期之后账户宽限时间 3+5;在用户密码过期之后到禁用账户的天数
        字段8:帐号失效时间,默认值为空;从1970/1/1日起,到用户被禁用的天数
        字段9:保留字段(未使用),标志
    
    密码过期:一旦超过密码过期日期,用户成功登陆,Linux会强迫用户设置一个新密码,设置完成后才开启Shell程序
    账户过期:若超过账户过期日期,Linux会禁止用户登陆系统,即使输入正确密码,也无法登陆
    

    用户组配置文件

    /etc/group  #用户组配置文件
    /etc/gshadow  #用户组的影子文件
    

    /etc/group 文件

    其内容格式为

    root:x:0:
    bin:x:1:bin,daemon
    
    • 每个字段含义如下
        字段1:组账户名称
        字段2:密码占位符x;通常不需要设置该密码,由于安全原因,该密码被记录在/etc/gshadow中,因此显示为'x'。这类似/etc/shadow
        字段3:组账户GID号,用户组ID
        字段4:本组的成员用户列表;加入这个组的所有用户账号
    

    /etc/gshadow 文件

    • 文件内容格式如下
    root:::
    bin:::bin,daemon
    daemon:::bin,daemon
    
    • 每个字段含义如下
    字段1:组账号的名称
    字段2:加密后的密码字符串,这个字段可以空的或者!;如果是空的或有!,表示没有密码
    字段3:本组的管理员列表;这个字段也可为空;如果有多个用户组管理员,用,号分隔
    字段4:本组的成员列表;加入这个组的所有用户账户;列表中多个用户通过","分隔
    

    账号管理配置文件

    /etc/skel目录

    /etc/skel目录是用来存放新用户配置文件的目录,当我们添加新用户时,这个目录下的所有文件都会自动被复制到新添加的用户的家目录下;默认情况下,/etc/skel目录下的所有文件都是隐藏文件(以.点开头);通过修改、添加、删除/etc/skel目录下的文件,我们可为新创建的用户提供统一、标准的、初始化用户环境。

    /etc/login.defs配置文件

    /etc/login.defs文件是用来定义创建用户时需要的一些用户的配置文件。如创建用户时,是否需要家目录,UID和GID的范围,用户及密码的有效期限等等。

    • login.defs配置文件主要参数如下
    MAIL_DIR        /var/spool/mail  #创建用户时,要在目录/var/spool/mail中创建一个用户mail文件;
    PASS_MAX_DAYS   99999   #一个密码最长可以使用的天数
    PASS_MIN_DAYS   0    #更改密码的最小天数
    PASS_MIN_LEN    5    #密码的最小长度;
    PASS_WARN_AGE   7    #密码失效提前多少天开始警告
    UID_MIN                   500   #最小UID为500,也就是说添加用户时,UID是从500开始的;
    UID_MAX                 60000   #最大UID为60000;
    GID_MIN                   500   #GID依然是从500开始;同上面用户的情况;
    GID_MAX                 60000
    CREATE_HOME     yes   #是否创建用户家目录,默认要求创建;可用-m参数来控制;
    USERGROUPS_ENAB yes     #删除用户同时删除用户组
    MD5_CRYPT_ENAB yes     #MD5密码加密
    

    /etc/default/useradd文件

    /etc/default/useradd文件是在使用useradd添加用户时需要调用的一个默认的配置文件,可以使用useradd -D参数,这样的命令格式来修改文件里面的内容,当然也可以直接编辑修改。我们先来看看它的内容

    GROUP=100
    HOME=/home   #把用户的家目录建在/home中
    INACTIVE=-1  #是否启动账号过期停权,-1表示不启用
    EXPIRE=   #账号终止日期,不设置表示不启用
    SHELL=/bin/bash   #新用户默认所用的shell类型
    SKEL=/etc/skel  #配置新用户家目录的默认文件存放路径。前文提到的/etc/skell,就是配在这里生效的,即当我们用useradd添加时,用户家目录的文件,都是从这里配置的目录中复制过去的。
    CREATE_MAIL_SPOOL=yes  #创建mail文件
    

    用户管理

    • 添加用户
    useradd [-mMnr] [-c <备注>] [-d <登入目录>] [-e <有效期限>] [-f <缓冲天数>] [-g <群组>] [-G <群组>] [-s <shell>] [-u <uid>] [用户帐号]
    
    -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
    -d<登入目录>  指定用户登入时的启始目录。
    -D  变更预设值.
    -e<有效期限>  指定帐号的有效期限。
    -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
    -g<群组>  指定用户所属的群组。
    -G<群组>  指定用户所属的附加群组。
    -m  自动建立用户的登入目录。
    -M  不要自动建立用户的登入目录。
    -n  取消建立以用户名称为名的群组.
    -r  建立系统帐号。
    -s<shell>   指定用户登入后所使用的shell。
    -u<uid>  指定用户ID。
    
    示例:
     useradd panso -m -s /bin/bash -g TestGroup
    
    • 密码管理
    passwd [-k] [-l] [-u [-f]] [-d] [-S] [username]
    
    -c<备注>  加上备注文字。备注文字会保存在passwd的备注栏位中。
    -d<登入目录>  指定用户登入时的启始目录。
    -D  变更预设值.
    -e<有效期限>  指定帐号的有效期限。
    -f<缓冲天数>  指定在密码过期后多少天即关闭该帐号。
    -g<群组>  指定用户所属的群组。
    -G<群组>  指定用户所属的附加群组。
    -m  自动建立用户的登入目录。
    -M  不要自动建立用户的登入目录。
    -n  取消建立以用户名称为名的群组.
    -r  建立系统帐号。
    -s<shell>   指定用户登入后所使用的shell。
    -u<uid>  指定用户ID。
    
    示例(修改密码):
    passwd panso
    
    • 修改用户信息
    usermod [-LU][-c <备注>][-d <登入目录>][-e <有效期限>][-f <缓冲天数>][-g <群组>][-G <群组>][-l <帐号名称>][-s <shell>][-u <uid>][用户帐号]
    
    -c<备注>  修改用户帐号的备注文字。
    -d登入目录>  修改用户登入时的目录。
    -e<有效期限>  修改帐号的有效期限。
    -f<缓冲天数>  修改在密码过期后多少天即关闭该帐号。
    -g<群组>  修改用户所属的群组。
    -G<群组>  修改用户所属的附加群组。
    -l<帐号名称>  修改用户帐号名称。
    -L  锁定用户密码,使密码无效。
    -s<shell>  修改用户登入后所使用的shell。
    -u<uid>  修改用户ID。
    -U  解除密码锁定。
    
    示例(添加用户到分组中):
    usermod panso -G TestGroup
    
    • 修改用户密码有效期
    chage [选项] 用户名
    
     -d:将最近一次密码设置时间设置为"最近时间"
     -E:指定账号过期时间,YYYY-MM-DD
     -I:指定当密码失效后多少天锁定账号;
     -l:列出密码有效期信息
     -m:指定密码的最小天数
     -M:指定密码的最大天数
     -W:将过期警告天数设置为"警告天数"
    
    示例:
    chage -m 1 panso
    
    • 删除用户
    userdel    panso
    
    • 禁止口令登录

    vim /etc/ssh/sshd_config
    将PasswordAuthentication yes改为PasswordAuthentication no

    • 配置秘钥登录
    # 生成秘钥,在任意一台服务器上
    ssh-keygen -t rsa
    # 一路回车,生成完成后
    ls ~/.ssh # id_rsa  id_rsa.pub
    
    # 在用户目录下创建.ssh文件夹和authorized_keys文件,若是在修改其它用户,则最后需要给.ssh文件赋予该用户权限
    mkdir ~/.ssh
    touch  ~/.ssh/authorized_keys
    # 将id_rsa  文件内容复制在该文件内
    chmod 600 .ssh/authorized_keys
    
    • 修改其它用户对文件的权限
    chown [-cfhvR] [--help] [--version] user[:group] file...
    
    user : 新的文件拥有者的使用者 ID
    group : 新的文件拥有者的使用者组(group)
    -c : 显示更改的部分的信息
    -f : 忽略错误信息
    -h :修复符号链接
    -v : 显示详细的处理信息
    -R : 处理指定目录以及其子目录下的所有文件
    --help : 显示辅助说明
    --version : 显示版本
    
    示例:
    sudo chown -R panso:TestGroup  .ssh
    

    相关文章

      网友评论

          本文标题:linux 用户与分组

          本文链接:https://www.haomeiwen.com/subject/kyepoqtx.html