首页 文章 精选 留言 我的

精选列表

搜索[伪集群],共10000篇文章
优秀的个人博客,低调大师

Hadoop概念学习系列之Java调用Shell命令和脚本,致力于hadoop/spark集群(三十六)

前言 说明的是,本博文,是在以下的博文基础上,立足于它们,致力于我的大数据领域! http://kongcodecenter.iteye.com/blog/1231177 http://blog.csdn.net/u010376788/article/details/51337312 http://blog.csdn.net/arkblue/article/details/7897396 第一种:普通做法 首先,编号写WordCount.scala程序。 然后,打成jar包,命名为WC.jar。比如,我这里,是导出到windows桌面。 其次,上传到linux的桌面,再移动到hdfs的/目录。 最后,在spark安装目录的bin下,执行 spark-submit \ > --class cn.spark.study.core.WordCount \ > --master local[1] \ > /home/spark/Desktop/WC.jar \ > hdfs://SparkSingleNode:9000/spark.txt \ > hdfs://SparkSingleNode:9000/WCout 第二种:高级做法 有时候我们在Linux中运行Java程序时,需要调用一些Shell命令和脚本。而Runtime.getRuntime().exec()方法给我们提供了这个功能,而且Runtime.getRuntime()给我们提供了以下几种exec()方法: 不多说,直接进入。 步骤一: 为了规范起见,命名为JavaShellUtil.java。在本地里写好 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class JavaShellUtil { public static void main(String[] args) throws Exception { String cmd="hdfs://SparkSingleNode:9000/spark.txt"; InputStream in = null; try { Process pro =Runtime.getRuntime().exec("sh /home/spark/test.sh "+cmd); pro.waitFor(); in = pro.getInputStream(); BufferedReader read = new BufferedReader(new InputStreamReader(in)); String result = read.readLine(); System.out.println("INFO:"+result); } catch (Exception e) { e.printStackTrace(); } } } package cn.spark.study.core import org.apache.spark.SparkConf import org.apache.spark.SparkContext /** * @author Administrator */ object WordCount { def main(args: Array[String]) { if(args.length < 2){ println("argument must at least 2") System.exit(1) } val conf = new SparkConf() .setAppName("WordCount") // .setMaster("local");//local就是 不是分布式的文件,即windows下和linux下 val sc = new SparkContext(conf) val inputPath=args(0) val outputPath=args(1) val lines = sc.textFile(inputPath, 1) val words = lines.flatMap { line => line.split(" ") } val pairs = words.map { word => (word, 1) } val wordCounts = pairs.reduceByKey { _ + _ } wordCounts.collect().foreach(println) wordCounts.repartition(1).saveAsTextFile(outputPath) } } 步骤二:编写好test.sh脚本 spark@SparkSingleNode:~$ cat test.sh #!/bin/sh /usr/local/spark/spark-1.5.2-bin-hadoop2.6/bin/spark-submit \ --class cn.spark.study.core.WordCount \ --master local[1] \ /home/spark/Desktop/WC.jar \ $1 hdfs://SparkSingleNode:9000/WCout 步骤三:上传JavaShellUtil.java,和打包好的WC.jar spark@SparkSingleNode:~$ pwd /home/spark spark@SparkSingleNode:~$ ls Desktop Downloads Pictures Templates Videos Documents Music Public test.sh spark@SparkSingleNode:~$ cd Desktop/ spark@SparkSingleNode:~/Desktop$ ls JavaShellUtil.java WC.jar spark@SparkSingleNode:~/Desktop$ javac JavaShellUtil.java spark@SparkSingleNode:~/Desktop$ java JavaShellUtil INFO:(hadoop,1) spark@SparkSingleNode:~/Desktop$ cd /usr/local/hadoop/hadoop-2.6.0/ 步骤四:查看输出结果 spark@SparkSingleNode:/usr/local/hadoop/hadoop-2.6.0$ bin/hadoop fs -cat /WCout/par* (hadoop,1) (hello,5) (storm,1) (spark,1) (hive,1) (hbase,1) spark@SparkSingleNode:/usr/local/hadoop/hadoop-2.6.0$ 成功! 关于 Shell 传递参数 见 http://www.runoob.com/linux/linux-shell-passing-arguments.html 最后说的是,不局限于此,可以穿插在以后我们生产业务里的。作为调用它即可,非常实用! 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/6055518.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

如果遇到Hadoop集群正常,MapReduce作业运行出现错误,如何来查看作业运行日志(图文详解)

这个时候我们可以进入logs下的userlogs 备注:userlogs目录下有很多个以往运行的作业,我选择最新的最大编号的作业,就是我们当前运行作业的日志。然后找到stderr stdout syslog文件,stderr为作业错误日志,stdout作业输出日志,syslog为系统日志 本文转自大数据躺过的坑博客园博客,原文链接:http://www.cnblogs.com/zlslch/p/7643664.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux云计算集群架构师->第7章-文件系统基本权限和高级权限管理

# 第7章-文件系统基本权限和高级权限管理 (上课时间2021-06-21,笔记整理时间2021-06-26) **本节所讲内容:** **7.1 文件的基本权限:r w x (UGO)** **7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL** **7.3 实战:创建一个让 root 都无法删除的文件** ## 7.1 文件的基本权限 ### 7.1.1 权限的作用 通过对文件设定权限可以达到以下三种访问限制权限: 只允许用户自己访问; 允许一个预先指定的用户组中的用户访问; 允许系统中的任何用户访问。 ### 7.1.2 查看权限 ```sh [root@Centos83 ~]# ll /etc/passwd -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd ``` 文件权限基本解释: 以-rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd 为例: | - | rw- | r-- | r-- | root | root | 3055 | 6月25 10:55 | /etc/passwd | | -------- | ------------ | ------------ | ---------- | ------ | ---- | -------- | ------------ | ----------- | | 文件类型 | 拥有者的权限 | 所属组的权限 | 其它人权限 | 拥有者 | 属组 | 文件大小 | 最后修改日期 | 对象/文件名 | **其中:文件类型,可以为 p、d、l、s、c、b 和 –** **p 表示命名管道文件** **d 表示目录文件** **l 表示符号链接文件** **-表示普通文件** **s 表示 socket 套接口文件,比如我们启用 mysql 时,会产生一个 mysql.sock 文件** **c 表示字符设备文件,例: 虚拟控制台 或 tty0** **b 表示块设备文件 例: sda, cdrom** 例如: ```sh [root@Centos83 ~]# ll /dev/sda /dev/cdrom /etc/passwd /dev/tty0 lrwxrwxrwx. 1 root root 3 6月 24 10:25 /dev/cdrom -> sr0 brw-rw----. 1 root disk 8, 0 6月 24 10:25 /dev/sda crw--w----. 1 root tty 4, 0 6月 24 10:25 /dev/tty0 -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd ``` 如下效果图: ![image-20210625115059013](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625115059013.png) ### 7.1.3 权限说明 对于文件来说: **r:读 cat** **w:写 vim echo** **x:执行 运行命名或者脚本** **对于目录来说:** **r:读(看到目录里面有什么) ls** **w:在目录里面建文件,删除,移动 touch mkdir rm mv cp** **x:目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。** ### 7.1.4 文件拥有者 **UGO**:所有者--用户组--其它用户 User-所有者: 就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件。 **Group**-用户组: 用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,显然这种方法不太合理;另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限。这就是用户组。 **Other**-其它用户:系统内的其他所有者用户就是 other 用户类 ### 7.1.5 常见几种文件权限组成 - rwx --- ---:文件所有者对文件具有读取、写入和执行的权限。 - rwx r-- r--: 文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限。 - rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅具有读取和执行的权限。 - drwx--x--x: 目录所有者具有读写与进入目录的权限,其他用户近能进入该目录,却无法读取任何数据。 - drwx------: 除了目录所有者具有完整的权限之外,其他用户对该目录完全没有任何权限。 **举例如下:** 每个用户都拥有自己的专属目录,通常放置/home 下 ```sh [root@Centos83 ~]# ll /home/ 总用量 4 drwxr-xr-x. 2 root root 6 6月 20 07:56 dx3 drwx------. 3 1001 1001 78 6月 24 19:40 harry drwx------. 3 2002 lenovo 113 6月 24 21:23 lenovo drwx------. 3 oracle oracle 92 6月 24 20:03 oracle drwx------. 3 plume plume 113 6月 24 21:41 plume drwx------. 3 thinkplus thinkplus 92 6月 24 20:18 thinkplus ``` 注: [rwx------]表示目录所有者本身拥有的权限,其它用户是无法进入的。 root 可以。 例 2: 你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组 ```sh [root@Centos83 ~]# useradd user [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch use.txt [user@Centos83 ~]$ ll use.txt -rw-rw-r--. 1 user user 0 6月 25 11:56 use.txt ``` **su - user 和 su user 的区别?** ```sh [root@Centos83 ~]# su - user # 从 root 切换到普通用户 user [user@Centos83 ~]$ pwd /home/user [user@Centos83 ~]$ exit 注销 [root@Centos83 ~]# su user [user@Centos83 root]$ pwd # 查看切完后的路径 /root [user@Centos83 root]$ touch a.txt touch: 无法创建 'a.txt': 权限不够 [user@Centos83 root]$ cd /home/user/ [user@Centos83 ~]$ touch a.txt [user@Centos83 ~]$ exit ``` 注: su - 用户,加上-减号,切换用户时,会把用户家目录和环境变量都彻底切成用 user 的。 不 加-减号,保留切换前的路径和环境变量。 一般切换用户都加减号- 。 ### 7.1.6 更改文件的属主和属组 改变文件的所属关系用到命令: **chown**:可以用来改变文件(或目录)的属主 **chgrp**:可以用来改变文件(或目录)的默认属组(不常用) 如果你要对目录进行操作,加参数 **-R** **chown** 语法: chown user:group filename 比如:chown hr:san a.txt 把文件的属主改为 hr 属组改为san chown user filename 比如:chown san a.txt 把文件的属主改为 san 用户 chown :group filename 比如: chown :miao a.txt 把文件的属组改为 miao 组:也可以用.代替 -R :递归(目录下的所有内容都更改,否则只修改目录) 示例: ```sh [root@Centos83 ~]# touch {a,b,c}.txt [root@Centos83 ~]# ll *.txt -rw-r--r--. 1 root root 2735 6月 25 12:04 a.txt -rw-r--r--. 1 root root 0 6月 25 12:04 b.txt -rw-r--r--. 1 root root 0 6月 25 12:04 c.txt [root@Centos83 ~]# chown user a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user root 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown user:user a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user user 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown :root a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user root 2735 6月 25 12:04 a.txt [root@Centos83 ~]# chown .bin a.txt [root@Centos83 ~]# ll a.txt -rw-r--r--. 1 user bin 2735 6月 25 12:04 a.txt ``` **一个文件只有读的权限,拥有者是否可以写这个文件** 示例: ```sh [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch a.txt [user@Centos83 ~]$ ll a.txt -rw-rw-r--. 1 user user 0 6月 25 12:09 a.txt [user@Centos83 ~]$ chmod 000 a.txt #修改成 000 权限 [user@Centos83 ~]$ ll a.txt ----------. 1 user user 0 6月 25 12:09 a.txt [user@Centos83 ~]$ vim a.txt #写入hello, :wq! 强制保存退出 [user@Centos83 ~]$ cat /home/user/a.txt cat: /home/user/a.txt: 权限不够 ``` **注:使用 user1 身份,无法查看 cat /home/user1/a.txt** **实验结果:文件所有者一定可以写文件。 就像 root 可以对 shadow 强制写。 因 shadow 的拥有者是 root** 扩展: ```sh [root@Centos83 ~]# ll /etc/shadow* /etc/passwd* -rw-r--r--. 1 root root 3094 6月 25 11:55 /etc/passwd -rw-r--r--. 1 root root 3055 6月 25 10:55 /etc/passwd- #安装完系统时,会生成 passwd 备份文件。系统安装好后,新增加的用户,不会写到/etc/passwd- ----------. 1 root root 1918 6月 25 11:55 /etc/shadow ----------. 1 root root 1891 6月 25 10:55 /etc/shadow- #安装完系统时,会生成 shadow 备份文件。系统安装好后,新增加用户的密码信息,不会写到/etc/shadow ``` ### 7.1.7 修改权限 方法 1:使用字符设定 修改权限用的命令:chmod 作用:修改文件,目录的权限 语法:chmod [对谁操作] [操作符] [赋于什么权限] 文件名 对谁操作: **u----> 用户 user**,表示文件或目录的所有者 **g---->用户组 group**,表示文件或目录所属的用户组 **o---->其它用户 others** **a---->所有用户 all** 操作符: + ’+‘ 添加权限 ; ‘-’ 减少权限 ; ‘=’ 直接给定一个权限 + 权限:r w x 例如下面的组合: + **u-w user 拥有者** + **g+x group 组** + **o=r other 其他人** + **a+x all 所有人** ```sh [root@Centos83 ~]# ll /home/user/a.txt # a.txt文件已经被去掉了所有权限 ----------. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod u+w /home/user/a.txt # 给a.txt 用户加写权限 [root@Centos83 ~]# ll /home/user/a.txt --w-------. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod g+r /home/user/a.txt # 给 a.txt 组加读权限 [root@Centos83 ~]# chmod a+w /home/user/a.txt # 给 a.txt 所有用户加读权限 [root@Centos83 ~]# ll /home/user/a.txt --w-rw--w-. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod a+x /home/user/a.txt # 给 a.txt 所有用户加执行权限 [root@Centos83 ~]# ll /home/user/a.txt --wxrwx-wx. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# chmod o=r /home/user/a.txt # 给 a.txt 其它用户读权限 = 会覆盖仅限 [root@Centos83 ~]# ll /home/user/a.txt --wxrwxr--. 1 user user 6 6月 25 12:10 /home/user/a.txt [root@Centos83 ~]# [root@Centos83 ~]# chmod a=rwx /home/user/a.txt # 给 a.txt 所有用户写、读、执行权限 [root@Centos83 ~]# ll /home/user/a.txt -rwxrwxrwx. 1 user user 6 6月 25 12:10 /home/user/a.txt ``` ### 7.1.8 使用八进制(0-7)数字表示权限法 | 权限 | 二进制值 | 八进制值 | 描述 | | ---- | -------- | -------- | ---------------- | | --- | 000 | 0 | 没有任何权限 | | --x | 001 | 1 | 只有执行权限 | | -w- | 010 | 2 | 只有写入权限 | | -wx | 011 | 3 | 有写入和执行权限 | | r-- | 100 | 4 | 只有读取权限 | | r-x | 101 | 5 | 有读取和执行权限 | | rw- | 110 | 6 | 有读取和写入权限 | | rwx | 111 | 7 | 有全部权限 | ![image-20210625130021764](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625130021764.png) 例 1: 互动:rw- 的值是多少 答: 4+2=6 rwx r-x r-x 的值是多少 答: rwx=4+2+1=7 ; r-x=4+1=5 rwx r-x r-x=755 **语法:** **chmod 755 文件或文件夹名字** chmod a=rwx mini.txt 等于 chmod 777 mini.txt ```sh [root@Centos83 ~]# touch mini.txt [root@Centos83 ~]# ll mini.txt -rw-r--r--. 1 root root 2742 6月 20 16:45 mini.txt 6 4 4 [root@Centos83 ~]# chmod 755 mini.txt [root@Centos83 ~]# ll mini.txt -rwxr-xr-x. 1 root root 2742 6月 20 16:45 mini.txt 7 5 1 [root@Centos83 ~]# chmod 700 mini.txt [root@Centos83 ~]# ll mini.txt -rwx------. 1 root root 2742 6月 20 16:45 mini.txt 7 0 0 ``` ### 7.1.9 权限对文件和目录的影响 有三种权限可以应用:读取,写入与执行,这些权限对访问文件和目录的影响如下: 权限 对文件的影响 对目录的影响 r(读取) 可以读取文件的内容 可以列出目录的内容(文件名) w(写入) 可以更改文件的内容 可以创建或删除目录中的任意文件 x(执行) 可以作为命令执行文件 可以访问目录的内容(取决于目录中文件的权限) 扩展:补码 为什么我们创建的文件的权限默认是 644 呢? 我们创建文件的默认权限是怎么来的? umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户) 存在一个相应的 umask 值中的数字 文件默认权限=666 ,目录默认权限=777 我们一般在/etc/profile、$ [HOME]/.bash_profile 或$[HOME]/.profile 中设置 umask 值。 永久生效,编辑用户的配置文件 vim .bash_profile ```sh [root@Centos83 ~]# vim /etc/profile ``` ![image-20210625130558582](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210625130558582.png) **注: UID 大于 199 且用户的组名和用户名一样,那么 umask 值为 002,否则为 022.** **注: -gt 在 shell 中表示大于; ,id -gn 显示组名,id -un 显示用户名** **id -g 显示用户组 ID ,id -u 显示用户 id** ```sh [root@Centos83 ~]# touch aaa [root@Centos83 ~]# ll aaa -rw-r--r--. 1 root root 0 6月 26 09:56 aaa 6 4 4 # 666-022=644 [root@Centos83 ~]# su - user [user@Centos83 ~]$ touch aaa [user@Centos83 ~]$ ll aaa -rw-rw-r--. 1 user user 0 6月 26 09:56 aaa 6 6 4 # 666-002= 664 [user@Centos83 ~]$ mkdir dir [user@Centos83 ~]$ ll -d dir drwxrwxr-x. 2 user user 6 6月 26 09:57 dir 7 7 5 # 777-002=775 ``` 临时生效: umask 权限补码 ```sh [user@Centos83 ~]$ umask 044 [user@Centos83 ~]$ touch yh.txt [user@Centos83 ~]$ ll yh.txt -rw--w--w-. 1 user user 0 6月 26 10:03 yh.txt 6 2 2 # 文件默认权限=666 , 666-044=622 ``` #权限的算法:一般情况是:目录默认权限-umask 值 666-022文件默认权限=666=644 目录默认权限=777-022=755 #这是一个好的记忆方法,但不严谨。 **umask 掩码为 033 创建普通文件后,权限是什么? 666-033=633 ( rw- -wx -wx) ?** ```sh [user@Centos83 ~]$ umask 033 [user@Centos83 ~]$ touch mk.txt [user@Centos83 ~]$ ll mk.txt -rw-r--r--. 1 user user 0 6月 26 10:07 mk.txt 6 4 4 #答:结果为: 644 ``` 权限科学的计算方法步骤: **1、将默认权限(目录 777,文件 666)和 umask 值都转换为 2 进制** **2、对 umask 取反** **3、将默认权限和 umask 取反后的值做与运算** **4、将得到的二进制值再转换 8 进制,即为权限,** https://tool.lu/hexconvert [进制在线转换工具]: https://tool.lu/hexconvert/ "进制在线转换工具" ![image-20210626104540452](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626104540452.png) ![image-20210626115757699](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626115757699.png) ![image-20210626121510194](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626121510194.png) 例 1: umask 为 022 **6 6 6 umask 0 2 2** 110 110 110 000 010 010 # 默认权限和 umask 都转成二进制 111 101 101 # umask 取反的值 110 110 110 与 #第二步,默认权限二进制值和 umask 二进制值取反后做与运算 111 101 101 # umask 取反的值 110 100 100 #与运算,都为 1 的为 1,否则为 0 6 4 4 #转成 8 进制 例 2: umask 为 033 结果为: 644 **6 6 6 umask 0 3 3** 110 110 110 000 011 011 # 转成二进制 111 100 100 # umask 取反的值 110 110 110 与 #第二步,默认权限二进制值和 umask 二进制值取反后做与运算 111 100 100 # umask 取反的值 110 100 100 #与运算,都为 1 的为 1,否则为 0 6 4 4 #转成 8 进制 ## 7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL **其实文件与目录设置不止这些,还有所谓的特殊权限。由于特殊权限会拥有一些“特权”.** ### 7.2.1 文件的特殊权限:suid sgid sticky 1、SUID(set uid 设置用户 ID):限定:只能设置在二进制可执行程序上面。对目录设置无效功能:程序运行时的权限从执行者变更成程序所有者的权限。 2、SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置 功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会,继承上级目录的所属组 3、Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位 这 3 个特殊权限对应的数值为: ```sh SUID SGID Stickybit 4 2 1 chmod u+s chmod g+s chmod o+t chmod 4664 chmod 2664 chmod 1664 ``` suid 的代表数字是 4,比如 4755 的结果是 rwsr-xr-x sgid 的代表数字是 2,比如 2755 的结果是 rwxr-sr-x sticky 位代表数字是 1,比如 1755 的结果是 rwxr-xr-t suid+sgid+sticky=7 ,比如 7755 的结果是 rwsr-sr-t SUID 属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限。 ![image-20210626130936378](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626130936378.png) ```sh [user@Centos83 ~]$ ll /usr/bin/passwd # passwd 命令有 suid 权限 -rwsr-xr-x. 1 root root 33600 4月 7 2020 /usr/bin/passwd ``` **普通用户 user1,没有对 shadow 文件写入的权限, 但是 user1 用户使用 passwd 修改自己密码时,可以修改 shadow 文件中的内容,这是什么原因?** ```sh [root@xuegod63 ~]# ll /etc/shadow # 普通用户对/etc/shadow是没有读写权限的 ----------. 1 root root 1918 6月 25 11:55 /etc/shadow [root@Centos83 ~]# echo 123456 | passwd --stdin user # 免交互更改 user1 密码为 123456 更改用户 user 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@Centos83 ~]# tail -5 /etc/shadow | grep user # 查看下密码 user:$6$zvkiwpKFRisB3ul9$iWFfbpKKjK3DhNzTVxZUlXC6k1hOgbtj2h.wDiOx4WAJxfMR3IPw4LybGTXQIp.e62043lbWgDQMduhYQTBiZ.:18804:0:99999:7::: [root@Centos83 ~]# su - user # 切换到user用户 [user@Centos83 ~]$ passwd # 更改user用户密码 更改用户 user 的密码 。 Current password: 新的 密码: 重新输入新的 密码: passwd:所有的身份验证令牌已经成功更新。 [user@Centos83 ~]$ exit # 退出user用户 注销 [root@Centos83 ~]# tail -5 /etc/shadow | grep user # 查看下密码 user:$6$Jb3cw59/duG2L0Jl$Znrd3QFYBq/XV0vdvFxuTiNSeFDcj7gLcQGHpLSNfi8nakWhbEsB5leXEfKWrx1X.G5mR1kMkUgAKmvfewTDq/:18804:0:99999:7::: # 查看shadow文件已经被user用户修改成功 ``` **因为 user1 用户执行 passwd 命令时,权限会提升成 root 用户,所以可以修改成功。** ```sh [root@Centos83 ~]# useradd mark # 创建用户 mark [root@Centos83 ~]# echo 123456 | passwd --stdin mark # 免交互更改 mark 密码为 123456 更改用户 mark 的密码 。 passwd:所有的身份验证令牌已经成功更新。 [root@Centos83 ~]# su - mark # 切换用户到用户 mark [mark@Centos83 ~]$ less /etc/shadow # 查看 /etc/shadow 文件 /etc/shadow: 权限不够 [mark@Centos83 ~]$ su - root # 切换到 root 用户 密码: [root@Centos83 ~]# chmod u+s /usr/bin/less # 给less 命令加用户读权限 [root@Centos83 ~]# su - mark # 切换用户到用户 mark [mark@Centos83 ~]$ less /etc/shadow #看到了 shadow 内容,不要按 q 退出进程新开 shell 窗口查看 u+s 后的效果: [root@Centos83 ~]# ps aux | egrep 'less|USER'| grep -v grep USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 6667 0.0 0.2 9888 2152 pts/0 S+ 13:46 0:00 less /etc/shadow [root@Centos83 ~]# w 13:48:20 up 6:04, 2 users, load average: 0.07, 0.02, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.170.80.200 09:56 2:12 1.17s 0.00s less /etc/shadow root pts/1 10.170.80.200 13:46 1.00s 0.23s 0.08s w ``` ![image-20210626135043416](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626135043416.png) ```sh [root@Centos83 ~]# ll /usr/bin/less -rwsr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# chmod 4755 /usr/bin/less # 等同于 chmod u+s /usr/bin/less [root@Centos83 ~]# ll /usr/bin/less -rwsr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# chmod u-s /usr/bin/less # 去掉 less 命令的 suid 权限 [root@Centos83 ~]# ll /usr/bin/less -rwxr-xr-x. 1 root root 192040 5月 11 2019 /usr/bin/less ``` ![image-20210626135644422](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626135644422.png) SGID: 限定:既可以给二进制可执行程序设置,也可以给目录设置。 给二进制可执行程序设置,则运行程序时,临时获得该程序所属组权限 ```sh root@Centos83 ~]# echo hello Linux > file.txt # 添加hello Linux内容,创建file.txt [root@Centos83 ~]# less /root/file.txt [root@Centos83 ~]# ll file.txt #查看到 file.txt 文件所属组为 root,且所属组有读权限 -rw-r--r--. 1 root root 12 6月 26 17:02 file.txt [root@Centos83 ~]# su - user #切换到 user 用户 [user@Centos83 ~]$ less /root/file.txt #查看 file2.txt ,权限不足,已去掉了 suid 权限 /root/file.txt: 权限不够 [user@Centos83 ~]$ exit 注销 [root@Centos83 ~]# chmod u-s,g+s /usr/bin/less #去掉 less 的 suid 权限,增加 sgid 权限 [root@Centos83 ~]# ll /usr/bin/less #查看 less 所属组为 root -rwxr-sr-x. 1 root root 192040 5月 11 2019 /usr/bin/less [root@Centos83 ~]# su - user [user@Centos83 ~]$ less /root/file.txt #已经有权限了,不要按 q 退出进程,新开 shell 查看 [root@xuegod63 ~]# ps aux | egrep 'USER|less' | grep -v grep USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND user 8572 0.0 0.2 9888 2124 pts/1 S+ 17:12 0:00 less /root/file.txt ``` ![image-20210626171340098](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626171340098.png) 可以看到运行 less 的用户身份为 user1,可以读取 file2.txt ,是因为临时获取 less 程序的所属组身份,而 file2.txt 所属组与 less 程序所属组相同,且有读权限。 ![image-20210626171534444](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626171534444.png) 功能:在设置了 SGID 权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的权限。 ```sh [root@Centos83 ~]# mkdir test [root@Centos83 ~]# ll -d test drwxr-xr-x. 2 root root 6 6月 26 17:16 test [root@Centos83 ~]# chmod g+s test/ [root@Centos83 ~]# ll -d test drwxr-sr-x. 2 root root 6 6月 26 17:16 test # 测试:sgid 效果 [root@Centos83 ~]# chown :bin test/ [root@Centos83 ~]# touch test/test.txt [root@Centos83 ~]# ll !$ # !$代表得是上一条命令中最后一个参数,快捷键是 esc 加.ll test/test.txt ll test/test.txt -rw-r--r--. 1 root bin 0 6月 26 17:17 test/test.txt ``` **Stickybit** 限定:只作用于目录 功能:目录下创建的文件只有 root、文件创建者、目录所有者才能删除。 例: 系统中的 tmp 目录就是这样 ```sh [root@Centos83 ~]# ll -d /tmp/ drwxrwxrwt. 24 root root 4096 6月 26 17:20 /tmp/ #用法: chmod o+t /tmp [root@Centos83 ~]# mkdir /test/ [root@Centos83 ~]# ll -d /test ``` ![image-20210626172605041](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626172605041.png) ```sh drwxr-xr-x. 2 root root 6 6月 26 17:22 /test [root@Centos83 ~]# chmod 1777 /test [root@Centos83 ~]# ll -d /test/ drwxrwxrwt. 2 root root 6 6月 26 17:22 /test/ [root@Centos83 ~]# [root@Centos83 ~]# su - user [user@Centos83 ~]$ echo user > /test/user.txt [user@Centos83 ~]$ chmod o+rw /test/user.txt [user@Centos83 ~]$ ll /test/user.txt -rw-rw-rw-. 1 user user 5 6月 26 17:23 /test/user.txt ``` ![image-20210626172644235](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626172644235.png) ```sh [think@Centos83 ~]$ echo hello think >/test/user.txt [think@Centos83 ~]$ cat /test/user.txt hello think [think@Centos83 ~]$ rm -rf /test/user.txt rm: 无法删除'/test/user.txt': 不允许的操作 ``` ![image-20210626173656901](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626173656901.png) **其他用户无法删除,只有文件创建者、目录所有者才能删除** ### 7.2.2 文件扩展权限 ACL **扩展 ACL :access control list** ```sh [root@Centos83 ~]# touch /opt/test.txt [root@Centos83 ~]# ll /opt/test.txt -rw-r--r--. 1 root root 0 6月 26 17:38 /opt/test.txt #设置只让用户 user1 对文件 a.txt 拥有的 rwx 权限 ,user1 不属于 a.txt 的所属主,和组,other 的权限还是 r--。 [root@Centos83 ~]# id user uid=2006(user) gid=2006(user) 组=2006(user) [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- group::r-- other::r-- [root@Centos83 ~]# setfacl -m u:user:rwx /opt/test.txt [root@Centos83 ~]# setfacl -m u:think:rwx /opt/test.txt -m, --modify=acl 更改文件的访问控制列表 [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- user:think:rwx user:user:rwx group::r-- mask::rwx other::r-- ``` ![image-20210626174338833](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626174338833.png) ```sh [root@Centos83 ~]# su - user [user@Centos83 ~]$ vim /opt/test.txt [user@Centos83 ~]$ ll /opt/test.txt -rw-rwxr--+ 1 root root 12 6月 26 17:44 /opt/test.txt #setfacl 权限会同步到组权限中注:只要增加了扩展权限,这个地址就会有一个 + 加号 ``` ![image-20210626174555561](https://gitee.com/caoyonghui/Typora/raw/master/Img/image-20210626174555561.png) **例 2: 给目录加扩展权限** ```sh [root@Centos83 ~]# mkdir /opt/test [root@Centos83 ~]# setfacl -m d:u:user:rwx /opt/test #d 默认在就是有这个权限 [root@Centos83 ~]# setfacl -R -m u:user:rw- /opt/test #-R 一定要在-m 前面,表示目录下所有文件 -R, --recursive 递归操作子目录 [root@Centos83 ~]# setfacl -x u:user /opt/test.txt # 去掉单个权限 [root@Centos83 ~]# getfacl /opt/test.txt getfacl: Removing leading '/' from absolute path names # file: opt/test.txt # owner: root # group: root user::rw- user:think:rwx group::r-- mask::rwx other::r-- [root@Centos83 ~]# setfacl -b /opt/test.txt # 去掉所有 acl 权限 ``` ## 7.3 实战:创建一个让 root 都无法删除的文件 发现 windows 中 有文件删除不了,怎么办? 使用 360 强制删除,粉碎文件。那么在 Linux 下怎么办? ```sh [root@Centos83 ~]# touch hack.sh aa.sh # 创建两个文件 [root@Centos83 ~]# ll hack.sh aa.sh # 查看文件 -rw-r--r--. 1 root root 0 6月 26 17:53 aa.sh -rw-r--r--. 1 root root 0 6月 26 17:53 hack.sh [root@Centos83 ~]# rm -rf aa.sh # 可以删除其中一个文件 [root@Centos83 ~]# chattr +i hack.sh # 给另一个文件 加只读属性 [root@Centos83 ~]# rm -rf hack.sh # 删除时发现无法删除 rm: 无法删除'hack.sh': 不允许的操作 [root@Centos83 ~]# ll hack.sh # 用 ll 命令也看不到任何异常 -rw-r--r--. 1 root root 0 6月 26 17:53 hack.sh [root@Centos83 ~]# lsattr hack.sh # 用 lsattr 命令可以查看到文件属性 ----i--------------- hack.sh ``` 从 REHL6 开始,新增加文件系统扩展属性: **命令:chattr** **参数: a 只能追加内容 ; i 不能被修改** **+a: 只能追加内容 如: echo aaa >> hack.sh** **+i:即 Immutable,系统不允许对这个文件进行任何的修改。如果目录具有这个属性,那么任何的** **进程只能修改目录之下的文件,不允许建立和删除文件。** **注:immutable [ɪˈmju:təbl] 不可改变的 ; Append [əˈpend] 追加** **-i :移除 i 参数。 -a :移除 a 参数** **总结:** **7.1 文件的基本权限:r w x (UGO)** **7.2 文件的特殊权限:suid sgid sticky 和文件扩展权限 ACL** **7.3 实战:创建一个让 root 都无法删除的文件**

优秀的个人博客,低调大师

Proxy-Go v9.9 发布,专业 HTTP(s)/SOCKS5/IP 中转加速代理服务与代理集群

Proxy 是 golang 实现的高性能 http、https、websocket、tcp、udp、socks5 代理服务器,支持正向代理、反向代理、透明代理、内网穿透、TCP/UDP 端口映射、SSH 中转、TLS 加密传输、协议转换、DNS 防污染智能代理、前置 CDN/Nginx 反代、代理连接重定向、API动态调用上级代理、限速限连接数。提供全平台的命令行版本,友好易用的Windows&Linux&macOS控制面板,强大的安卓版。 更新内容 1.修复sps提供的http(s)代理,在级联认证的时候某些情况不能正常工作的问题。 2.修复sps独立服务时,udp不能正常工作的问题。 特色功能 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理。 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征。 智能HTTP代理,HTTPS代理,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理。 域名黑白名单,更加自由的控制网站的访问方式。 跨平台性,无论你是widows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy。 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理。 TCP/UDP端口转发。 游戏盾,游戏代理,高仿服务器。 内网穿透,P2P传输,协议支持TCP和UDP,针对HTTP的优化穿透。 SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网。 KCP协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验。 动态选择上级代理,通过外部API,HTTP(S),SOCKS5,SPS代理可以实现基于用户或者IP的限速,连接数限制,动态获取上级。 灵活的上级分配,HTTP(S),SOCKS5,SPS代理可以通过配置文件实现基于用户或者IP的限速,连接数限制,指定上级。 反向代理,支持直接把域名解析到proxy监听的ip,然后proxy就会帮你代理访问需要访问的HTTP(S)网站。 透明HTTP(S)代理,配合iptables,在网关直接把出去的80,443方向的流量转发到proxy,就能实现无感知的智能路由器代理。 协议转换,可以把已经存在的HTTP(S)或SOCKS5或SS代理转换为一个端口同时支持HTTP(S)和SOCKS5和SS代理,转换后的SOCKS5和SS代理如果上级是SOCKS5代理,那么支持UDP功能,同时支持强大的级联认证功能。 自定义底层加密传输,http(s)\sps\socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可。 底层压缩高效传输,http(s)\sps\socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在加密之后还可以对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的。 安全的DNS代理,可以通过本地的proxy提供的DNS代理服务器与上级代理加密通讯实现安全防污染的DNS查询。 负载均衡,高可用,HTTP(S)\SOCKS5\SPS代理支持上级负载均衡和高可用,多个上级重复-P参数即可。 指定出口IP,HTTP(S)\SOCKS5\SPS\TCP代理支持客户端用入口IP连接过来的,就用入口IP作为出口IP访问目标网站的功能。如果入口IP是内网IP,出口IP不会使用入口IP 支持限速,HTTP(S)\SOCKS5\SPS\TCP代理支持限速。 支持限连接数,HTTP(S)\SOCKS5\SPS\TCP代理支持限连接数。 SOCKS5代理支持级联认证。 证书参数使用base64数据,默认情况下-C,-K参数是crt证书和key文件的路径,如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。 支持客户端IP黑白名单,更加安全的控制客户端对代理服务的访问,如果黑白名单同时设置,那么只有白名单生效。socks/http(s)/sps/tcp/udp/dns/内网穿透bridge/内网穿透tbridge,都支持客户端IP黑白名单。 端口范围批量监听,HTTP(S)\SOCKS5\SPS\TCP代理支持指定端口范围监听,避免启动过多进程,提高性能。 下载地址: Gitee Github

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

用户登录
用户注册