• [用户管理]——用户与组管理的文件、命令


    Linux登录主机取得shel的流程?

    image


    用户和用户组相关的4个重要文件

    (1) /etc/passwd 存放用户信息的文件
    mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
    avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
    --->以【:】为分隔符,共7个字段
    字段1:用户名
    字段2:密码占位符
    字段3:用户帐号的UID号
    字段4:用户所属组的GID号
    字段5:用户描述信息
    字段6:用户的宿主目录
    字段7:用户登录后用到的shell(/sbin/nologin表示用户以任何方式都不可登录)

     
    (2) /etc/shadow 存放用户密码信息的文件
    root:$6$XHwHKv5C$1.Q2A9E71ps5SaBE1BSy85/XbMp7CJpb3R7kFMSSkCx6l7zbYKyPH4yZjEsS3yCcbcY4ih5Ykx3GStTtKQJV81:15112:0:99999:7:::
    adm:*:15422:0:99999:7:::
    --->以【:】为分隔符,共9个字段
    字段1:用户名
    字段2:已加密的密码字段【*:表示加密后的密码;!!:表示用户被锁定】
    字段3:最近密码改动的日期
    字段4:密码不可被改动的天数(与第3个字段相比)【默认0:表示随时可以改】
    字段5:密码需要更改的天数(与第3个字段相比)【默认99999:表示永不过期】
    字段6:需要更改密码期限前几天提醒【默认为7】
    字段7:密码过期后的宽限日期
    字段8:帐号失效日期【默认为空】
    字段9:保留字段【未使用】

    (3) /etc/group 存放用户组信息的文件
    root:x:0:
    bin:x:1:bin,daemon
    --->以【:】为分隔符,共4个字段
    字段1:组名
    字段2:密码占位符
    字段3:GID
    字段4:组成员列表(用“,”隔开)

    (4) /etc/gshadow 存放用户组密码信息的文件

    root:::
    bin:::bin,daemon
    utmp:!::
    ——>以【:】为分隔符分为4个字段
    字段1:用户组名
    字段2:密码列(开头为!表示无合法密码,所以无用户组管理员)
    字段3:用户组管理员帐号
    字段4:属于该用户组的用户


    有效用户组与初始用户组

    创建一个用户test(同时会新建一个同名的用户组)
    # useradd test
    将test用户加入到用户组users中
    # usermod -G users test
    查看test用户在三个文件中的体现
    # grep test /etc/passwd /etc/group /etc/gshadow
    /etc/passwd:test:x:502:502::/home/test:/bin/bash --->所属GID502
    /etc/group:users:x:100:test
    /etc/group:test:x:502:  --->502是用户组test,即为test用户的初始用户组,是用户一登录就会取得的,所以第4字段就不需要写了
    /etc/gshadow:users:::test
    /etc/gshadow:test:!::
    
    切换到test用户
    # su - test
    
    使用groups命令查看test用户支持的用户组 $
    groups test users ------>第一个输出的用户组即为有效用户组
    所以此时新建的文件其所属用户组为test(有效用户组) $
    touch file $ ll file -rw-rw-r--. 1 test test 0 8月 2 03:49 file 使用newgrp命令切换有效用户组 $ newgrp users
    $
    groups users test
    $
    touch file2 $ ll file2 -rw-r--r--. 1 test users 0 8月 2 03:50 file2

    用户管理相关命令

    useradd创建用户
    -c “描述信息”
    -u 指定UID
    -d 指定宿主目录【实际上如果这个目录没有修改过属主属组的话,并没有什么卵用】
    -g 指定主要组(组名/GID)
    -G 指定附属组(组名/GID)
    -s 指定用户登录shell
    -e 指定密码失效时间(格式为MM/DD/YY)
    -M 指定默认不创建宿主目录
    -r 添加系统账户。因为这样这种方式不会自动创建家目录,所以常配合 -m选项支持创建家目录
    useradd -r user10 -m

    passwd 设置密码
    -d 清空用户的密码,使之无需密码即可登录
    -l 锁定用户帐号(锁定后/etc/shadow密码字段前会多出!!字样)
    -S 查看用户帐号的状态(是否被锁定)
    -u 解锁用户帐号

    usermod 用户相关修改
    -l 更改用户帐号的登录名称
    -L 锁定用户账户
    -U 解锁用户账户
    -u、-d、-e、-g、-G、-s 这些选项与useradd命令中的含义相同

    userdel删除用户
    userdel -r 表示连用户的宿主目录、账户信息、密码信息、同名组帐号、邮件记录等信息一并删除

    goupadd创建用户组
    groupadd [-g GID] 组名
    -r 创建系统用户组

    goupmod用户组相关修改
    -g 修改组id
    -n 修改组名(不建议修改)

    groupdel删除用户组
    groupdel 组名

    gpasswd 添加/删除组成员
    gpasswd  -a  用户名 组名             //将用户add添加到该组
    Adding user root to group emei
    gpasswd  -d  用户名 组名            //将用户delete移除该组
    Removing user root from group emei
    gpasswd  -M  root,zwj emei        //把多个用户加入到组

    chage命令
    选项参数:
    -l :列出该账号的详细密码参数;
    -d :后面接日期,修改 shadow 第三字段(最近一次更改密码的日期),格式YYYY-MM-DD
    -E :后面接日期,修改 shadow 第八字段(账号失效日),格式 YYYY-MM-DD
    -I :后面接天数,修改 shadow 第七字段(密码失效日期)
    -m :后面接天数,修改 shadow 第四字段(密码最短保留天数)
    -M :后面接天数,修改 shadow 第五字段(密码多久需要进行变更)
    -W :后面接天数,修改 shadow 第六字段(密码过期前警告日期)

    创建一用户test
    # useradd test
    
    为test用户创建一密码
    # echo "123456" |passwd --stdin test
    更改用户 test 的密码 。
    passwd: 所有的身份验证令牌已经成功更新。
    
    修改该用户的创建时间
    # chage -d 0 test
    
    这时候我们发现用户test第一次登录会被强制要求该密码(很有趣和实用的命令)
    $ su - test
    密码:
    您需要立即更改密码(root 强制)
    为 test 更改 STRESS 密码。
    (当前)UNIX 密码:
    新的 密码:

    用户管理的3个相关文件

    (1) /etc/default/useradd   
    GROUP=100
    HOME=/home        //默认的家目录位置
    INACTIVE=-1         //密码失效日
    EXPIRE=                //帐号失效日
    SHELL=/bin/bash  //默认的shell
    SKEL=/etc/skel      //用户家目录的内容数据的参考目录
    CREATE_MAIL_SPOOL=yes   //是否主动帮用户创建邮件信箱

     
    (2) /etc/skel/*
    宿主目录的模板目录(新建用户时会默认自动拷贝到宿主目录下的)
    其中三个重要的必须文件
    .bash_profile:用户每次登录时执行这个文件的内容
    .bashrc:用户每次登录shell时执行这个文件的内容
    .bash_logout:用户每次退出登录时执行这个文件的内容
    --->由于其特性,可以添加一些命令或设置(如alias)实现用户登录时自动运行,/root/.bashrc就可以很好的运用
    --->缺少这三个文件用户也可以验证,但无法登录,su切换时出现-bash-4.1#

    (3) /etc/login.defs
    这个文件记录的是用户创建时所遵循的一些设置与规则
    MAIL_DIR /var/spool/mail      //创建用户时在此目录中新建用户的mail文件
    PASS_MAX_DAYS 99999   //密码需要被更改的天数(/etc/shadow文件中的第5字段)
    PASS_MIN_DAYS 0             //密码不可被改动的天数(/etc/shadow文件中的第4字段)
    PASS_MIN_LEN 5               //密码最小长度 ,已被pam模块替代,失去效用
    [在root下给用户设置密码并不受这个约束]
    [普通用户若要给自己修改密码,其密码长度要符合/etc/login.defs内部的约束,而且要符合复杂性要求(小写字母,大写字母,数字,特殊字符必须要包含三类)]
    PASS_WARN_AGE 7
    UID_MIN 500                   //UID的最小值
    UID_MAX 60000            //UID的最大值
    GID_MIN 500                  //GID的最小值
    GID_MAX 60000            //GID的最大值
    CREATE_HOME yes    //useradd创建用户时是否默认创建宿主目录
    UMASK 077                   //宿主目录默认的权限为700
    USERGROUPS_ENAB yes          //新建用户时如果没有指定组,默认新建一个同名的组
    ENCRYPT_METHOD SHA512    //密码加密的方式


    通过一个手工创建用户的例子理解“用户创建流程”               

    手工添加用户qtds,该用户的uid=510,gid=510,GID=0,home=/qtds,shell=/bin/sh,到期时间为:2015-12-12,密码:aixcom,并能实现登录。

    1. 根据要求,先生成到期时间值和密码加密值 

    # echo $(($(date --date="2015/12/12" +%s)/86400+1))
    16782
    
    # grub-md5-crypt 
    Password: 
    Retype password: 
    $1$fZseL$wzg7vzg7jO8XLRmo18rdB.

    2. "写"相关文件

    # echo 'qtds:x:510:510::/qtds:/bin/sh' >> /etc/passwd
    # tail -n 1 /etc/passwd
    qtds:x:510:510::/qtds:/bin/sh
    
    # echo 'qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7:::' >>/etc/shadow
    # tail -n 1 /etc/shadow
    qtds:$1$fZseL$wzg7vzg7jO8XLRmo18rdB:16782:0:99999:7:::
    
    # echo 'qtds:x:510:' >> /etc/group
    # tail -n 1 /etc/group
    qtds:x:510:
    

    3. 因为qtds这个用户的附属组为GID=0(即root组),所以在/etc/group这个文件中root那行字段4的组成员列表中添加qtds

    # head -n 1 /etc/group
    root:x:0:
    # sed  '1,1c root:x:0:qtds'   -i   /etc/group   -i选项保存
    # head -n 1 /etc/group
    root:x:0:qtds
    

    4. 新建家目录,修改属主属组和权限,拷贝必须的三个文件

    # mkdir /qtds
    # ll -d /qtds/
    drwxr-xr-x. 2 root root 4096 7月  24 09:40 /qtds/
    # chown qtds:qtds  /qtds/
    # chmod 700   /qtds
    # ll -d /qtds/
    drwx------. 2 qtds qtds 4096 7月  24 09:40 /qtds/
    # cp /etc/skel/.bash*  /qtds/
    # ls -a /qtds/
    .  ..  .bash_logout  .bash_profile  .bashrc
    
  • 相关阅读:
    Linux客户/服务器程序设计范式——阿帕奇服务器(多进程)
    Linux客户/服务器程序设计范式2——并发服务器(进程池)
    封装readn
    C++学习之路: 函数适配器
    C++学习之路: 智能指针入门
    C++学习之路: 单例模板
    C++学习之路: 左值&右值 的讨论 和 ”move“ 值传递方式
    C++学习之路: 特殊操作符->的重载
    C++学习之路: 模板函数
    C++学习之路: 时间戳 封装成类
  • 原文地址:https://www.cnblogs.com/snsdzjlz320/p/5727050.html
Copyright © 2020-2023  润新知