zoukankan      html  css  js  c++  java
  • Linux用户与组管理、权限管理、管理命令


    用户管理

    配置文件

    字符段配置文件/etc/shadow/etc/passwd/etc/group
    第一个字段 登录名 用户名 组名
    第二个字段 加密后的密码 密码占位符 组密码
    第三个字段 最近一次更改密码的日期 UID GID
    第四个字段 密码的最小使用期限 GID 以当前组为附加组的用户列表(分隔符为逗号)
    第五个字段 密码的最大使用期限 用户的描述信息  
    第六个字段 密码警告时间段 用户家目录  
    第七个字段 密码禁用期 用户的登录shell  
    第八个字段 帐号的过期日期    
    第九个字段 保留字段    

    例:

    jay   :     x    :1000:1000:   jay   : /home/jay :/bin/bash
    用户名  密码占位符  UID  GID  注释信息   用户家目录  执行shell
    
    • 每个用户都有一个ID,就像是我们的身份证号码,是唯一的
    • root用户的UID、GID都是0
    • 用户分为
      • 系统用户:用户ID在1-999
      • 登录用户:用户ID在1000-60000

    创建用户

    useradd

    • 语法:useradd [选项] 用户名
    • 常用选项;
      • -u 指定uid
      • -g 指定拥护所属基本组、组名或GID
      • -G 组名 为用户添加附加组,附加组必须事先存在
      • -c “注释信息” 添加注释信息
      • -d 目录 指定用户的家目录。此目录必须不能事先存在,否则将不会从/etc/skel中复制环境设置文件
      • -s shell 指定登录shell
      • -M 创建用户时不给其创建家目录
      • -r 添加一个系统用户
    [root@bad test]# id jay  //查看用户jay的详细信息
    uid=1000(jay) gid=1000(jay)=1000(jay)
    [root@bad test]# useradd -u 1005 -g jay -G user lili  //创建用户lili,指定uid为1005,基本组为jay组,附加组为user
    [root@bad test]# id lili
    uid=1005(lili) gid=1000(jay)=1000(jay),1001(user)
    [root@bad test]# ls /home/
    jay  lili  bad
    [root@bad test]# ls /opt/
    rh
    [root@bad test]# useradd -d /opt/tom tom  //创建用户,指定家目录为/opt/tom
    [root@bad test]# ls /opt/
    rh  tom
    [root@bad test]# id tom
    uid=1006(tom) gid=1006(tom)=1006(tom)
    [root@bad test]# useradd -s /bin/sh lisi  //创建用户lisi指定执行shell为/bin/sh
    [root@bad test]# su - lisi
    -sh-4.2$ 
    [root@bad test]# useradd -M -s /sbin/nologin -r jerry  //创建一个系统用户jerry不创建家目录,指定shell不允许登录系统,
    [root@bad test]# id jerry
    uid=992(jerry) gid=990(jerry)=990(jerry)
    [root@bad test]# ls /home/
    jay  lili  lisi  bad
    [root@bad test]# su jerry
    This account is currently not available.
    [root@bad test]# vim /etc/login.defs  //默认配置
    
    • 在创建用户时,会默认创建一个相同名的组,这个组叫私有组也叫基本组
    • 除了基本组,用户还可以被加到其他组,这个组叫附加组
      创建了一个用户,我们要怎么看是否创建成功了呢?这个时候,就会用到id命令了。

    查看用户账号信息

    id

    • 语法:id [选项] 参数
    • 常用选项:
      • -u 查看UID
      • -g 查看GID
      • -G 查看Groups
    [root@bad test]# id -u jerry
    992
    [root@bad test]# id -g jerry
    990
    [root@bad test]# id -G jerry
    990
    

    修改账户属性

    usermod

    • 语法:usermod [选项] 用户名
    • 常用选项:
      • -u 修改uid
      • -g 修改gid
      • -a -G 添加附加组,不使用-a选项,会覆盖此前的附加组
      • -d -m 改变用户家目录的同时把原来家目录的文件移动到新的家目录中
      • -e YYYY-MM-DD 指明用户帐号过期日期
      • -f INACTIVE 设定非活动期限
      • -L 锁定帐号。被锁定的帐号在/etc/shadow文件中密码前面会有一个感叹号
      • -U 解锁帐号
    [root@bad test]# id bad  //查看用户详细信息
    uid=1001(bad) gid=1001(user)=1001(user)
    [root@bad test]# usermod -u 1005 bad  //修改uid为1005
    [root@bad test]# id bad
    uid=1005(bad) gid=1001(user)=1001(user)
    [root@bad test]# usermod -g 1000 bad  //修改gid为1000
    [root@bad test]# id bad
    uid=1005(bad) gid=1000(jay)=1000(jay)
    [root@bad test]# usermod -G user bad  //添加附加组为user
    [root@bad test]# id bad
    uid=1005(bad) gid=1000(jay)=1000(jay),1001(user)
    [root@bad test]# groupadd a  //创建新组为a
    [root@bad test]# usermod -G a bad  //给用户bad指定附加组a
    [root@bad test]# id bad
    uid=1005(bad) gid=1000(jay)=1000(jay),1002(a)
    [root@bad test]# usermod -aG user bad  //再原附加组的基础上添加附加组
    [root@bad test]# id bad
    uid=1005(bad) gid=1000(jay)=1000(jay),1001(user),1002(a)
    [root@bad ~]# tail -3 /etc/passwd  //查看密码配置文件
    tcpdump:x:72:72::/:/sbin/nologin
    jay:x:1000:1000:jay:/home/jay:/bin/bash
    bad:x:1005:1000::/home/bad:/bin/bash
    [root@bad ~]# usermod -c "hello bad" bad  //为用户bad添加注释信息
    [root@bad ~]# tail -3 /etc/passwd
    tcpdump:x:72:72::/:/sbin/nologin
    jay:x:1000:1000:jay:/home/jay:/bin/bash
    bad:x:1005:1000:hello bad:/home/bad:/bin/bash
    

    删除用户

    userdel

    • 语法:userdel [选项] 用户名
    • 选项:
      • -r 删除用户的同时删除其家目录
    [root@bad test]# ls /home/  //查看家目录下的目录里
    jay  lili  lisi  bad
    [root@bad test]# userdel -r lili  //删除用户,并删除家目录
    [root@bad test]# ls /home/
    jay  lisi  bad
    

    如果我们在删除用户的时候,没有删除其家目录,那么在/home目录下,还是依旧会看到我们创建的用户的目录。可以将目录删除,或者重新建一个同名的用户,重新删除用户。

    切换用户

    su

    切换用户的方式特点
    su 用户名 非登录式切换,即不会读取目标用户的配置文件
    su - 用户名 登录式切换,即会读取目标用户的配置文件。完全切换
    su - 不指定用户时默认切换至root用户
    [root@bad test]# su - jay  //切换jay用户,并切换到jay的家目录
    上一次登录:日 10月 20 15:45:30 CST 2019:0 上
    [jay@bad ~]$ pwd  //查看当前位置
    /home/jay
    [jay@bad ~]$ exit
    登出
    [root@bad test]# su jay  //切换用户,不切换目录
    [jay@bad test]$ pwd
    /root/test
    [jay@bad test]$ su -  //不指定用户默认为root用户
    密码:
    上一次登录:四 11月  7 00:40:36 CST 2019pts/0 上
    [root@bad ~]# whoami  //查看当前登录用户
    root
    
    • 语法:su - 用户名 -c '命令'
      • 切换身份执行命令,命令执行结束后又回到原来的身份
    [root@bad ~]# su - bad -c 'touch abc'
    [root@bad ~]# ll /home/bad/
    总用量 0
    -rw-r--r--. 1 bad jay 0 11月  7 14:07 abc
    

    root用户切换至其他用户时,是不需要密码的。但是其他的用户想要切换别的用户,需要输入切换的用户的密码

    sudo

    • 配置文件:/etc/sudoers
    • 语法:sudo 选项 命令
    • 选项:
      • -V 显示版本编号
      • -h 会显示版本编号及指令的使用方式说明
      • -l 列出当前用户可以使用的所有sudo类命令
      • -v 在第一次执行时或是在N分钟内没有执行(N默认为5)会问密码
      • -k 使认证信息失效,如果不指定-k,默认认证信息在5分钟后失效
      • -b 将要执行的指令放在后台执行
      • -u 用户名 //以指定的用户名执行命令,默认为root

    bash配置文件

    配置文件类型配置文件路径
    全局配置 /etc/profile、/etc/profile.d/*.sh、/etc/bashrc
    个人配置 ~/.bash_profile、~/.bashrc
    配置文件类型功能
    profile类 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
    bashrc 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名

    在RHCE的考试中,为了保险起见,通常会写一个脚本,以保证我们所做的服务配置,能够在机器重启之后挂载成功。而这个脚本需要执行就会放在全局配置文件中,以及命令别名都会涉及到这里。

    密码管理

    passwd

    • 语法:passwd [选项] username
    • 选项:
      • --stdin 从标准输入获取用户密码
      • -l 锁定用户
      • -u 解锁用户
      • -d 删除用户密码
      • -n mindays 指定最短使用期限
      • -x mandays 指定最长使用期限
      • -w warndays 提前多少天开始警告
      • -i inactivedays 非活动期限,密码过期后到禁用前的这段时间

    这里没有举例,可以自己练习,可以在/etc/shadow中查看修改的用户的详细信息

    修改用户密码期限

    chage

    • 用于修改用户密码过期信息的命令
    • 语法:chage [选项] username
    • 选项:
      • -d 最近一次的修改时间
      • -E 过期时间
      • -I 非活动时间
      • -m 最短使用期限
      • -M 最长使用期限
      • -W 警告时间

    这条命令我用到过的比较少,但是工作应该用的会多一点。

    密码生成工具

    openssl

    • openssl 密码生成工具
    • 语法:openssl command [ command_opts ] [ command_args ]
    • 选项:
      • command 包含标准命令、消息摘要命令、加密命令
      • version 查看程序版本号
      • dgst 提取特征码
      • passwd 生成密码
      • rand 生成伪随机数
    //提取特征码
    [root@bad ~]# openssl dgst -md5 /etc/fstab
    MD5(/etc/fstab)= a977cc5e638d779ed880f3fee6d7067e
    
    //生成密码 openssl passwd -1 -salt string        //string一般为8位
    [root@bad ~]# openssl passwd -1 -salt hellotom
    Password:
    $1$hellotom$HpEDmPGqWwhP/eHg0kJHA0
    
    //生成随机数 openssl rand -base64 NUM
    //NUM表示随机数的长度
    [root@bad ~]# openssl rand -base64 20
    S/q8tjUSBuUNHb+0cgDX66dbvTQ=
    

    组管理

    创建组

    groupadd

    • 语法:groupadd [选项] groupname
    • 选项:
      • -g GID 指定GID
      • -r 添加一个系统组

    修改组信息

    groupmod

    • 语法:groupmod [选项] groupname
    • 选项:
      • -g GID 指定GID
      • -n groupname 修改组名

    删除组

    groupdel

    • 语法:groupdel groupname

    给组设密码

    gpasswd

    • 语法:gpasswd [选项] group
    • 选项:
      • -a username 将用户添加至组
      • -d username 将用户从组中删除
      • -r -passwd 删除组密码

    切换组

    newgrp

    • 语法:newgrp groepname

    这条命令我几乎没有用过。当你以以一个非root的用户登录,可以使用这条命令临时切换到新的基本组,但是需要输入要切换的基本组的密码。使用exit就可以退出新的基本组,回到当前用户原本的基本组。

    权限管理

    那权限怎么看呢?其实很简单,在使用ll命令的时候,是不是发现文件显示一大串?那么最前面的一列就是。第一个字符表示文件类型,之后的九位就表示权限。

    • 首先我们要知道,文件的权限主要针对的对象

      • u(owner)属主,即文件拥有者
      • g(group)数组,即文件拥有的组
      • o(other)其他用户,即除文件拥有者及拥有者所属组之外的所有用户
    • 每个文件或者目录都有三种权限

      • r 可读
      • w 可写
      • x 可执行

    注意!在RHCSA的题目中,有涉及到设置权限的题,其中有一个坑就是要你给目录可读的权限。因为是个目录,如果可读,那么就一定有执行权限,因为你要进入到目录中去才可以查看目录中的内容。

    权限的二进制十进制转换

    • 不要慌,进行进制转换,是为了帮助我们更好的理解权限
    权限二进制十进制
    000 0
    –x 001 1
    -w- 010 2
    -wx 011 3
    r– 100 4
    r-x 101 5
    rw- 110 6
    rwx 111 7
    • 权限通常有两种表达方式,一种是用字母rwx来表示,还有一种就是用十进制数来表示

    不要看着这么多就慌了,记不住怎么办?我在刚开始学的时候,权限完全是懵逼的,但是只要你理解了,也就很简单。无非就读写执行,421。数字表示就是自由组合了。

    修改权限

    chmod

    • 即change modify,修改
    • 语法:chmod[选项] 文件或目录
    • 选项:
      • -R 递归修改权限,修改目录及目录中的文件权限时需要

    chown

    • 即change owner,修改属主,也可以修改属组
    • 语法:chown 用户名 文件名 //修改属主
    • 语法:chown 用户名.组名 文件名 //修改属主和属组,中间有
    • 选项:
      • -R 递归修改权限

    在RHCSA中,会有一道题是需要修改文件的属主和属组的。

    chgrp

    • 语法:chown [选项] 组名 文件名
    • 选项:
      • -R 递归修改

    这条命令我们一般使用的少,一般都是直接使用的chown

    遮罩码

    • 这个其实就是将文件的权限进行一个隐藏,能更安全

    • 有个变量叫umask,默认值为0022

    • 文件最终权限是:666-umask

    • 目录最终权限是:777-umask

      文件默认是不能具有执行权限的,如果算得结果有执行权限,则将其权限整体+1

    特殊权限

    SUID

    • 针对可执行的程序文件
      • 程序启动的进程的属主是程序文件自身的属主,不是启动者为属主
        • chmod u+s 文件
        • chmod u-s 文件
        • chmod 4755 文件

    如果文件本身拥有执行权限,则显示SUID为s,否则为S

    SGID

    • 针对目录
      • 用户创建文件时,属组为此用户所属的基本组
        • chmod g+s 目录
        • chmod g-s 目录
        • chmod 2755 目录

    如果目录本身拥有执行权限,则显示SGID为s,否则为S

    Sticky

    • 针对目录
      • 在一个公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
        • chmod o+t 目录
        • chmod o-t 目录
        • chmod 1755 目录

    如果目录本身拥有执行权限,则显示Sticky为t,否则为T

    后面两种权限在RHCSA中都会有相关的题目,需要掌握。

    一般不会使用7755权限
    

    facl

    • Filesystem Access Control List,文件系统访问控制列表
    • 语法:setfacl [选项] 语法 文件名
      • -m 设定

        • u:用户名:权限
        • g:组名:权限
      • -x 取消特殊权限

        • u:用户名
        • g:组名
      • -b Remove all 即清除所有特殊权限

    • 如果要为某个目录设定默认的访问控制列表,则设定时在u或g前面加上d
    • setfacl -m d:u:test:rw 文件名

    设置特殊权限也是RHCSA中必考的题目,需要多练习。

    管理命令

    • w 显示当前系统登录用户,以及在做什么
    • sleep 睡眠
      • sleep 数字
        • s 秒,默认
        • m
        • h 小时
        • d

    写脚本为防止上一个命令没执行完下一命令就开始执行时可以加上sleep表示停顿#秒后再执行后面的命令

    • last 显示/var/log/wtmp文件,显示用户登录历史及系统重启历史
      • -n # 显示最近#次的相关信息
    • lastb 显示/var/log/btmp文件,显示用户错误的登录尝试
      • -n # 显示最近#次的相关信息
    • lastlog 显示每个用户最近一次成功登录信息
      • -u 用户名 //显示特定用户最近的登录信息
    • basename //显示路径基名
    [root@bad test]# ls
    abc  test
    [root@bad test]# ll abc 
    -rw-r--r--. 1 root root 0 11月  9 10:00 abc
    [root@bad test]# chown jay abc
    [root@bad test]# ll
    总用量 0
    -rw-r--r--. 1 jay  root 0 11月  9 10:00 abc
    drw-------. 2 root root 6 11月  9 09:32 test
    [root@bad test]# chown .jay abc 
    [root@bad test]# ll abc 
    -rw-r--r--. 1 jay jay 0 11月  9 10:00 abc
    [root@bad test]# chown root.root
    chown: "root.root" 后缺少操作数
    Try 'chown --help' for more information.
    [root@bad test]# chown root.root abc 
    
    以上内容均属原创,如有不详或错误,敬请指出。
    
    本文作者: 坏坏
  • 相关阅读:
    <<< Tomcat运行报错IOException while loading persisted sessions: java.io.EOFException
    <<< Tomcat 部署项目There are no resources that can be added or removed from the server
    <<< tomcat启动报错StandardServer.await: create[8005]
    【LeetCode】最接近的三数之和【排序,固定k1,二分寻找k2和k3】
    【LeetCode】三数之和【排序,固定一个数,然后双指针寻找另外两个数】
    【LeetCode】最长公共前缀【二分】
    【LeetCode】盛最多水的容器【双指针+贪心 寻找最大面积】
    【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
    【LeetCode】最长回文子串【动态规划或中心扩展】
    【LeetCode】寻找两个有序数组的中位数【性质分析+二分】
  • 原文地址:https://www.cnblogs.com/bad5/p/12424288.html
Copyright © 2011-2022 走看看