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 
以上内容均属原创,如有不详或错误,敬请指出。
本文作者: 坏坏
发布了21 篇原创文章 · 获赞 7 · 访问量 2826

猜你喜欢

转载自blog.csdn.net/qq_45668124/article/details/104567687