前言

Linux操作系统是多任务(Multi-tasks)多用户(Multi-users)分时操作系统,linux操作系统的用户就是让我们登录到linux的权限;每当我们使用用户名登录操作系统时,linux都会对该用户进行认证、授权审计等操作。操作系统为了识别每个用户,会给每个用户定义一个ID,就是UID。用户组就相当于多个用户的容器;在linux系统中,用户组也有一个ID,GID。

正文

用户管理分类说明

用户分类

  1. 系统超级管理员 root uid=0
  2. 系统虚拟用户 www uid=1~999
    Linux下面每一个进程都需要有一个对应的用户和用户组
    系统虚拟用户是无法登录的
    著名的虚拟用户:nobody id=99
  3. 系统普通用户 uid=1000+

用户与用户组的关系

  1. 一对一关系 一个用户可以属于一个用户组
  2. 一对多 一个用户可以属于多个用户组
  3. 多对多 多个用户可以属于多个用户组

用户权限概念说明

文件管理者信息
  1. 文件所属用户信息(属主-主人) UID user id(用户id)
  2. 文件所属的组信息(属组-家人) GID group id(用户组id)
  3. 文件所属其它用户(其它-隔壁) other user
权限类型
  1. 读取权限(4):read(r)
    文件:可以阅读查看文件中的内容
    目录:可以阅读查看目录中的内容
  2. 写入权限(2):write(w)
    文件:可以编辑修改文件中的内容
    目录:可以在目录中创建删除修改数据
  3. 执行权限(1):execute(x)
    文件:可以执行文件中的内容
    目录:可以切换进入到目录中
  4. 没有权限(0):N/A(-)
  5. 权限对应的数字
    r 4
    w 2
    x 1
查看文件或目录权限信息

linux在用户权限下安装docker_用户组

文件或目录属主用户权限:rwx(7)

文件或目录属组组员权限:r-x(5)

文件或目录其它用户权限:r-x(5)

权限修改

权限修改命令:chmod

符号设定

属主-user u
属组-group g
其他用户-other o
所有用户 a

语法:chmod u或g或o +或-或=权限符号	文件或目录
意思:属主或属组或其他用户  增加或减去 某种权限
属主-user u  :
chmod u+r 文件名	或 chmod  u+w 文件名	或 chmod u+x 文件名
chmod u-r 文件名	或 chmod u-w  文件名	或 chmod u-x 文件名
属组-group      g  和 其他用户-other  o 同样的语法:
chmod g+r/w/x u-r/w/x u=rw
chmod o+r/w/x u-r/w/x u=rw
chmod a+r/w/x a-r/w/x a=rw
数值设定

上面已经说明,权限和数字的关系:r=4,w=2,x=1

例子:chmod 761 oldboy.txt
说明:
第一个数字7表示 文件或目录属主的权限信息,为7说明有 rwx	权限
第二个数字6表示 文件或目录属组的权限信息,为6说明有 rw	权限
第三个数字1表示 文件或目录其他用户的权限信息 为1说明有 x 权限
疑惑

为什么刚创建出来的文件或目录权限都是同样的?
目录权限都是 755
文件权限都是 644

因为文件或目录刚创建出来的时候,系统会它设置默认权限,755 和 644 就是系统给他们设置的默认权限。

#查看默认权限:
[root@oldboyedu ~]# umask
0022

意思:
默认文件权限: 666 - 022 = 644
PS:
如果umask数值是奇数(例如:umask=033)  666 - 033 = 633 + 11 = 644。
如果umask数值是偶数(例如:umask=022)  666 - 022 = 644


默认目录权限: 777 - 022 = 755	
umask数值是奇数  777 - 033 = 744
umask数值是偶数  777 - 022 = 755	
PS: 目录的话,不论umask是奇数还是偶数,都是直接用777 减 umask 值

如何修改umask值?
临时修改:umask 数字 例如:umask 0022 永久修改:

vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
      umask 002
else
      umask 022  --- 可以永久修改umask数值
fi

权限详解

读权限 chmod 444 file

普通文件:

  1. 超级用户
    可以读取文件内容
    可以编写文件内容 (需要用户 wq!强制保存退出)
    可以执行文件
  2. 普通用户
    可以读取文件内容
    可以编写文件内容 (需要用户 wq!强制保存退出)
    可以执行文件

目录:

  1. 超级用户
    可以进入目录里面
    可以查看目录里面的内容
    可以删除里面的文件,重名名
  2. 普通用户
    不可以进入目录里面
    不可以查看目录里面的内容
    不可以对里面的文件或目录操作
写入权限 chmod 222 file

普通文件

  1. 超级用户
    可以查看文件内容
    可以修改文件内容
    可以执行文件
  2. 普通用户
    不可以查看文件内容
    可以修改文件内容,但是之前文件里的内容会丢失
    不可以执行文件

目录

  1. 超级用户
    可以进入目录
    可以查看目录里面的内容
    可以修改目录里面的文件或子目录
  2. 普通用户
    不可以进入目录里面
    不可以查看目录里面的内容
    不可以对里面的文件或目录操作
执行权限 chmod 222 file

普通文件

  1. 超级用户
    可以查看文件内容
    可以强制修改文件内容
    可以执行文件
  2. 普通用户
    不可以查看文件内容
    不可以执行文件
    不可以编辑文件

目录

  1. 超级用户
    可以进入目录
    可以查看目录里面的内容
    可以对里面的文件或子目录操作
  2. 普通用户
    可以进入目录
    可以查看目录里面的内容
    可以对里面的文件或子目录操作

总结:
结论01: 只要文件有执行权限, root用户对于这个文件就属于无敌的存在
结论02: 如果想让所有用户都有文件执行能力,必须先有对文件读取能力
结论03: 如果想让所有用户都有文件写入能力,必须先有对文件读取能力
结论04: 如果想让文件写权限和执行权限起作用, 必须先有读取权限

用户相关信息文件

用户特征信息

记录系统用户信息文件

/etc/passwd

[root@oldboy-xiaodao.com.cn ~]# ll /etc/passwd
-rw-r--r-- 1 root root 2103 Feb  4  2019 /etc/passwd
/etc/passwd    --- 用户信息记录文件
oldboy01:x:1003:1003:sa-xiaozhang:/home/oldboy01:/bin/bash
oldboy02:x:1004:1003:dev-xiaoli:/home/oldboy02:/bin/bash
oldboy03:x:1005:1005::/home/oldboy03:/bin/bash
oldboy04:x:1006:1006::/home/oldboy04:/bin/bash
oldboy05:x:1007:1007::/home/oldboy05:/bin/bash
oldboy06:x:1008:1008::/home/oldboy06:/bin/bash
oldboy07:x:1009:1009::/home/oldboy07:/bin/bash

linux在用户权限下安装docker_用户组_02


第一列: 用户名称信息

第二列: 表示用户密码信息. 真正密码信息已经保存在了/etc/shadow文件中

第三列: 表示用户uid数值信息

第四列: 表示用户gid数值信息

第五列: 表示用户注释信息

第六列: 定义用户所在家目录信息

第七列: 用户是否能够登陆系统

shell信息(/etc/shells)

/bin/sh
/bin/bash
/sbin/nologin
/usr/bin/sh
/usr/bin/bash
/usr/sbin/nologin

shell信息哪些设置可以进行远程登陆

/bin/bash

shell信息哪些设置不可以进行远程登陆?

/sbin/nologin
/usr/sbin/nologin

用户密码信息

记录用户密码信息文件

/etc/shadow

用户组特征信息

记录用户组的信息文件

/etc/group

用户组密码

记录用户组的密码文件

/etc/gshadow

用户相关信息目录

用户家目录的模板

/etc/skel

目录特征01:目录下面文件为隐藏文件
目录特征02:修复被破坏的用户家目录

  1. 表示记录环境变量和别名信息文件 .bash_profile
  2. 表示记录系统默认别名信息的文件 .bashrc
  3. 表示记录系统退出执行的命令信息 .bash_logout

该目录作用说明:

每创建一个用户,就会根据这个目录中的模板,在用户的家创建同样的文件。我们可以在这个目录创建一些公共的文件,例如:《如何使用这台Linux服务器》,这样每个用户家目录都会有这样一份文件,他们可以阅读该文件,学会如何使用Linux服务器。

用户管理相关命令

用户相关命令

useradd
作用:创建一个新用户
选项:
-u 指定用户的uid数值信息
-s 指定用户使用的shell

  1. 默认使用/bin/bash
  2. 特殊指定/sbin/nologin,主要用于添加虚拟用户使用(傀儡用户)

-M 表示不创建家目录,在创建虚拟用户使用
-g 指定用户属于的组(组的名称)[添加用户的时候默认创建一个与用户一样的家庭]
-c 创建的新用户添加注释信息
-G  指定用户还属于哪个组 指定用户附属组信息

#如何设置所属组 666  同时还属于1024这个组
useradd -u 666 oldboy30 -G 1024
[root@oldboy-xiaodao.com.cn ~]# id oldboy30
uid=666(oldboy30) gid=1025(oldboy30) groups=1025(oldboy30),1024(oldboy051)

#创建一个用户alex999指定uid为888,禁止用户登录系统,不创建家目录
useradd alex999  -u 888  -s /sbin/nologin  -M   --- 创建虚拟用户方法
PS:虚拟用户主要用于管理服务进程

PS:检查用户是否存在?

uid=1024(oldboy051) gid=1024(oldboy051) groups=1024(oldboy051)
用户的uid信息       用户的组id,所属组(所属主要组 )   用户所属的其他组信息

userdel
作用:删除用户信息(避免造成数据丢失,尽量不要删除用户,而是注释用户)
选项:
默认不删除用户的家目录和邮箱
-r 删除用户有关的所有信息(家目录)

usermod
作用:修改用户信息
选项:
-u 指定新建用户的uid数值
-G 指定用户还属于哪个组 指定用户附属组信息
-g 指定用户属于主要组信息
-s 指定新建用户shell信息, 如果指定为/sbin/nologin,用户无法登陆系统
-c 创建的新用户添加注释信息

passwd
作用:设置用户密码信息

超级管理员设置用户密码
交互式设置用户密码

passwd oldboy

免交互设置用户密码

#echo 密码 | passwd --stdin	用户名 
echo 123456|passwd --stdin oldboy

普通用户设置密码
交互式给自己设置密码

passwd

chown
作用:修改文件或目录所有者和属于的用户组
选项:
-R 递归修改文件或目录的所有者和用户组

chown oldboy oldboy.txt  #只修改了文件的所有者
#修改了文件的所有者和属于的组。第一个是用户名,第二个是组名  
chown oldboy.oldboy oldboy.txt  
或
chown oldboy:oldboy oldboy.txt  #修改了文件的所有者和属于的组
用户组相关命令

groupadd

groupadd (选项) (参数)

作用:创建用户组
选项:
-g:指定新建工作组的id;
-r:创建系统工作组,系统工作组的组ID小于500;
-K:覆盖配置文件“/ect/login.defs”;
-o:允许添加组ID号不唯一的工作组。
参数:
组名:指定新建工作组的组名。

groupadd -g 344 linuxde

groupmod

groupmod (选项) (参数)

作用:更改用户组 gid 或名称
选项:
-g<群组识别码>:设置欲使用的群组识别码;
-o:重复使用群组识别码;
-n<新群组名称>:设置欲使用的群组名称
参数:
组名:指定要修改的工作的组名。

groupdel

groupdel(参数)

作用:用于删除指定的工作组
参数:
组:要删除的工作组名。

用户查询命令

id 用户名/用户uid
查询得到的信息:

  1. 一个用户是否存在
  2. 查询用户的uid gid
  3. 属于哪个用户组
[root@localhost oldboy]# id 1000
uid=1000(cql) gid=1000(cql) 组=1000(cql)

w
显示系统中已经远程登录的用户 正在进行什么操作

[root@localhost oldboy]# w
 21:49:15 up  6:52,  3 users,  load average: 0.00, 0.01, 0.05
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1      14:59    5:52m  0.24s  0.24s -bash
root     pts/0     18:13    3.00s  0.10s  0.01s w
root     pts/1     19:42    1:43m  0.02s  0.02s -bash

linux在用户权限下安装docker_bash_03

uptime

[root@localhost oldboy]# uptime
 21:51:58 up  6:55,  3 users,  load average: 0.00, 0.01, 0.05

last
作用: 哪个用户在什么时候 从哪里 远程登录你的系统 用户登录的信息

lastlog
作用:显示linux中所有用户最近一次远程登录的信息

普通用户获取权限

1.切换用户
#su 切换用户
su - root
su  root
PS:
su -	切换用户时更新环境变量(连用户和shell环境一起切换成root身份了)
su		切换用户时不会更新环境变量(切换root身份,但shell环境仍然是普通用户的shell;)
su切换成root用户以后,pwd一下,发现工作目录仍然是普通用户的工作目录;而用su - 命令切换以后,工作目录变成root工作目录了。
2.修改权限
3.用户提权
#sudo 提权:普通用户可以暂时获取root用户的权限

sudo
查看当前用户的特权信息 sudo -l
查看当前用户的密码缓存 sudo -k

配置当前用户的特权信息

visudo=vi /etc/sudoers
PS:配置完成后,可以用visudo -c 进行语法检查

#授权某一个或几个命令
90 ## Allow root to run any commands anywhere
91 oldboy   ALL=(ALL)       /bin/ls, /bin/touch

#授权使用命令不需要密码
90 ## Allow root to run any commands anywhere
91 oldboy   ALL=(ALL)       NOPASSWD: ALL

#授权大量命令信息,并排除指定命令
90 ## Allow root to run any commands anywhere
91 oldboy   ALL=(ALL)       /bin/*, ! /bin/vi

4.设置特殊权限位

linux系统基本权限位为9位权限,但还有额外3为权限位,共12位权限:
suid s(有x) S 4 用户对应的权限位(用户对应的3位上)
sgid s(有x) S 2 用户组对应的权限位(用户组对应的3位上)
sticky t(有x) T 1 其他用户对应的权限位

suid总结:是针对命令和二进制程序的

  1. 用户或属主对应的前三位权限的x位上如果有s就表示suid权限。当x位上没有小写x执行权限的时候,suid的权限显示的就是大S
  2. suid的作用是让普通用户可以以root(或其他)的用户角色运行只有root(或其他)账号才能运行的程序或命令,或程序命令对应本来没有权限操作的文件等。
  3. suid和su及sudo的区别:suid为某一个命令设置特殊权限(使用者为所有人)

sgid总结:是针对用户组权限位的
对于文件来说,sgid的功能如下:
4. sgid仅对二进制程序有效
5. 二进制命令或程序需要有可执行权限x
6. 执行命令的任意用户可以获得该命令程序执行期间所属组的权限

对于目录来说,sgid的功能如下:
7. linux里默认情况所以用户创建文件,默认用户和组都是自身
8. 可以让用户在此目录下 创建的文件和目录 具有和此目录相同的用户组设置

sticky总结:
粘滞位,通常对目录而言。通常对于全局可写目录(other也可写)来说,让该目录具有sticky后,删除只对属于自己的文件有效(但是仍能编辑修改别人的文件,除了root的)。不能根据安全上下文获取对别人的文件的写权限。经典的/tmp 目录就具有sticky权限

[root@localhost ~]# ll / | grep tmp
drwxrwxrwt.   7 root root 4096 11月 10 22:22 tmp

设置方法:

suid:chmod 4755 file 或者chmod u+s file
sgid:chmod 2755 file 或者 chmod g+s file
sticky:chmod 1777 file 或者 chmod o+t file