Linux 运维基础:用户管理

Posted 漂亮姐姐1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux 运维基础:用户管理相关的知识,希望对你有一定的参考价值。

用户类型

用户类型名称uid特点
管理员用户root0权力至高无上
虚拟用户nobody(可自定义)1-999用于管理进程 无家目录 不能登录系统
普通用户自定义1000+权限有限

用户管理基本操作

创建用户

# 创建普通用户danni
useradd danni
# 创建用户,指定用户id,所属组,附属组,用户注释
useradd danni -u 2000 -g danni -G dannis -c "An IT girl"
# 创建虚拟用户 mysql
useradd mysql -M -s /sbin/nologin -c "database manager"

useradd参数说明:

参数说明
-M不创建家目录
-s设置用户登录方式
-c设置用户注释
-g设置用户所属组
-u设置用户id
-G设置用户的附属组

查看用户信息

用户的信息保存在 /etc/passwd 目录下

# 查看用户信息
[root@smartgirl ~]# grep mysql /etc/passwd
mysql:x:1002:1002:database manager:/home/mysql:/sbin/nologin
1    2  3    4    5               6            7
------------------------------------------------------------------------
各字段含义:
1.用户名
2.用户密码,正真的密码保存在/etc/shadow中,此处仅占位
3.用户id
4.所属组id
5.用户注释
6.用户家目录 --- 虚拟用户的家目录实际并不存在
7.用户登录方式  /sbin/nologin ---- 不能登录

修改用户信息

usermod $用户名 $参数 $信息

# 修改用户登录方式 --- 当有员工离职,账号可以设置为不可登录(保留账号)
usermod danni -s /sbin/nologin

删除用户

userdel $用户名 — 不会删除用户的家目录
userdel -r $用户名 — 彻底删除用户,会删除用户家目录

补充:
groupadd $用户组名 — 创建用户组
groupdel $用户组名 — 删除用户组

设置用户密码

交互式设置

passwd $用户名

非交互式设置

echo 密码信息|passwd --stdin $用户名

查看所有用户登录信息

# 根据用户信息空闲时间,当前操作等,可以判断用户的使用系统情况
# 如判断用户是否占用CPU资源过多,是否长时间运行脚本
# 从而判断是否执行了死循环脚本,或者系统被植入病毒
[root@smartgirl ~]# w
05:47:31 up 10:19,  2 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/2    10.0.0.1         01:45    3.00s  0.24s  0.00s w
root     pts/3    10.0.0.1         01:45    2:55m  0.03s  0.02s bash
1		2		  3			   		4		5		    6		7
----------------------------------------------------------------------
各字段含义:
1. 登录用户用户名
2. pts/x 远程登录系统
   tty1 本地登录
   echo '请勿继续操作!' >> /dev/pts/2   --- 将在用户终端输出该信息,可用于提醒用户
3. 从哪连接的服务器
4. 登录时间
5. 空闲时间 --- 无操作
6. 用户操作系统 消耗的CPU资源
7. 用户当前操作 ich(执行脚本)  bash命令行输入 

文件/目录权限

文件/目录权限的设置是用户管理中非常重要的内容,因为Linux中一切皆文件,掌握了文件的控制权,就掌握了系统的控制权,文件权限的管理对服务器的安全至关重要。

文件权限说明

  • r 可读
  • w 可执行
  • x 执行这个文件(脚本文件)

权限配置结论:

  • root用户对任何文件都默认有读写权限,即使没有执行权限也可以用sh命令执行文件
  • 对于文件来说,写权限和执行权限都需要有读权限支持
  • 普通如果想对文件进行操作,必须对文件赋予读的权限

目录权限说明

  • r 可读目录中文件的属性
  • w 可在目录中添加或删除文件数据信息
  • x 可进入到目录中

目录权限配置结论:

  • root用户对目录有绝对权限
  • 对于目录来说,写权限和读权限都需要有执行权限的配合
  • 如果想对目录进行操作,必须对目录赋予执行操作

root用户文件默认权限:644

保证属主可编辑文件,其他用户可读文件

root用户目录默认权限:755

保证属主可编辑目录中文件,其他用户可读取目录信息,并进入到目录

ps:文件是否可以编辑查看,不仅与文件自身的权限有关,还与上一级或上n级目录的权限有关

设置用户文件权限

修改单类型用户权限

属主 — user — u
属组 — group — g
其他用户 — other — o

chmod u+r/w/x — 添加权限
chmod u-r/w/x — 减少权限
chmod u=rw — 直接赋值

修改所有类型用户权限

数值设定:chmod 755 $文件名
符号设定:chmod a=x $文件名

修改文件属主/属组

# 修改属主
chown $属主 $文件
# 修改属组
chgrp $属组 $文件
# 修改属主和属组
chown $属主.$属组 $文件
chown $属主. $文件
# 修改目录的权限
chown  -R $属主.$属组 $目录 --- 递归修改(注意参数是大写R)

默认用户文件/目录权限

系统中有一个umask,是文件/目录权限掩码,不同用户的umask值是不一样的,不同用户的umask的值可以是不一样的,umask决定了用户创建的文件/目录的默认权限。

这里只用root用户权限来作说明。

  • 默认umask : 0022
  • 默认文件权限: 666 - 022 = 644
  • 默认目录权限:777 - 022 = 755

文件权限计算:

对于目录,只需要用 777 减去 umask的值即可
但是,对于文件,其情况就比较特殊
若 umask 某一位是奇数,则该位对应的计算结果要+1
若都是偶数,则不需要特殊处理,也就是说:
假如umask是033,那么文件权限是 666 - 033 => 633 + 011 => 644

修改umask

  • 临时修改

    umask $数字

  • 永久修改

    vi /etc/profile

文件特殊权限位

文件在系统中一共有12个权限位,除了属主,属组和其他用户rwx一共9个权限位外,还有另外三个,分别时:

  • setuid:将用户属主所拥有的能力分配给所有人chmod u+s $文件名chmod 4xxx $文件名
  • setgid:将用户属组所拥有的能力分配给所有人 chmod g+s $文件名chmod 2xxx $文件名
  • sticky bit(粘滞位):可以将不同用户信息放置到共享目录中,实现不同用户数据可以互相查看,但是不可以互相随意修改,可以用于创建一个共享目录 chmod o+t $目录chmod 1777 $目录
    系统有一个默认的共享目录 /tmp

普通用户提权

  • 修改文件/目录 rwx 权限位
  • 修改/etc/sudoers文件内容,使用sudo命令执行被赋予的权限
    # 示例
    # `visudo` 或 `vi /etc/sudoers` 可对文件进行编辑,推荐使用`visudo`,其有语法检查功能
    92 root ALL=(ALL) ALL
    93 danni ALL=(ALL) /usr/sbin/useradd
    ------------------------------------
    [danni@smartgirl ~]sudo useradd danni01   # 获得添加用户的权限
    
  • 设置setuid/setgid,赋予普通用户属主/属组的权限
    注意:
    setuid 权限一般赋予二进制文件的命令文件或者一些可执行的脚本文件
    setgid

特殊目录和文件

系统中一个特殊的目录/etc/skel/

该目录是用户家目录的样板目录,新创建用户的家目录会参考这个目录

目录中自带的文件有:

文件功能
.bash_logout保存系统退出登录状态时执行的命令
.bash_profile保存别名和环境变量(只针对某个用户) ,等同于.bashrc
.bashrc保存别名和环境(只针对某个用户)

/etc/skel 目录的应用:

  • 目录中可以存储运维操作规范说明文件
  • 调整命令提示符信息
    用户家目录中文件被恶意删除,出现问题:命令提示符变为bash-4.2$
    可将/etc/skel目录中的文件复制到用户家目录下,提示符即恢复正常

用户家目录下的特殊文件

  • .bash_history — 历史命令记录文件
  • .viminfo — 样式信息(可设置默认显示行号,文件头信息)

系统中和用户相关的文件

  • /etc/passwd — 记录系统用户信息文件
  • /etc/shadow — 系统用户密码文件
  • /etc/group — 组用户记录文件
  • /etc/gshadow —组用户密码信息
  • /etc/shells — 所有可选登录方式

以上是关于Linux 运维基础:用户管理的主要内容,如果未能解决你的问题,请参考以下文章

linux云自动化运维基础知识21(selinux的初级管理)

Linux 运维基础:用户管理

Linux 运维基础:用户管理

Linux运维基础-系统管理之权限管理

运维基础--Linux用户和组的管理

权限管理(Linux运维)