接四。
我在想普通用户可以像这样吗?,上面是root是所有者。
![](https://i-blog.csdnimg.cn/blog_migrate/5fa41c831e397a407aef324a0ef53591.png)
![](https://i-blog.csdnimg.cn/blog_migrate/81b61603c100d44a8969421fc703b9ed.png)
可以看到lcl还是被拒绝了。
![](https://i-blog.csdnimg.cn/blog_migrate/c49291b33d6aadb7b074bccf3a7e83e8.png)
![](https://i-blog.csdnimg.cn/blog_migrate/152b811f2f920463a6f3c0b823f501aa.png)
上面是root在属组里。下面root在o里。
![](https://i-blog.csdnimg.cn/blog_migrate/2ce95687062e40810fa13bbd5fae5f9a.png)
root依旧是霸道横行,毫不讲理,总结上面几张图,root用户的权限还应该增加一条,无论root在u,g,还是o里,我的是我的,你们的(g,o的权限)也是我的,我猜想root用户的权限可能是ugo或的结果,那么当chmod u-x之后,root也无法执行/bin/cat就是自然的咯,而在没有u-x之前,是可以看的。
![](https://i-blog.csdnimg.cn/blog_migrate/488e46fa19514a4ae3e6e60c203985c4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ebd0f450f00610bca0cba75f036b502a.png)
从上面的图可以看到chown命令之后flags就会消失。其实也不是因为所有者变化了,后面把u从root由改回去lcl,还是一样没有flags。对root也是一样。
![](https://i-blog.csdnimg.cn/blog_migrate/48d83eff4692698c0cfcabfa927f3232.png)
![](https://i-blog.csdnimg.cn/blog_migrate/38031bf7fffea5007cc9263883038c3a.png)
提权
![](https://i-blog.csdnimg.cn/blog_migrate/a24f51c087570c1e3c2ef604a886d707.png)
suid上面已经讲了很多了。图片里说都是以root执行,这个问题我们上面纠正过了,不过没有举例子,来举一个例子。
![](https://i-blog.csdnimg.cn/blog_migrate/0c71e11afc51e6808e337a26c9bd9576.png)
![](https://i-blog.csdnimg.cn/blog_migrate/3e6be2436b7c119c586d0c8bd489d006.png)
root还是依旧的不要脸。
![](https://i-blog.csdnimg.cn/blog_migrate/5d3b2d49e52457fdf3ea05dcade952ba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8e3c7585776f6cfc699343180392e5f1.png)
可以看到lcl改密码的时候进程的uid就是lcl,但是由于lcl没有/etc/shadow的写权限,所以失败了。我现在给lcl加了一个w权限
![](https://i-blog.csdnimg.cn/blog_migrate/de2ea4efdf697ce0f045421ed3f9faf6.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e6f050fb0b89ab0854b491c2b852fafa.png)
![](https://i-blog.csdnimg.cn/blog_migrate/84c4e10a0cdd7e47c3dccdf430a8b683.png)
确实是以文件所有和uid在跑进程。但是密码最后还是修改失败了。
![](https://i-blog.csdnimg.cn/blog_migrate/589f6329cabe4361d12877243fa22370.png)
这个说明其实改密码没有那么简单的。不是你在/etc/shadow加个写权限就能完成的,还需要其它操作,如果想知道还有什么其它操作,可以到
https://www.bilibili.com/video/av18945696/?p=4,前10分钟。
以上内容来自https://www.bilibili.com/video/av18945696?p=12。
前10分钟就可以了。
下面介绍提权的另一种方法sudo(super user do)
![](https://i-blog.csdnimg.cn/blog_migrate/e97596fd42aeedb5992fe79c3b9d77b5.png)
为什么给了一个浩克的图呢?这是一个比喻,普通用户“发怒”的时候可以行驶超级用户的权限(班纳博士变浩克),怎么做呢?前面我还曾经吐槽过。首先我们先来对比一下:
![](https://i-blog.csdnimg.cn/blog_migrate/7ce15565616f74403d2554febd732b12.png)
为什么lcl可以sudo,而a1不可以呢?看到原因是a1不在sudoers文件里面。这个文件在哪里呢?一般都会在/etc里面。确实有/etc/sudoers。我们可以简单visudo就打开。(visudo 的效果相当于vim /etc/sudoers,切到扩展命令模式:q可以退出)。
![](https://i-blog.csdnimg.cn/blog_migrate/06155d31826e4ba78dd65b04821b1939.png)
这两行的意思是 wheel组的用户可以在任何地方,以任何用户执行任何权限,但是需要输入这个用户的密码。下一行有个前面加注释#的那一行的区别是,不需要输密码。先来试一下,改为:
![](https://i-blog.csdnimg.cn/blog_migrate/e98116c5a165c35234ffc46e7161d176.png)
就真的不用输密码了。
![](https://i-blog.csdnimg.cn/blog_migrate/8a5a8d3ad18c591f9f543a9d3c25f555.png)
那么也就是说,只要把用户加入wheel组里,我们就可以用sudo为所欲为了。但是怎么加入sudo呢?我们需要useradd或者usermod。
![](https://i-blog.csdnimg.cn/blog_migrate/24acae2693b2e990f2d58cc6a7402c4b.png)
这两个命令都在sbin里只有有root权限的人才可以执行。而且/etc/sudoers和etc/group只有root才有写的权限。所以普通用户如果没有不是root的亲信(可以把wheel组的人看作是root的亲信)是不可能修改上面的配置文件的,这样我们可以理解为什么sudo的时候只需要输自己的密码而不是root的密码,因为是root的亲信嘛,root很信任它们。(当然我们甚至可以改为不用输任何密码)。我们演示一下普通用户成为root亲信的过程。
![](https://i-blog.csdnimg.cn/blog_migrate/66ad6b62bd3dc5ac30d40df14029e42b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e163ef906e5896f7b59548069db44b47.png)
less和more
前面我们一直用cat看文件,但是其实一般用的更多的是less,more稍微简单一些,不过我觉得用vim就行了,想了解less和more的可以看,
https://www.cnblogs.com/lidabo/p/6196457.html。
补充
主要是列出一些漏掉的知识,前面用过很多次的就简单复习一下。
![](https://i-blog.csdnimg.cn/blog_migrate/dc6422db6b5db911444974e1fe52dfc5.png)
一个用户可以在多个组里,这其实我们都知道,最上面的superuser就是root,它是一个超级用户,很霸道。组是一个逻辑容器。访问文件的是进程,用户执行程序产生进程,进程会有一个uid和gid,那么进程会有相应的权限,当然还有高级权限setuid和setgid是可以提权的。为什么要创建组?因为如果你想对几个用户批量赋予权限,那么建立组效率会很高。
![](https://i-blog.csdnimg.cn/blog_migrate/769da58069dc4e05071a19c02259b98b.png)
Linux看到的是uid和gid,root的uid和gid都是0。uid和gid是可以一样的,因为它们的表示意义不同,不会互相影响。
![](https://i-blog.csdnimg.cn/blog_migrate/d9589eecd1f25819b26293c7d08680b1.png)
主组和附加组
这一块是新的内容,我们来看一下。
![](https://i-blog.csdnimg.cn/blog_migrate/91c61eb1edc6160041a2593982de7c57.png)
我们看到lcl是属于两个组的,但是gid只有一个,gid后面的我们称之为主组,groups里除了主组之外的成为附加组。我们前面一直在用的-G其实是加入附加组的意思。suppelementary是附加的意思,primary是主要的意思。-g才是改变主组的意思,我们创建用户的时候默认的主组都是和自己重名的组,因为用户必须属于一个主组,刚创建的时候如果不指定主组,那么就会是默认设置。
![](https://i-blog.csdnimg.cn/blog_migrate/17ee089423b5f071b8c23800d4ca19e4.png)
为什么要有主组和附加组呢?前面说过因为gid只有一个,那么主组和附加组的待遇能一样嘛?肯定是不能的对吧,应该以主组优先啊,因为gid就是主组的啊。当然,通过前面的学习,我们知道wheel这个组还有些特殊的,都是root的亲信或者走狗,里面的用户可以使用sudo命令,有了sudo,除了文件的x,其它都不是事,而且还可以拿别人的x来用,可谓是真不要脸。但是前面没有举过相应的例子,这里就举一下:
![](https://i-blog.csdnimg.cn/blog_migrate/dbf77cc1c2fbb4dd14ac6ff77c60b087.png)
![](https://i-blog.csdnimg.cn/blog_migrate/fef67a77cb7c86ca420b4e834f62ff6a.png)
看到这个sudo还有有点奇葩的,改密码用了两个进程,我们前面用setuid提权的方式只有一个进程。就像这样:
![](https://i-blog.csdnimg.cn/blog_migrate/b7e640af935be101b227817c140b6770.png)
![](https://i-blog.csdnimg.cn/blog_migrate/5667f0f9054b37d830a0ef7c1687f8fa.png)
主组优先,我们来看一个例子。首先呢,创建一个用户li,把它加入root组。
![](https://i-blog.csdnimg.cn/blog_migrate/d2fc09cb46695cf04f841a876f7a7cdc.png)
然后改root为主组。
![](https://i-blog.csdnimg.cn/blog_migrate/096a6658a3c7c78a1dde13ee3ed8cb7a.png)
上面看看出来一个事情,root组和root可是大相径庭。root可以为所欲为,但是root组里的用户不行,因为看到上面3的oot组对没有r权限时,主组是root的li还是没办法读3文件。直到我们给root组读权限之后,cat 3才没有报错。嘛,这样的安排还算合理,已经有root和root的走狗(wheel里的sudoers)可以对除了文件的x为所欲为了,如果再让root的家人(root组的成员)为所欲为,怕不是要天下大乱。root和root组权限不同也可以理解,因为先判断的是u,如果用户是root,就停止了,就像逻辑短路,后面是不是root组根本就不会判断到。看到上面会给人一种感觉,就是似乎附加组一点用都没有(目前学过的除了wheel)。
然而呢,在facl方式里的确有用。li的主组是root,li只是附加组。
![](https://i-blog.csdnimg.cn/blog_migrate/7e4f1511fb545a1c93c7950d8502ee21.png)
我们给li组一个读的权限,就可以读了,把li组的权限删除,cat 3就会又被拒绝。
![](https://i-blog.csdnimg.cn/blog_migrate/863b9807958739c8d46fe6f9b3f984e9.png)
说明附加组只要在facl方式中才可以起作用,如果主组没有权限,看附加组的,就相当于是取所有属组权限的或。而在ugo方式里附加组归在o里面的,因为只有ugo,不是u,不是g,自动归到o里。主组和附加组就说到这里。
每一个进程都有一个用户yum -y install httpd的例子前面已经说过了,主要是为了说明不是所有进程的启动者都是root。
![](https://i-blog.csdnimg.cn/blog_migrate/f1db796c27eba0307b55e0f7c7a2c280.png)
上面还告诉了我们/etc/passwd的读法,大家自己看看就行了。
![](https://i-blog.csdnimg.cn/blog_migrate/fb15c42e0234ecb9db852dd26723f1f5.png)
注意下面的系统约定是centos6的,7里面1000开始都是普通用户,安装centos的时候设的lcl的id是1000。
![](https://i-blog.csdnimg.cn/blog_migrate/792eb401256e7e7be15c7ed02b2151f7.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0444958d367c3daf3bf45ab711c3fbfc.png)
不过系统用户和普通用户在权限上没有什么区别,只有root才是superuser。第二条,所有权力当然我们知道也不太准确,程序文件的x还是有一些限制的。第三条可以理解为,我的是我的,你的还是我的,看过前面的都知道是什么意思了。
![](https://i-blog.csdnimg.cn/blog_migrate/6c391d69bf00e63acb5d82cfa267cfbe.png)
前面也说过/etc/shadow里面的密码是加密过的,这里给出了加密方式。
![](https://i-blog.csdnimg.cn/blog_migrate/90bff35e71cc86bc3111a2f2b1b7ad35.png)
创建用户和组我们都知道了,如何删除?上面给出了答案。
![](https://i-blog.csdnimg.cn/blog_migrate/d84852e208fe224a01fbb8355918cc6b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/877292ef6a4b06e2c7a4c197e7ba7276.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4d8b34f106c9573c9d616c670fd2df34.png)
grep过滤函数我们就稍微看一下用法:
![](https://i-blog.csdnimg.cn/blog_migrate/c92c366ec96aaa40c618e1910919451b.png)
这个pattern和python里面的pattern差不多,最好是r'',还有里面可以用正则表达式,比如^l,表示以l开头。这里再稍微补充一下上面漏掉的一个内容。
![](https://i-blog.csdnimg.cn/blog_migrate/3156cafc4947ae9bcea0f43cda87620e.png)
前面说过/etc/group里面存着组的信息,但是我们还想有的组后面没有成员,怎么回事呢?
![](https://i-blog.csdnimg.cn/blog_migrate/3156cafc4947ae9bcea0f43cda87620e.png)
有两种可能,第一,组里确实没有成员,比如a1组。因为我们认为把a1的主组改了。还有可能这个组是和自己重名的用户的主组,就比如a2。如果组后面对应有成员,应该是这个组是后面成员的附加组,当然也有奇葩,就是lcl,lcl组后面还显示了lcl用户,这大概是lcl是因为安装虚拟机系统的时候设置的用户的缘故。下面是chage的用法,看到它是对修改密码天数间隔的一个限制。
![](https://i-blog.csdnimg.cn/blog_migrate/8006b2cf49c22861adf66ce43e999316.png)
![](https://i-blog.csdnimg.cn/blog_migrate/19d6cba30d1fa26f02c9e91e9e411092.png)
![](https://i-blog.csdnimg.cn/blog_migrate/531faf3eec8eac0e3b0f0093a40300de.png)
![](https://i-blog.csdnimg.cn/blog_migrate/41785a99d3c1b9f987f55a0b3a5b14ef.png)
关于shell用/sbin/nologin这个结果,你可以去
https://www.bilibili.com/video/av18740388/?p=6
43分开始看,我就不演示了,目前知道它是没办法在Xshell上用的就够了。
需要注意的是usermod 和gpasswd后面组和用户的顺序是反的。英文应该是没什么问题了。
![](https://i-blog.csdnimg.cn/blog_migrate/8e8c275591578bafc3c5271635f86f74.png)
其实还可以暴力添加和删除,vim /etc/group直接去修改也是可以的。
没改之前:
![](https://i-blog.csdnimg.cn/blog_migrate/ba757d3d0a1fc57f3a7385e40d401b75.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e4eb720332e2fc27a55eb753df487f22.png)
之后
![](https://i-blog.csdnimg.cn/blog_migrate/18dc41f5a4e31ef12e50436e1830d699.png)
![](https://i-blog.csdnimg.cn/blog_migrate/e767294854d3024fcf23fab23aa79faf.png)
删除也可以用类似的办法。其它的命令就不演示了,也很好理解,你们可以自己去试试。
以上是来自https://www.bilibili.com/video/av18740388/?p=9的补充。
![](https://i-blog.csdnimg.cn/blog_migrate/37c6a68c3a5de530cc052a5ced5073cd.png)
touch是创建空文件,路径可以是绝对路径或者相对路径,要注意的是touch /home/file5 file6的意思是file6是创建在当前目录的,它是相对路径,而不是在/home,但是{}就不一样。
![](https://i-blog.csdnimg.cn/blog_migrate/d1fa90f302c248875d7e257dbf431fed.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b64edc1914de4871eb1cef7d74eccc38.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a747b9ca5db11b11bfea903d4684b39f.png)
mkdir -p我们知道是递归创建,就是如果父目录没有,它帮你创建,-v呢?
![](https://i-blog.csdnimg.cn/blog_migrate/c95cb5093021c16d27a09e65dd1dc15f.png)
似乎并没有什么意思,就是多了一个提示而已,不过这样不容易出错了,按照自己喜好来吧,-v可要可不要。
![](https://i-blog.csdnimg.cn/blog_migrate/b57ca3a1b1f7d7e05ccf1459628e1cd3.png)
对于cp来说-v也只是起到一个提示的作用,也可以不要。
![](https://i-blog.csdnimg.cn/blog_migrate/7a743be35b84f6ad553d4da8de811343.png)
举一个例子
![](https://i-blog.csdnimg.cn/blog_migrate/87a931deef97fedf25308cc8ad46ab57.png)
可以看到复制哪个文件是需要哪个文件的读权限的。按理说应该只需要文件复制目的地的w权限就可以了,不过我发现必须wx都有才能成功,不过这不是个例,其实是我们前面研究的还不够,在目录里创建和删除文件必须同时有wx才可以成功。
![](https://i-blog.csdnimg.cn/blog_migrate/63e173fccd265bc5a8e8350fc8b8701d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/42e723b6b909b53ac6347e9de05acbe4.png)
如果一个目录只有w权限,是没有办法创建和删除文件的(不举root用户的原因大家应该心知肚明)。
![](https://i-blog.csdnimg.cn/blog_migrate/eb3c48ef9337f66ae4b68e13d5a5f2ad.png)
只有x权限也不可以创建和删除文件。
![](https://i-blog.csdnimg.cn/blog_migrate/efb1278423ea758ede2cbc2565ec7fc8.png)
这里补了前面很大的一个知识漏洞,为什么文件删除和创建必须要wx同时都有呢?要w这个没什么好说的,为什么还要有x呢?我是这么理解的,touch cf/wo,这个命令里本身就有访问cf目录的含义,所以有x也应该的(可能你会觉得有点牵强)。
![](https://i-blog.csdnimg.cn/blog_migrate/def76499fbf7c38a036a2d83ec95576e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/4cbe45c2349c91152a02604a197cbb7b.png)
复制目录的时候,需要加一个-r,不管目录是不是空的。如果要复制的目录是空的,可以没有x权限,如果不是空的,则必须有x权限。
![](https://i-blog.csdnimg.cn/blog_migrate/67355ca59186da5aa577894d6de9ffff.png)
lcl没有对wqn空文件夹的x权限也可以移动,但是对有内容的666是不行的,lcl必须有666的x权限才可以复制。
![](https://i-blog.csdnimg.cn/blog_migrate/07a15ca3fc4411828a98fc8f431fb90e.png)
cp 文件1 文件2也是可以的。
![](https://i-blog.csdnimg.cn/blog_migrate/5ea0e9fa1b897d25ae86b08ac3ae0c1a.png)
就是新建一个2文件,把1的内容,权限等等信息都拷贝过来。
![](https://i-blog.csdnimg.cn/blog_migrate/0e1fcb6bf9f393bf451f780b404a4eba.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2226fb69bebb45ea33488f6a460e9fec.png)
移动就是剪切了,剪切的过程是要先删除,后创建,所以对目录权限的要求都是要求有wx的。
![](https://i-blog.csdnimg.cn/blog_migrate/400863fda24b7506ba854c75c35acaf3.png)
其它操作看一看图吧,我觉得后面写的解释很清楚了。rm加-f就是不会再问你了,不然就会很烦,会一直问你。
![](https://i-blog.csdnimg.cn/blog_migrate/acbe5c928b41e7cc11003c1d00866838.png)
不要轻易用rm -rf /*,很危险。下面可以删除整个根目录,当然不要作死。
![](https://i-blog.csdnimg.cn/blog_migrate/7b430093b4f1d7b3cf273b34c13e5aff.png)
删除文件最好用相对路径,不然-r后果很严重。
![](https://i-blog.csdnimg.cn/blog_migrate/c53c38773dc010bcba714756fa8e8665.png)
![](https://i-blog.csdnimg.cn/blog_migrate/ea01066c718befa76f404d27b36ed217.png)
![](https://i-blog.csdnimg.cn/blog_migrate/769a50dd6010985637f5da196c9226ec.png)
我们要查看的是文本文件,前面其实也演示过,如果看二进制文件会有乱码。file 可以看文件类型。
![](https://i-blog.csdnimg.cn/blog_migrate/ecb9da67fa6f4ea0b6d7356ba136dbd1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0311ade036520f80debbdfe0e97a9c05.png)
![](https://i-blog.csdnimg.cn/blog_migrate/574dc01047cf3655e271cd6e76da78bc.png)
less已经介绍过了。head,tail看指定的前面几行和后面几行,不写默认都是10行。
![](https://i-blog.csdnimg.cn/blog_migrate/5dd4173345a63122ac2666209bcf3095.png)
动态查看就是会更新的。动态查看只有^c退出了。taif=tail -f。
![](https://i-blog.csdnimg.cn/blog_migrate/c3b539749dfd1c557e1636c0f1171213.png)
![](https://i-blog.csdnimg.cn/blog_migrate/be40a198495a76927eaece228fd0b4c1.gif)
grep可以对文本文件内容过滤,格式前面也介绍过了。
![](https://i-blog.csdnimg.cn/blog_migrate/5a731116502e91ff16bdb59fbe13b943.png)
以上来自
https://www.bilibili.com/video/av18740388/?p=9
45分钟开始有一个复杂的命令,有点意思的,不过还没学到,是进程管道的内容。