学好linux必须精通用户管理的章节知识

 

12 Linux中用户知识管理

12.1 系统开机启动流程

12.1.1 centos6系统开机启动流程

12.1.1.1 开机系统流程语言描述

  • 服务器电源开关打开
  • bios自检

    目的:检查硬件是否可以正常的使用

  • 加载MBR

    目的:可以加载系统引导分区和加载系统分区表

  • 加载grub菜单

    目的:选择要启动的内核

    可以进入单用户模式

  • 加载内核

    目的:启动系统

  • 运行系统中的第一个进程
  • 加载系统运行级别(/etc/inittab)

目的:选择你要启动的系统级别

  • 进行系统初始化操作(/etc/rc.d/rc.sysinit)

    目的:加载网卡配置和系统主机名的设置

  • 8.运行系统开机自启动服务(/etc/rc3.d/* K:代表杀死 S:代表开启)
  • 9.运行mingetty进程,实现显示登陆界面

 

12.1.1.2 开机启动流程示意图

12.1.2 centos7系统启动开机流程

12.1.2.1 开机系统流程语言描述

  • 服务器电源开关打开
  • bios自检

    目的:检查硬件是否可以正常的使用

  • 加载MBR

    目的:可以加载系统引导分区和加载系统分区表

  • 加载grub菜单

    目的:选择要启动的内核

    可以进入单用户模式

  • 加载内核

    目的:启动系统

  • 运行系统中的第一个进程(systemd)
  • 加载系统运行模式(/etc/systemd/system/default.target -软连----/usr/lib/systemd/system/runlevel5.target)

目的:选择你要启动的系统模式

  • 进行系统初始化操作(/usr/lib/systemd/system/sysinit.target)

    目的:加载网卡配置和系统主机名的设置

  • 8.运行系统开机自启动服务(/etc/systemd/system/multi-user.target.wants/crond.service -------软连接------------- /usr/lib/systemd/system/crond.service)
  • 9.运行mingetty进程,实现显示登陆界面

 

12.1.2.2 开机流程示意图

12.2 用户权限相关知识

12.2.1 文件系统权限的测试说明

12.2.1.1 文件权限读写执行代表的意思

  • 读 代表的是文件内容的查看(cat)
  • 写 代表的是文件内容修改(echo/vim)
  • 执行 代表文件可以正常的进行执行(./+文件)

12.2.1.2 文件权限测试图示

12.2.1.3 文件权限测试结论

  • root用户在没有权限的时候,可以对文件进行读,写操作,执行不可以,一旦其他用户加入执行权限,root将用户处于无敌状态
  • 在测试文件读写执行权限中,文件的读权限是最重要的
  • 用户可以读取和执行为r+x
  • 用户可以读取和写入为r+w

 

12.2.2 目录系统权限的测试说明

12.2.2.1 目录权限读写执行代表的意思

  • 读 查看目录的文件信息(名称信息和属性信息)
  • 写 可以在目录里面创建,删除文件和目录
  • 执行 可以自由的切换目录

12.2.2.1 目录权限测试图示

12.2.2.2 目录权限测试结论

  • 目录在没有任何权限的时候,目录可以读写执行
  • 目录权限中,x目录最重要
  • r+x:代表的是可以查看和切换目录
  • w+x:代表的是可以创建目录和切换目录

 

12.2.3 文件读写原理执行过程

12.2.3.1 读写原理语言描述

  • 打开linux系统,进入根目录
  • 在根目录中查找对应的inode,inode查找到对应的权限,如果权限正常的情况下(r,x)
  • 可以进入到目录里面,读取文件的block信息(文件的名称信息)

 

12.2.3.2 读写原理错误解答

[oldboy@oldboyedu ~] $ cd /oldboy01

[oldboy@oldboyedu oldboy01] $ ll

total 0

dr--r--r-- 2 oldboy root 20 Sep 28 22:07 aa

[oldboy@oldboyedu oldboy01] $

[oldboy@oldboyedu oldboy01] $ ll aa

ls: cannot access aa/aa.txt: Permission denied

total 0

-????????? ? ? ? ? ? aa.txt

[oldboy@oldboyedu oldboy01] $ cd aa

-bash: cd: aa: Permission denied

[oldboy@oldboyedu oldboy01] $

上述问题出现是什么原因造成的?

首先aa目录有读权限,可以查看文件的block,造成这个原因是因为目录没有执行权限,没执行权限就不能进去目录里面,不能进去目录里面就不能获得该目录下面的文件属性(inode),所以才会出现这样的问题

12.3.3.3 读写原理示意图

12.2.4 权限默认设置说明

12.2.4.1 为什么文件和目录的默认权限为644和755

文件和目录默认权限为644和755是因为umask值影响造成的

12.2.4.2 umask值的查看

[root@oldboyedu /] # umask

0022

[root@oldboyedu /] #

12.2.4.3 uamsk的修改

12.2.4.3.1 umask的临时修改

[root@oldboyedu /] # umask 000 将umask值修改为000

[root@oldboyedu /] # touch aa.txt

[root@oldboyedu /] # ll aa.txt

-rw-rw-rw- 1 root root 0 Sep 29 16:58 aa.txt 查看文件umask值发现是666

[root@oldboyedu /] #

[root@oldboyedu /] # mkdir aa

[root@oldboyedu /] # ll aa

total 0

[root@oldboyedu /] # ll aa -d

drwxrwxrwx 2 root root 6 Sep 29 17:00 aa 查看目录umask值为777

[root@oldboyedu /] #

 

[root@oldboyedu ~] # umask 333 将umask改为333

[root@oldboyedu ~] # rm aa.txt

rm: cannot remove 'aa.txt': No such file or directory

[root@oldboyedu ~] # touch aa.txt

[root@oldboyedu ~] # ll aa.txt

-r--r--r-- 1 root root 0 Sep 29 17:05 aa.txt 文件权限为444

[root@oldboyedu ~] # mkdir bb

[root@oldboyedu ~] # ll -d bb

dr--r--r-- 2 root root 6 Sep 29 17:05 bb 目录权限为444

[root@oldboyedu ~] #

文件权限umaks为333的时候,为什么创建出来的文件默认权限为444?

文件默认权限创建出来为奇数的时候回默认加1(333)+(111)=(444)

12.2.4.3.2 umask的永久修改

在/etc/profile文件中查找出if判断语句

if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then

umask 002

else

umask 022

fi

if判断语句的说明

  • $UID 得到当前用户的ID值
  • -gn 代表用户组的ID和名称(g表示gid)
  • -un 代表用户的ID和名称(u表示uid)

12.3 用户相关的文件和目录说明

12.3.1 用户相关的文件配置说明

12.3.1.1 保存用户配置信息的文件(/etc/passwd)

avahi :x: 70: 70: Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin

tcpdump :x :72 72: : : :/sbin/nologin

oldboy :x :1019 :1019 : :/home/oldboy :/bin/bash

oldgirl :x :1020 :1020 : :/home/oldgirl :/bin/bash

01 02 03 04 05 06 07

01 用户名

02 用户密码(现在密码放不在这里了,在/etc/shadow里面,这里的x代表一个占位符)

03 用户ID

04 用户组ID

05 用户注释说明

06 用户家目录

07 用户登陆系统的方式

添加用户注释说明(-c参数)

[root@oldboyedu ~] # useradd oldboy02 -c "test oldboy" -s /bin/bash

oldboy02:x:1021:1021:test oldboy:/home/oldboy02:/bin/bash

12.3.1.2 保存用户密码信息的文件(/etc/shadow)

oldboy8 :$6$JqGtj1kh18o5/ :18159 :0 :99999 :7 : : :

oldboy9 :$6$I3UmY97DZq/ :18159 :0 :99999 :7 : : :

01 02 03 04 05 06 07 08 09

01 账户名称

02 账户密码

03 最近更改密码的时间

04 禁止修改密码的天数

05 用户必须更改的口令天数

06 警告更改密码的期限

07 不活动时间

08/09 shell命令解释器

12.3.1.3 保存用户组配置信息文件(/etc/group)

gdm :x :42 :

gnome-initial-setup :x :982 :

avahi :x :70 :

tcpdump :x :72 :

oldboy :x :1019 :

01 02 03 04

01 用户组名

02 用户组密码

03 用户组ID

04 用户组成员

 

 

12.3.1.4 保存用户组密码信息文件(/etc/gshadow)

oldboy :! : :

oldgirl :! : :

oldboy02 :! : :

01 02 03 04

01 用户组名

02 用户组密码

03 用户组管理员

04 用户组成员号

12.3.2 用户相关的目录配置说明

12.3.2.1 用户家目录模板房间

[root@oldboyedu ~] # ll -a /etc/skel

total 24

drwxr-xr-x. 3 root root 78 Sep 20 11:25 .

drwxr-xr-x. 150 root root 8192 Oct 1 09:45 ..

-rw-r--r--. 1 root root 18 Oct 31 2018 .bash_logout 设置退出用户后执行什么命令

-rw-r--r--. 1 root root 193 Oct 31 2018 .bash_profile

-rw-r--r--. 1 root root 231 Oct 31 2018 .bashrc

drwxr-xr-x 4 root root 39 Sep 20 11:25 .mozilla

[root@oldboyedu ~] #

12.3.2.2 shell提示符出现问题怎么修复

12.3.2.2.1 使用PS1修改系统提示符

export PS1='[\[\e[35;1m\]\u\[\e[31;1m\]@\[\e[36;1m\]\h \[\e[33;1m\]\W\[\e[0m\]] \[\e[34;1m\]\$ \[\e[0m\]'

12.3.2.2.2 修复自己的家目录

(1).创建损坏的家目录

mkdir /home/oldboy02

(2).修改权限为700,修改属组为oldboy02

        chmod 700 /home/oldboy02

        chown oldboy02.oldboy02 /home/oldboy02

(3).将etc/skel目录下面的配置文件拷贝过来

        cp /etc/skel/.bash* /home/oldboy02/

12.3.2.3 /etc/skel目录的作用

(1).由于skel目录下面的东西,home下面的家目录都会复制一份,所以可以写个readme文档

(2).可以在.bash_logout里面加入执行命令,在退出的时候可以自动执行

 

12.4 用户权限的提权操作

12.4.1 切换root

[root@oldboyedu ~] # su - root

Last login: Tue Oct 1 19:48:09 CST 2019 from 10.0.0.1 on pts/0

[root@oldboyedu ~] #

12.4.2 修改文件和目录的权限

12.4.2.1 chmod命令单个来修改权限

(1) u+r:修改单个用户的属主读权限

[root@oldboyedu oldboy02] # chmod a=- aa.txt

[root@oldboyedu oldboy02] # ll

total 0

d--------- 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] # chmod u+r aa.txt

[root@oldboyedu oldboy02] # ll

total 0

dr-------- 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(2) u+w:修改单个用户的属主写权限

[root@oldboyedu oldboy02] # chmod u+w aa.txt

[root@oldboyedu oldboy02] # ll

total 0

drw------- 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(3) u+x:修改单个用户的属主执行权限

[root@oldboyedu oldboy02] # chmod u+x aa.txt

[root@oldboyedu oldboy02] # ll

total 0

drwx------ 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

同样:g(group):代表用户的属组

o(other):代表其他用户

12.4.2.2 chmod命令批量修改权限

(1).利用数值进行修改

[root@oldboyedu oldboy02] # chmod 777 aa.txt aa.txt属主,属组,其他全部修改成777

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(2).利用符号a进行修改

[root@oldboyedu oldboy02] # chmod a=rwx aa.txt aa.txt属主,属组,其他全部修改成777

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(3).利用-R遍历修改

[root@oldboyedu oldboy02] # chmod -R 777 aa aa/bb/cc.txt全部修改成权限777

[root@oldboyedu oldboy02] # ll aa

total 0

drwxrwxrwx 3 root root 20 Oct 1 20:08 bb

[root@oldboyedu oldboy02] # cd bb

-bash: cd: bb: No such file or directory

[root@oldboyedu oldboy02] # cd aa/bb

[root@oldboyedu bb] # ll

total 0

drwxrwxrwx 2 root root 6 Oct 1 20:08 cc.txt

[root@oldboyedu bb] #

 

12.4.2.3 chown命令修改权限

(1).属主信息

[root@oldboyedu oldboy02] # chown oldboy01 aa.txt 将属主更换成oldboy01

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 oldboy01 root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(2).属组信息

[root@oldboyedu oldboy02] # chown .oldboy01 aa.txt 将属组更换成oldboy01(.oldboy01)

[root@oldboyedu oldboy02] # l

bash: l: command not found...

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 oldboy01 oldboy01 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(3).全部信息

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 oldboy01 oldboy01 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] # chown root.root aa.txt 将属主和属组都更换成root

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02]

 

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 root root 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] # chown oldboy01. aa.txt 将属主和属组都更换成oldboy01

 

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 root root 16 Oct 1 20:08 aa

d--------- 2 oldboy01 oldboy01 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] #

(4).属主.属组遍历(-R)

[root@oldboyedu oldboy02] # chown -R oldboy01. aa aa目录下面的所有文件和目录都更换成 oldboy01的属主和属组

[root@oldboyedu oldboy02] # ll

total 0

drwxrwxrwx 3 oldboy01 oldboy01 16 Oct 1 20:08 aa

d--------- 2 oldboy01 oldboy01 6 Oct 1 20:00 aa.txt

[root@oldboyedu oldboy02] # ll -d aa/bb

drwxrwxrwx 3 oldboy01 oldboy01 20 Oct 1 20:08 aa/bb

[root@oldboyedu oldboy02] # ll aa/bb/cc.txt

total 0

[root@oldboyedu oldboy02] # cd aa/bb/cc.txt

[root@oldboyedu cc.txt] # ll

total 0

[root@oldboyedu cc.txt] # ls

[root@oldboyedu cc.txt] # cd ..

[root@oldboyedu bb] # ls

cc.txt

[root@oldboyedu bb] # ll

total 0

drwxrwxrwx 2 oldboy01 oldboy01 6 Oct 1 20:08 cc.txt

[root@oldboyedu bb] #

12.4.3 sudo提权

12.4.3.1 sudo提权的方式(以/etc/passwd文件为例)

  • root:给什么用户提权
  • ALL=(ALL):进行权限的集中管理
  • ALL:给用户具体什么权限

(1).使用命令visudo,找到100行左右

99 ## Allow root to run any commands anywhere

100 root ALL=(ALL) ALL

101

102 ## Allows members of the 'sys' group to run networking, software,

103 ## service management apps and more.

104 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

105

106 ## Allows people in group wheel to run all commands

107 %wheel ALL=(ALL) ALL

108

109 ## Same thing without a password

110 # %wheel ALL=(ALL) NOPASSWD: ALL

(2).普通用户设置sudo提权方式

[oldboy01@oldboyedu ~] $ cat /etc/passwd 普通用户无法查看用户信息文件

cat: /etc/passwd: Permission denied

[oldboy01@oldboyedu ~] $ cat /etc/passwd

cat: /etc/passwd: Permission denied

[oldboy01@oldboyedu ~] $

 

root ALL=(ALL) ALL

oldboy01 ALL=(ALL) /bin/cat /etc/passwd sudo授予普通用户查看/etc/passwd的权限

## Allows members of the 'sys' group to run networking, software,

 

[oldboy01@oldboyedu ~] $ sudo cat /etc/passwd 普通用户提权查看用户信息文件

[sudo] password for oldboy01:

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

daemon:x:2:2:daemon:/sbin:/sbin/nologin

adm:x:3:4:adm:/var/adm:/sbin/nologin

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

operator:x:11:0:operator:/root:/sbin/nologin

 

(3).使用免密码的方式来sudo切换

根据上面的截图发现不能免密码查看,怎么设置免密码

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

oldboy01 ALL=(ALL) NOPASSWD:/bin/cat /etc/passwd,/bin/cat /etc/* 加上NOPASSWD则可以

 

oldboy01@oldboyedu ~] $ sudo cat /etc/selinux/config 查看/etc/selinux/config现在查看就不需要密码了

 

# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

# enforcing - SELinux security policy is enforced.

# permissive - SELinux prints warnings instead of enforcing.

# disabled - No SELinux policy is loaded.

SELINUX=disabled

# SELINUXTYPE= can take one of three values:

# targeted - Targeted processes are protected,

# minimum - Modification of targeted policy. Only selected processes are protected.

# mls - Multi Level Security protection.

SELINUXTYPE=targeted

12.4.3.2 sudo常用的命令总结

sudo -l                            查看sudo权力

[oldboy01@oldboyedu ~] $ sudo -l

Matching Defaults entries for oldboy01 on oldboyedu:

!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR

LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT

LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET

XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

 

User oldboy01 may run the following commands on oldboyedu:

(ALL) NOPASSWD: /bin/cat /etc/passwd, /bin/cat /etc/*

[oldboy01@oldboyedu ~] $

sudo -k                            清除sudo密码缓存

visudo -c                            检测sudo配置文件语法是否正常

[root@oldboyedu bb] # visudo -c

/etc/sudoers: parsed OK

[root@oldboyedu bb] #

12.4.3.3 sudo面试题

赋权的时候错误的赋权方式,导致出现的问题

 

 

上述赋权会导致普通用户也可以执行一些危险的命令,比如vim,rm,visudo

 

[oldboy01@oldboyedu ~] $ sudo vi /etc/sudoers visudo正常使用,这样也就是给了用户root权限一样

# Sudoers allows particular users to run various commands as

## the root user, without needing the root password.

##

## Examples are provided at the bottom of the file for collections

## of related commands, which can then be delegated out to particular

## users or groups.

##

## This file must be edited with the 'visudo' command.

 

## Host Aliases

## Groups of machines. You may prefer to use hostnames (perhaps using

## wildcards for entire domains) or IP addresses instead.

# Host_Alias FILESERVERS = fs1, fs2

# Host_Alias MAILSERVERS = smtp, smtp2

 

## User Aliases

## These aren't often necessary, as you can use regular groups

## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname

## rather than USERALIAS

# User_Alias ADMINS = jsmith, mikem

 

 

## Command Aliases

## These are groups of related commands...

 

 

解决办法:需要的时候可以进行取反操作,将危险命令排除在外

 

root ALL=(ALL) ALL

oldboy01 ALL=(ALL) NOPASSWD:/bin/*,!/bin/vim,!/usr/sbin/visudo

## Allows members of the 'sys' group to run networking, software,

## service management apps and more.

 

查看visduo在普通用户是否还能看

[oldboy01@oldboyedu ~] $ sudo visudo

Sorry, user oldboy01 is not allowed to execute '/sbin/visudo' as root on oldboyedu.

[oldboy01@oldboyedu ~] $

12.4.3.4 visudo和/etc/sudoers比较

  • 相同点:2者都是配置sudo提权的方法
  • 不同点:visudo在配置的时候如果你的语法不对,是保存不成功的,有判断机制在里面

    /etc/sudoers在配置的时候不会进行语法的校验,如果想校验需要出来,利用命令visudo -c来进行校验

12.4.4 系统特殊权限位

12.4.4.1 setuid:实现一个普通用户拥有一个命令文件的属主能力(s或者4)

[I have no name!@oldboyedu oldboy02] $ rm -rf aa 删除aa文件夹删除失败

rm: cannot remove 'aa': Permission denied

[I have no name!@oldboyedu oldboy02] $ ls

aa aa.txt

 

[root@oldboyedu ~] # chmod u+s /usr/bin/rm 增加特殊权限位s

[root@oldboyedu ~] # ll /usr/bin/rm

-rwsr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm

 

 

[I have no name!@oldboyedu oldboy02] $ rm -rf aa 再次删除发现删除成功

[I have no name!@oldboyedu oldboy02] $

有很多地方是叫拥有root能力,为什么叫实现一个用户拥有一个命令的文件属主能力,请解答?

上述例子说明rm获取了root权限,但是我现在将属主root改为一个普通用户,看下是否还能执行

(1).修改属主root为oldgirl

[root@oldboyedu ~] # chmod u+s /usr/bin/rm 修改属主为oldgirl成功

[root@oldboyedu ~] # ll /usr/bin/rm

-rwsr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm

[root@oldboyedu ~] # chown oldgirl /usr/bin/rm

[root@oldboyedu ~] # ll /usr/bin/rm

-rwxr-xr-x. 1 oldgirl root 62952 Oct 31 2018 /usr/bin/rm

[root@oldboyedu ~] #

(2).再次删除oldboy01下面的文件夹

[I have no name!@oldboyedu oldboy02] $ rm -rf aa.txt 删除失败

rm: cannot remove 'aa.txt': Permission denied

[I have no name!@oldboyedu oldboy02] $ rm -rf aa.txt

rm: cannot remove 'aa.txt': Permission denied

[I have no name!@oldboyedu oldboy02] $ rm -rf aa.txt

rm: cannot remove 'aa.txt': Permission denied

[I have no name!@oldboyedu oldboy02] $

结论

证明修改的是用户的属主能力,不是获取了root权限

12.4.4.2 setgid: 实现一个普通用户拥有一个命令文件的属组能力(s-2)

12.4.4.3 sticky bit:粘滞位(实现只有属主用户才可以对文件进行修改,删除创建操作)(t-1)

不带粘滞位创建的共享目录

(1).创建一个共享目录,并且给予777的权限

[root@oldboyedu ~] # mkdir /share

[root@oldboyedu ~] # ls

aa.txt bb

[root@oldboyedu ~] # cd /share/

[root@oldboyedu home] # chmod 777 /share/ 权限为777

[root@oldboyedu home] # ll -d /share/

drwxrwxrwx 2 root root 34 Oct 2 11:14 /share/

[root@oldboyedu home] #

 

(2).在oldboy01下面创建一个叫oldboy.txt的文件

[root@oldboyedu home] # su - oldboy01

Last login: Wed Oct 2 11:32:17 CST 2019 on pts/0

[oldboy01@oldboyedu ~] $ cd /share/

[oldboy01@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

[oldboy01@oldboyedu share] $ touch oldboy.txt oldboy01用户创建oldboy.txt文件

[oldboy01@oldboyedu share] $

[oldboy01@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:36 oldboy.txt

[oldboy01@oldboyedu share] $

 

(3).oldgirl用户查看oldboy01.txt文件

[root@oldboyedu ~] # su - oldgirl

[oldgirl@oldboyedu ~] $ ll

total 0

[oldgirl@oldboyedu ~] $ cd /share/

[oldgirl@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:36 oldboy.txt oldgirl查看到了oldboy01的文件

[oldgirl@oldboyedu share] $

 

(4).oldgirl离职了,想破坏oldboy01的文件

[oldgirl@oldboyedu share] $

[oldgirl@oldboyedu share] $ rm -rf oldboy.txt oldboy01用户写的文件删除了,这样oldboy01哭了

[oldgirl@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

[oldgirl@oldboyedu share] $

上述操作太危险了,不能这样使用,为了解决这个问题,我们现在使用粘滞位

(1).创建粘滞位权限

[root@oldboyedu share] # chmod o+t ../share/

[root@oldboyedu share] # ll -d

drwxrwxrwt 2 root root 34 Oct 2 11:41 .

[root@oldboyedu share] #

(2).oldboy01用户又将自己写好的文件放到共享目录

[oldboy01@oldboyedu ~] $ cd /share/

[oldboy01@oldboyedu share] $ ls

aa.txt bb.txt

[oldboy01@oldboyedu share] $ touch oldboy.txt

[oldboy01@oldboyedu share] $ touch oldboy01.txt

[oldboy01@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:47 oldboy01.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:47 oldboy.txt

[oldboy01@oldboyedu share] $

(3).oldgirl离职了,想破坏oldboy01的共享文件

[oldgirl@oldboyedu share] $ ll

total 0

-rw-r--r-- 1 root root 0 Oct 2 11:10 aa.txt

-rw-r--r-- 1 1003 root 0 Oct 2 11:14 bb.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:47 oldboy01.txt

-rw-rw-r-- 1 oldboy01 oldboy01 0 Oct 2 11:47 oldboy.txt

[oldgirl@oldboyedu share] $ ll -d ../share/

drwxrwxrwt 2 root root 72 Oct 2 11:47 ../share/

[oldgirl@oldboyedu share] $ rm -rf oldboy01.txt

rm: cannot remove 'oldboy01.txt': Operation not permitted 删除失败,OMG,这个共享目录太牛逼了,放弃了

[oldgirl@oldboyedu share] $ rm -rf oldboy.txt

rm: cannot remove 'oldboy.txt': Operation not permitted

[oldgirl@oldboyedu share] $

12.4.5 文件加锁与解锁

12.4.5.1 加锁命令

[root@oldboyedu scripts] # chattr +i /etc/passwd

[root@oldboyedu scripts] # echo aa >>/etc/passwd

-bash: /etc/passwd: Permission denied

[root@oldboyedu scripts] #

12.4.5.2 解锁命令

[root@oldboyedu scripts] # chattr -i /etc/passwd

[root@oldboyedu scripts] # lsattr /etc/passwd

---------------- /etc/passwd

[root@oldboyedu scripts] # echo aa >>/etc/passwd

[root@oldboyedu scripts] # tail -1f /etc/passwd

aa

12.4.5.3 查看是否加锁了

[root@oldboyedu scripts] # lsattr /etc/passwd

----i----------- /etc/passwd

You have new mail in /var/spool/mail/root

[root@oldboyedu scripts] #

12.4.5.4 怎么让自己的文件安全

12.4.5.4.1 将命令移动到一个只能自己知道的目录里面

[root@oldboyedu scripts] # which lsattr chattr

/usr/bin/lsattr

/usr/bin/chattr

[root@oldboyedu oldboy02] # mv /usr/bin/{lsattr,chattr} /oldboy02

[root@oldboyedu oldboy02] # ll

total 24

-rwxr-xr-x. 1 root root 11616 Oct 31 2018 chattr

-rwxr-xr-x. 1 root root 11600 Oct 31 2018 lsattr

You have new mail in /var/spool/mail/root

[root@oldboyedu oldboy02] #

12.4.5.4.2 在将命令改成自己知道的名字

[root@oldboyedu oldboy02] # mv lsattr ls_attr_lyx 修改lsarrt名字

You have new mail in /var/spool/mail/root

[root@oldboyedu oldboy02] # mv chattr ch_attr_lyx 修改chattr名字

[root@oldboyedu oldboy02] # ll

total 24

-rwxr-xr-x. 1 root root 11616 Oct 31 2018 ch_attr_lyx

-rwxr-xr-x. 1 root root 11600 Oct 31 2018 ls_attr_lyx

[root@oldboyedu oldboy02] # chattr +i /etc/passwd 使用命令发现找不到

-bash: /usr/bin/chattr: No such file or directory

[root@oldboyedu oldboy02] # /oldboy02/ch_attr_lyx +i /etc/passwd 使用你自己设置的路径发现更改成功

[root@oldboyedu oldboy02] # lsattr /etc/passwd 使用命令发现找不到

-bash: /usr/bin/lsattr: No such file or directory

[root@oldboyedu oldboy02] # /oldboy02/ls_attr_lyx /etc/passwd 使用你自己设置的路径发现更改成功

----i----------- /etc/passwd

[root@oldboyedu oldboy02] #

12.4.6 如何集中管理用户权限

12.4.6.1 sudo提权和跳板机权限的管理不同

sudo提权

用户先访问服务器,在服务器再去访问一台叫管理的服务器(sudo服务器)

跳板机

用户访问跳板机,将信息给跳板机,跳板机会判断你要访问哪台服务器,进而给你连接到哪台服务器

12.5 用户常见的问题

12.5.1 切换用户报找不见用户ID

原因:是因为/etc/apsswd没给其他用户读取权限造成的

解决办法

(1).给/etc/passwd添加读取权限644

[root@oldboyedu home] # chmod 644 /etc/passwd 添加644读取权限

[root@oldboyedu home] # ll /etc/passwd

-rw-r--r-- 1 root root 2361 Oct 2 11:19 /etc/passwd

[root@oldboyedu home] #

(2).给/etc/shadow添加读取权限000

[root@oldboyedu home] # chmod 000 /etc/shadow 添加644读取权限

[root@oldboyedu home] # ll

total 0

d--------- 5 oldboy01 oldboy01 128 Oct 2 11:23 oldboy01

[root@oldboyedu home] # ll /etc/shadow

-rw-r--r-- 1 root root 1187 Oct 2 11:19 /etc/shadow

[root@oldboyedu home] #

(3).切换用户查看是否正常

[root@oldboyedu home] # su - oldboy01 用户切换成功

Last login: Wed Oct 2 11:22:26 CST 2019 on pts/0

[oldboy01@oldboyedu ~] $

12.5.2 用户删除不干净在重新添加用户的时候

原因:用户删除不彻底造成的

解决办法

(1).在/home目录下面找到这个用户对应的ID

[root@oldboyedu ~] # ll -d /home/oldgirl/

drwx------ 5 1001 1001 128 Oct 2 11:52 /home/oldgirl/ 查看oldgirl目录下面的ID1001

[root@oldboyedu ~] #

(2).重新指定最新创建的oldgirl用户为1001

[root@oldboyedu ~] # userdel oldgirl

[root@oldboyedu ~] # useradd oldgirl -u 1001 指定oldgirl为用户家目录下面的ID

useradd: warning: the home directory already exists.

Not copying any file from skel directory into it.

Creating mailbox file: File exists

[root@oldboyedu ~] # id oldgirl

uid=1001(oldgirl) gid=1001(oldgirl) groups=1001(oldgirl)

[root@oldboyedu ~] #

(3).再次测试oldgirl用户是否登录正常

[root@oldboyedu ~] # su - oldgirl

[oldgirl@oldboyedu ~] $ pwd

/home/oldgirl

[oldgirl@oldboyedu ~] $ touch aa.txt oldgirl用户已经正常

[oldgirl@oldboyedu ~] $ ll

total 0

-rw-rw-r-- 1 oldgirl oldgirl 0 Oct 2 12:11 aa.txt

[oldgirl@oldboyedu ~] $

(4).在彻底删除oldgirl

[root@oldboyedu ~] # userdel -r oldgirl 测试已经没有oldgirl用户的信息

[root@oldboyedu ~] # ll -d /home/oldgirl

ls: cannot access /home/oldgirl: No such file or directory

[root@oldboyedu ~] # grep "oldgirl" /etc/passwd

[root@oldboyedu ~] # grep "oldgirl" /etc/group

[root@oldboyedu ~] #

12.6 用户相关的命令

12.6.1 useradd(添加用户)

  • -u                                    指定用户属主的ID
  • -g                                    指定用户主要组是哪个
  • -G                                    指定用户次要组是哪个
  • -M                                    不创建家目录
  • -m                                    指定用户的家目录
  • -c                                    指定用户的注释信息
  • -s                                    指定用户的登陆方式
  • -d                                    指定创建的用户家目录路径

 

12.6.2 userdel(删除用户)

  • -r                                    彻底删除用户

12.6.3 usermod(更新用户信息)

  • -u                                    指定用户属主的ID
  • -g                                    指定用户主要组是哪个
  • -G                                    指定用户次要组是哪个
  • -c                                    指定用户的注释信息
  • -s                                    指定用户的登陆方式

 

12.6.4 groupadd(添加用户组)

-g                                        指定用户的主要组是哪个

12.6.5 groupdel(删除用户组)

12.6.6 groupmod(修改用户组)

-g                                        指定用户的主要组是哪个

12.6.7 chmod(单个与批量修改权限)

  • 单个
  • u+rwx                            添加指定用户属主权限为rwx
  • g+rwx                            添加指定用户属组权限为rwx
  • o+rwx                            添加指定其他用户权限为rwx
  • u-rwx                            减去指定用户属主权限为rwx
  • g-rwx                            减去指定用户属组权限为rwx
  • o-rwx                            减去指定其他用户权限为rwx
  • 批量
  • a=rwx                            将属主属组其他设置为rwx,不管以前是什么
  • a+rwx                            添加属主,属组,其他为rwx
  • a-rwx                            减去属主,属组,其他为rwx
  • 777                                用数字的方法写出批量修改的方法

12.6.8 chown(修改属主,属组)

  • chown oldboy 文件                    修改属主为oldboy
  • chown oldboy. 文件                    修改属主,属主为oldboy
  • chown .oldboy 文件                    修改属组为oldboy
  • chown oldboy.oldboy 文件                修改属主,属组为oldboy

12.6.9 passwd(修改密码)

passwd 用户                                交互式的修改密码

echo 密码| passwd –stdin 用户                免交互式修改密码

12.6.10 id(查看用户ID信息)

id 用户                                    查看用户的ID信息

id -g                                        查看用户属组的ID

id -u                                        查看用户属主的ID

id -un                                    查看用户属主的名称

id -gn                                    查看用户属组的名称

 

12.6.11 w(查看负载情况和用户登陆的情况)

[root@oldboyedu ~] # w

12:43:27 up 2:15, 2 users, load average: 0.00, 0.01, 0.05

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root pts/1 10.0.0.1 12:07 7.00s 0.11s 0.01s w

root pts/0 10.0.0.1 10:40 55:51 0.73s 0.05s -bash

[root@oldboyedu ~] #

12.6.12 last(显示用户曾经登陆的信息)

last reboot                                查看这个用户最近的关机情况

12.6.13 lastlog(显示所有用户曾经登陆的信息)

lastlog reboot                                查看所有用户最近的关机情况

 

posted @ 2019-11-30 15:40  HXX-LYX  阅读(208)  评论(0编辑  收藏  举报