学好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目录下面的ID为1001
[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 查看所有用户最近的关机情况