2018-11-29 21:35:33 qq_33487044 阅读数 923

[PX3][Android7.1] 调试笔记 — 添加白名单

需求

现在道道通导航后台运行时,容易被系统回收,
包名:cn.jyuntech.map
需要把他加入白名单

原理

进程是有它的优先级的,这个优先级通过进程的adj值来反映,它是linux内核分配给每个系统进程的一个值,代表进程的优先级,进程回收机制就是根据这个优先级来决定是否进行回收,adj值定义在com.android.server.am.ProcessList类中,这个类路径是${android-sdk-path}\sources\android-23\com\android\server\am\ProcessList.java。oom_adj的值越小,进程的优先级越高,普通进程oom_adj值是大于等于0的,而系统进程oom_adj的值是小于0的

修改文件

/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java

ActivityManagerService最主要的功能就是统一的管理者activity,service,broadcast,provider的创建,运行,关闭.我们在应用程序中启动acitivity,关闭acitiviy等操作最终都是要通过ams来统一管理的。


//添加白名单包名
private static final String[] mThirdPartyAppWhiteList= {"cn.jyuntech.map"};

//adj设置值
private static final int [] mThirdPartyAppAdj= {7};
//更新adj,当目标进程为空,或者被杀则返回false;否则返回true;
private final boolean updateOomAdjLocked(ProcessRecord app, int cachedAdj,
                                         ProcessRecord TOP_APP, boolean doingAll, long now) {
    if (app.thread == null) {
        return false;
    }
    computeOomAdjLocked(app, cachedAdj, TOP_APP, doingAll, now);	//计算adj,返回计算后RawAdj值;
    
  //-----------------------add--------------------

    boolean isThirdPartyAppWhiteProcess=  false;  //白名单标志

    int mThirdPartyAdj = ProcessList.CACHED_APP_MIN_ADJ;  //9

    if (mThirdPartyAppWhiteList.length!= mThirdPartyAppAdj.length){
        return false;
    }

    for(int num= 0; num<= mThirdPartyAppWhiteList.length-1;num++){
        if(mThirdPartyAppWhiteList[num].equals(app.processName)&&  //equals方法:比较字符串
                app.curAdj> mThirdPartyAppAdj[num]){
            isThirdPartyAppWhiteProcess =true;
            mThirdPartyAdj = mThirdPartyAppAdj[num];
        }
    }

    if(isThirdPartyAppWhiteProcess) {
        ProcessList.setOomAdj(app.pid,app.uid, mThirdPartyAdj);  //执行setOomAdj()将该进程的节点/proc/pid/oom_score_adj写入oomadj值。
 		Log.d("setOomAdj","cn.jyuntech.map");
       if (DEBUG_SWITCH || DEBUG_OOM_ADJ) {
            Slog.v(TAG, "Set " + app.pid + " " + app.processName +
                    " adj " + mThirdPartyAdj + ": " + app.adjType);
        }
        app.setAdj = mThirdPartyAdj;
    }
    
//---------------------end--------------------

    return applyOomAdjLocked(app, doingAll, now, SystemClock.elapsedRealtime()); //应用adj,当需要杀掉目标进程则返回false;否则返回true。
}

查看当前进程:
dumpsys activity | grep “mFocusedActivity”

查看进程解基本信息
ps |grep <package_name>

查看相关adj号
cat /proc/进程ID/oom_adj

查看内存阀值
cat /sys/module/lowmemorykiller/parameters/minfree

参考资料
http://gityuan.com/2015/10/01/process-lifecycle/
http://gityuan.com/2016/08/07/android-adj/
https://www.jianshu.com/p/1da4541b70ad
https://www.smwenku.com/a/5b84ccb02b71775d1cd1e9be/zh-cn/

2019-08-09 11:44:39 xclcccvfc 阅读数 126

红帽官方参考链接:

中文文档(没有及时更新现在对应的版本是7.3)

https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/7/html/dm_multipath/config_file_blacklist#WWID_blacklist

 

英文文档(一直最新)

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/dm_multipath/config_file_blacklist#device_protocol_blacklist

在中文官方配置文档中,介绍了前面3种黑白名单的多路径(multipath)的配置模式

        1. 根据 WWID     wwid

        2.根据设备名称   devnode

        3.根据设备类型   device

 

在英文官方文档中,在7.5中增加了

        4.根据udev属性  property

 

在英文官方文档中,在7.6中增加了

        5.根据设备协议  protocol

           支持多路径识别的协议字符串有scsi:fcp、scsi:spi、scsi:ssa、scsi:sbp、scsi:srp、scsi:iscsi、scsi:sas、scsi:adt、scsi:ata、scsi:unspec、ccw、cciss、nvme和undef。

          下面的黑名单表示将所有路径进行过滤。

           blacklist {
                      protocol "*"
           }

          增加白名单

          blacklist_exceptions {
                      protocol  "scsi:fcp"
          }

 

 

 

 

 

 

 

 

 

 

 

2018-09-03 16:16:07 qq_28198181 阅读数 4696

环境:

uname -a(命令) :

Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

more /etc/redhat-release(命令):
CentOS Linux release 7.5.1804 (Core) 
 

配置iptables防火墙的进站ip白名单和端口

1.确定是否启动了firewall 和iptables

如下是firewall的部分命令

1、重启、关闭、开启firewalld.service服务

service firewalld restart 重启
service firewalld start 开启
service firewalld stop 关闭

2、查看firewall服务状态

systemctl status firewall 

3、查看firewall的状态

firewall-cmd --state

如果firewall是启动的 需要关闭掉

2.修改iptables的规则(首先需要确定是不是有iptables服务)

如果没有规则 需要安装:

1.安装iptables防火墙

yum install iptables-services #安装

2.编辑iptables防火墙配置

vi /etc/sysconfig/iptables #编辑防火墙配置文件

这个时候需要修改进站和出站规则

我的修改后iptables配置文件:

[root@localhost log]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Mon Sep  3 13:04:46 2018
*filter
:INPUT ACCEPT [0:0]    允许所有ip端口访问
:FORWARD ACCEPT [0:0] 
:OUTPUT ACCEPT [0:0]  
:whitelist - [0:0]  <-- 白名单的设置开始
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT      <-- 这是22端口都可以访问
-A INPUT -p tcp -m state --state NEW -m tcp --dport 11820 -j whitelist  <--白名单的11820端口可以访问(加了whitelist)
-A INPUT -p tcp -m state --state NEW -m tcp --dport 6122 -j whitelist    <--白名单的6122端口可以访问
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20880 -j whitelist  <-- 白名单的20880端口可以访问
-A INPUT -p tcp -m state --state NEW -m tcp --dport 20881 -j whitelist  <-- 白名单的20881端口可以访问
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A whitelist -s 10.185.151.20 -j ACCEPT   <--进来的白名单的设置的ip
-A whitelist -s 10.185.151.11 -j ACCEPT   <--进来的白名单的设置的ip
-A whitelist -s 11.8.35.182 -j ACCEPT       <--进来的白名单的设置的ip
-A OUTPUT -o lo -j ACCEPT                     <--所有的端口可以外出
COMMIT
# Completed on Mon Sep  3 13:04:46 2018

配置完成了后使用命令重启

iptables 部分命令如下:

查询防火墙状态    :    service   iptables status

查询防火墙设置的规则 iptables -L -n

停止防火墙   :    service   iptables stop

启动防火墙   :    service   iptables start

重启防火墙   :    service   iptables restart

永久关闭防火墙    :  chkconfig   iptables off

永久关闭后启用    :  chkconfig   iptables on

启动后就成功了。

可以看下这个配置文件,逻辑比较看得懂:

iptables配置文件的详细配置情况

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
#这里开始增加白名单服务器ip(请删除当前服务器的ip地址)
-N whitelist
-A whitelist -s  xxx.xxx.xxx.xxx -j ACCEPT

-A whitelist -s  xxx.xxx.xxx.xxx -j ACCEPT

-A whitelist -s  xxx.xxx.xxx.xxx -j ACCEPT

-A whitelist -s  xxx.xxx.xxx.xxx -j ACCEPT
#这里结束白名单服务器ip
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 13020 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1000:8000 -j ACCEPT  //开放1000到8000之间的所有端口
//上面这些 ACCEPT 端口号,公网内网都可以访问

//下面这些 whitelist 端口号,仅限服务器之间通过内网访问
#这里添加为白名单ip开放的端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j whitelist
-A INPUT -m state --state NEW -m tcp -p tcp --dport 13009 -j whitelist   
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10080 -j whitelist
#这结束为白名单ip开放的端口
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

#如果是要关闭 某个端口:

-A INPUT -p tcp --dport port -j REJECT  

以下是端口,先全部封再开某些的IP

iptables -I INPUT -p tcp --dport Port-j DROP
iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport Port-j ACCEPT

如果用了NAT转发记得配合以下才能生效

iptables -I FORWARD -p tcp --dport Port-j DROP
iptables -I FORWARD -s 192.168.1.0/24 -p tcp --dport Port-j ACCEPT

COMMIT

参考文档:

https://www.cnblogs.com/kesimin/p/8535286.html  (白名单和端口设置 )

https://blog.csdn.net/lee528066/article/details/52947980(Centos7.0-iptables linux的出站入站端口维护)

2019-08-31 16:18:11 langdei 阅读数 103

paramiko

第三方包 基于ssh服务 可以使用python实现ssh功能


使用前先安装

pip install paramiko

一、使用python连接linux服务器并执行linux命令

1.导包import paramiko
2.创建一个客户端
3.创建一个白名单(本地创建一个白名单)
4.设置不提醒(把白名单加到客户端)
5.连接服务器
6.执行linux命令
7.查看输出结果
8.关闭连接

import paramiko

# 创建一个客户端
ssh = paramiko.SSHClient()
# 创建一个白名单
know_host = paramiko.AutoAddPolicy()
# 设置不提醒
ssh.set_missing_host_key_policy(know_host)
# 连接服务器
ssh.connect(hostname = '10.10.107.84',port=22,username='root',password='123456')
# 执行linux命令
stdin, stdout, stderr = ssh.exec_command('mkdir /home/zhy/Desktop/g')
# stdin 标准输入     文件对象 写权限
# stout 标准的输出   文件对象 读权限
# stderr 特殊的输出  文件独享 读权限
# 查看输出结果,输出结果是一个对象,文件对象可以用read()读出来,传出来是二进制对象,用decode解码
print(stdout.read().decode())
# 关闭连接
ssh.close()

二、控制多台服务器(用多线程)

import threading
import paramiko

class MyThread(threading.Thread):
    def __init__(self,host,user,pwd,port=22):
        self.host=host
        self.user=user
        self.pwd=pwd
        self.port=port
        super(MyThread, self).__init__()

    def run(self):
        # 创建客户端
        ssh = paramiko.SSHClient()
        # 设置白名单不提醒
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)

        # 连接
        ssh.connect(hostname=self.host,port=self.port,username=self.user,password=self.pwd)

        # 执行命令
        stdin,stdout,stderr=ssh.exec_command('mkdir /opt/love')
        print(stdout.read().decode())

        # 关闭连接
        ssh.close()

if __name__ == '__main__':
    data = [
        {'host':'ip1','user':'root','password':'root123'},
        {'host': 'ip2', 'user': 'root', 'password': '123456'},
        {'host': 'ip3', 'user': 'root', 'password': '123456'},
        {'host': 'ip4', 'user': 'root', 'password': '123456'},
    ]
    tlist = []
    for i in data:
        t = MyThread(host=i['host'],user=i['user'],pwd=i['password'])
        tlist.append(t)  #实例化对象并传参

    for i in tlist:
        i.start()

三、 创建交互环境

import paramiko

# 创建客户端
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接
ssh.connect(hostname='10.10.107.84',port=22,username='root',password='123456')

# 创建一个shell
shell = ssh.invoke_shell()
shell.settimeout(1)
# 获取命令
command = input('>>') + '\n'
# 发送命令
shell.send(command)

while True:
    if command == 'q' + '\n':
        break
    try:
        # 获取返回的结果
        recv = shell.recv(512).decode()
        if recv:
            print(recv)
        else:
           continue
    except:
        command = input('>>') + '\n'
        # 发送命令
        shell.send(command)



ssh.close()

四、Sftp文件上传下载

import paramiko

trans = paramiko.Transport(sock=('10.10.107.84'))

trans.connect(username='root',password='123456')

sftp = paramiko.SFTPClient.from_transport(trans)

# put('你要上传的文件','上传的位置')
# sftp.put('jiandandian','/opt/newjdd')
# get('你要下载的文件','下载的位置')
sftp.get('/opt/newjdd','love')

sftp.close()
2011-05-30 11:44:03 lingex 阅读数 215
linux远程访问权限控制(hosts.allow和hosts.deny)

/etc/hosts.allow和/etc/hosts.deny两个文件是控制远程访问设置的,通过他可以允许或者拒绝某个ip或者ip段的客户访问linux的某项服务。

比如SSH服务,我们通常只对管理员开放,那我们就可以禁用不必要的IP,而只开放管理员可能使用到的IP段。

使用:

修改/etc/hosts.allow文件

#
# hosts.allow This file describes the names of the hosts which are
# allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
sshd:210.13.218.*:allow
sshd:222.77.15.*:allow
以上写法表示允许210和222两个ip段连接sshd服务(这必然需要hosts.deny这个文件配合使用),当然:allow完全可以省略的。

当然如果管理员集中在一个IP那么这样写是比较省事的

all:218.24.129.110//他表示接受110这个ip的所有请求!

/etc/hosts.deny文件,此文件是拒绝服务列表,文件内容如下:

#
# hosts.deny This file describes the names of the hosts which are
# *not* allowed to use the local INET services, as decided
# by the '/usr/sbin/tcpd' server.
#
# The portmap line is redundant, but it is left to remind you that
# the new secure portmap uses hosts.deny and hosts.allow. In particular
# you should know that NFS uses portmap!
sshd:all:deny


注意看:sshd:all:deny表示拒绝了所有sshd远程连接。:deny可以省略。

所以:当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。

注意修改完后:

service xinetd restart

才能让刚才的更改生效。




Linux下防止未授权IP使用ssh服务

方法一

iptables -A INPUT -p tcp -s 192.168.0.0/24 --destination-port 22 -j ACCEPT

iptables -A INPUT -p tcp -s 192.168.1.0/24 --destination-port 22 -j ACCEPT

iptables -A INPUT -p tcp -s ! 127.0.0.1 --destination-port 22 -j DROP

方法二

# more /etc/hosts.deny

#

# hosts.deny This file describes the names of the hosts which are

# *not* allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

#

# The portmap line is redundant, but it is left to remind you that

# the new secure portmap uses hosts.deny and hosts.allow. In particular

# you should know that NFS uses portmap!

sshd: ALL : deny

# more /etc/hosts.allow

#

# hosts.allow This file describes the names of the hosts which are

# allowed to use the local INET services, as decided

# by the '/usr/sbin/tcpd' server.

#

sshd: 192.168.0.230 :allow

这里写允许的ip或者网段
没有更多推荐了,返回首页