用户身份介绍

用户身份

  • 管理员UID为0:系统的管理员用户。
  • 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
  • 普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。

UID不能冲突
在Linux系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组

useradd

创建新的用户
useradd [选项] 用户名

useradd命令中的用户参数以及作用

参数 作用
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为YYYY-MM-DD.
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell解释器

录制_2019_04_11_17_23_11_567.gif

groupadd

创建用户组
groupadd [选项] 群组名

usermod

修改用户的属性
usermod [选项] 用户名

系统中创建用户也就是修改配置文件的过程。用户的信息保存在/etc/passwd文件中,也可以直接用文本编辑器来修改其中的用户参数项目

usermod命令的参数及作用

参数 作用
-c 填写用户账户的备注信息
-d

-m | 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 | | -e | 账户的到期时间,格式为YYYY-MM-DD | | -g | 变更所属用户组 | | -G | 变更扩展用户组 | | -L | 锁定用户禁止其登录系统 | | -U | 解锁用户,允许其登录系统 | | -s | 变更默认终端 | | -u | 修改用户的UID |

将用户aaron加入到root用户中

  1. [root@node-1 home]# id aaron
  2. uid=8888(aaron) gid=8888(aaron) groups=8888(aaron),0(root)

passwd

修改用户密码、过期时间、认证信息等
passwd [选项] [用户名]
passwd命令中的参数以及作用

参数 作用
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
—stdin 允许通过标准输入修改用户密码,如echo “NewPassWord”

| passwd —stdin Username | | -d | 使该用户可用空密码登录系统 | | -e | 强制用户在下次登录时修改密码 | | -S | 显示用户的密码是否被锁定,以及密码所采用的加密算法名称 |

userdel

删除用户
userdel [选项] 用户名
userdel命令的参数以及作用

参数 作用
-f 强制删除用户
-r 同时删除用户及用户家目录

文件权限与归属

文件类型

参数 作用
- 普通文件
d 目录文件
l 链接文件
b 块设备文件
c 字符设备文件
p 管道文件

文件权限的字符与数字表示
文件的读、写、执行权限可以简写为rwx,亦可分别用数字4、2、1来表示

权限分配 文件所有者 文件所属组 其他用户
权限项 执行 执行 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1

image.png

文件的特殊权限

SUID

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

  1. [root@node-1 ~]# ls -l /etc/shadow \\shadow只有root管理员有权限看
  2. ----------. 1 root root 910 Apr 11 05:33 /etc/shadow
  3. [root@node-1 ~]# ls -l /bin/passwd \\执行passwd的用户可以临时有属主的权限
  4. -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /bin/passwd

SGIU

SGID主要实现如下两种功能:

  • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
  • 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。
  1. [root@node-1 ~]# mkdir testdir
  2. [root@node-1 ~]# ls -l
  3. total 0
  4. drwxr-xr-x. 2 root root 6 Apr 11 21:33 testdir
  5. [root@node-1 ~]# chmod -Rf 777 testdir/
  6. [root@node-1 ~]# chmod -Rf g+s testdir/
  7. [root@node-1 ~]# ls -l
  8. total 0
  9. drwxrwsrwx. 2 root root 6 Apr 11 21:33 testdir
  10. [root@node-1 ~]# su - aaron
  11. Last login: Thu Apr 11 05:33:06 EDT 2019 on pts/0
  12. [aaron@node-1 ~]$ cd /root/testdir/
  13. [aaron@node-1 testdir]$ echo "hello" > test
  14. [aaron@node-1 testdir]$ ls -l
  15. total 4
  16. -rw-rw-r--. 1 aaron root 6 Apr 11 21:34 test

chmod

设置文件或目录的权限
chmod [参数] 权限 文件或目录名称
针对目录进行操作时需要加上大写参数-R来表示递归操作

chown

设置文件或目录的所有者和所属组
chown [参数] 所有者:所有组 文件或目录名称
针对目录进行操作时需要加上大写参数-R来表示递归操作

SBIT

设置了SBIT位之后,文件只能被文件拥有者删除

  1. [root@node-1 ~]# mkdir /public
  2. [root@node-1 ~]# chmod -R 777 /public/
  3. [root@node-1 ~]# chmod -R o+t /public/
  4. [root@node-1 ~]# su - aaron
  5. Last login: Thu Apr 11 21:52:50 EDT 2019 on pts/0
  6. [aaron@node-1 ~]$ cd /public/
  7. [aaron@node-1 public]$ echo "hello" > test
  8. [aaron@node-1 public]$ chmod 777 test
  9. [aaron@node-1 public]$ su demo
  10. Password:
  11. [demo@node-1 public]$ ll
  12. total 4
  13. -rwxrwxrwx. 1 aaron aaron 6 Apr 11 21:53 test
  14. [demo@node-1 public]$ rm -f test
  15. rm: cannot remove test’: Operation not permitted
  16. [demo@node-1 public]$ ls -ld
  17. drwxrwxrwt. 2 root root 18 Apr 11 21:53 .

文件的隐藏属性

chattr

设置文件的隐藏权限
chattr [参数] 文件
如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”

chattr命令中用于隐藏权限的参数及其作用

参数 作用
i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
S 文件内容在变更后立即同步到硬盘(sync)
s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
A 不再修改这个文件或目录的最后访问时间(atime)
b 不再修改文件或目录的存取时间
D 检查压缩文件中的错误
d 使用dump命令备份时忽略本文件/目录
c 默认将文件或目录进行压缩
u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t 让文件系统支持尾部合并(tail-merging)
X 可以直接访问压缩文件中的内容
  1. [root@node-1 public]# echo "hello" > test
  2. [root@node-1 public]# chattr +a test
  3. [root@node-1 public]# rm -f test
  4. rm: cannot remove test’: Operation not permitted
  5. [root@node-1 public]# ll
  6. total 4
  7. -rw-r--r--. 1 root root 6 Apr 11 21:59 test

lsattr

显示文件的隐藏权限
lsattr [参数] 文件

  1. [root@node-1 public]# lsattr test
  2. -----a---------- test
  3. [root@node-1 public]# chattr -a test
  4. [root@node-1 public]# lsattr test
  5. ---------------- test
  6. [root@node-1 public]# rm -f test

文件访问控制列表

基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

setfacl

管理文件的ACL规则
setfacl [参数] 文件名称
针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数

  1. [aaron@node-1 root]$ pwd
  2. /root
  3. [aaron@node-1 root]$ whoami
  4. aaron
  5. [aaron@node-1 root]$ touch test
  6. touch: cannot touch test’: Permission denied
  7. [aaron@node-1 root]$ su - root
  8. Password:
  9. Last login: Thu Apr 11 22:46:47 EDT 2019 on pts/0
  10. [root@node-1 ~]# setfacl -Rm u:aaron:rwx /root
  11. [root@node-1 ~]# su aaron
  12. [aaron@node-1 root]$ touch test
  13. [aaron@node-1 root]$ ls
  14. test

getfacl

用于显示文件上设置的ACL信息
getfacl 文件名称

  1. [root@node-1 ~]# getfacl /root
  2. getfacl: Removing leading '/' from absolute path names
  3. # file: root
  4. # owner: root
  5. # group: root
  6. user::r-x
  7. user:aaron:rwx
  8. group::r-x
  9. mask::rwx
  10. other::---

su命令与sudo服务

su命令

切换用户身份

  1. [aaron@node-1 ~]$ su - root
  2. Password:
  3. Last login: Thu Apr 11 22:47:41 EDT 2019 on pts/0
  4. [root@node-1 ~]# su - aaron
  5. Last login: Thu Apr 11 22:51:52 EDT 2019 on pts/0
  6. [aaron@node-1 ~]$

su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。

尽管像上面这样使用su命令后,普通用户可以完全切换到root管理员身份来完成相应工作,但这将暴露root管理员的密码,从而增大了系统密码被黑客获取的几率;这并不是最安全的方案。

sudo

用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务
sudo [参数] 命令名称

sudo服务中的可用参数以及作用

参数 作用
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u用户名或UID值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语

sudo命令具有如下功能

  • 限制用户执行指定的命令:
  • 记录用户执行的每一条命令;
  • 配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数,只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。;
  • 验证密码的后5分钟内(默认值)无须再让用户再次验证密码。

录制_2019_04_12_10_58_27_80.gif
在生产环境中,让普通用户拥有整个系统中所有命令的最高执行权限不合适的,所以我们可以指定允许以最高权限执行的命令
录制_2019_04_12_11_02_52_958.gif