linux服务器巡检通用脚本--hostpolling2.sh_无名草~的博客-程序员信息网

技术标签: 运维  shell  巡检脚本  linux  

#!/bin/bash

#name: safe_check.sh
#Author: lipc
#Date: 2019-11-30
#Version: 1.0
#Notes: 此脚本用来做系统的安全巡检

read key

start(){
echo “警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。”

echo ---------------------------------------主机安全检查-----------------------

echo “系统版本”

uname -a

echo --------------------------------------------------------------------------

echo “本机的ip地址是:”

ifconfig | grep --color “([0-9]{1,3}.){3}[0-9]{1,3}”

echo --------------------------------------------------------------------------

awk -F":" ‘{if($2!~/!|*/){print “(”$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}’ /etc/shadow

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E “PASS_MAX_DAYS” | grep -v “#” |awk -F’ ’ ‘{if($2!=90){print “/etc/login.defs里面的”$1 “设置的是”$2"天,请管理员改成90天。"}}’

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E “PASS_MIN_LEN” | grep -v “#” |awk -F’ ’ ‘{if($2!=6){print “/etc/login.defs里面的”$1 “设置的是”$2"个字符,请管理员改成6个字符。"}}’

echo --------------------------------------------------------------------------

more /etc/login.defs | grep -E “PASS_WARN_AGE” | grep -v “#” |awk -F’ ’ ‘{if($2!=10){print “/etc/login.defs里面的”$1 “设置的是”$2"天,请管理员将口令到期警告天数改成10天。"}}’

echo --------------------------------------------------------------------------

grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo “未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数”

echo --------------------------------------------------------------------------

if ps -elf |grep xinet |grep -v “grep xinet”;then

echo “xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭”

else

echo “xinetd 服务未开启”

fi

echo --------------------------------------------------------------------------

echo “查看系统密码文件修改时间”

ls -ltr /etc/passwd

echo --------------------------------------------------------------------------

echo “查看是否开启了ssh服务”

if service sshd status | grep -E “listening on|active (running)”; then

echo “SSH服务已开启”

else

echo “SSH服务未开启”

fi

echo --------------------------------------------------------------------------

echo “查看是否开启了TELNET服务”

if more /etc/xinetd.d/telnetd 2>&1|grep -E “disable=no”; then

echo "TELNET服务已开启 "

else

echo "TELNET服务未开启 "

fi

echo --------------------------------------------------------------------------

echo “查看系统SSH远程访问设置策略(host.deny拒绝列表)”

if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E “sshd”; then

echo "远程访问策略已设置 "

else

echo "远程访问策略未设置 "

fi

echo --------------------------------------------------------------------------

echo “查看系统SSH远程访问设置策略(hosts.allow允许列表)”

if more /etc/hosts.allow | grep -E "sshd: ";more /etc/hosts.allow | grep -E “sshd”; then

echo "远程访问策略已设置 "

else

echo "远程访问策略未设置 "

fi

echo “当hosts.allow和 host.deny相冲突时,以hosts.allow设置为准。”

echo -------------------------------------------------------------------------

echo “查看shell是否设置超时锁定策略”

if more /etc/profile | grep -E "TIMEOUT= "; then

echo "系统设置了超时锁定策略 "

else

echo "未设置超时锁定策略 "

fi

echo -------------------------------------------------------------------------

echo “查看syslog日志审计服务是否开启”

if service syslog status | egrep " active (running";then

echo “syslog服务已开启”

else

echo “syslog服务未开启,建议通过service syslog start开启日志审计功能”

fi

echo -------------------------------------------------------------------------

echo “查看syslog日志是否开启外发”

if more /etc/rsyslog.conf | egrep “@…|@…|@…|*.* @…|*.* @…|*.* @…”;then

echo “客户端syslog日志已开启外发”

else

echo “客户端syslog日志未开启外发”

fi

echo -------------------------------------------------------------------------

echo “查看passwd文件中有哪些特权用户”

awk -F: ‘$3==0 {print $1}’ /etc/passwd

echo ------------------------------------------------------------------------

echo “查看系统中是否存在空口令账户”

awk -F: ‘($2=="!!") {print $1}’ /etc/shadow

echo “该结果不适用于Ubuntu系统”

echo ------------------------------------------------------------------------

echo “查看系统中root用户外连情况”

lsof -u root |egrep “ESTABLISHED|SYN_SENT|LISTENING”

echo -------重要文件权限检查中------------------------------------------------

file1=ls -l /etc/passwd | awk '{print $1}'
if [ f i l e 1 = " − r w − r − − r − − . " ] ; t h e n e c h o " [ √ ] / e t c / p a s s w d 文 件 权 限 为 644 , 符 合 要 求 " e l s e e c h o " [ X ] / e t c / p a s s w d 文 件 权 限 为 [ file1 = "-rw-r--r--." ];then echo " [ √ ] /etc/passwd文件权限为644,符合要求" else echo " [ X ] /etc/passwd文件权限为[ file1="rwrr."];thenecho"[]/etc/passwd644"elseecho"[X]/etc/passwd[file1.],不符合要求"
fi

file2=ls -l /etc/shadow | awk '{print $1}'
if [ $file2 = “-rw-r–r--.” ] || [ f i l e 2 = " − − − − − − − − − − . " ] ; t h e n e c h o " [ √ ] / e t c / s h a d o w 文 件 权 限 为 400 或 000 , 符 合 要 求 " e l s e e c h o " [ X ] / e t c / s h a d o w 文 件 权 限 为 file2 = "----------." ];then echo " [ √ ] /etc/shadow文件权限为400或000,符合要求" else echo " [ X ] /etc/shadow文件权限为 file2="."];thenecho"[]/etc/shadow400000"elseecho"[X]/etc/shadow{file2},不符合要求"
fi

file3=ls -l /etc/group | awk '{print $1}'
if [ f i l e 3 = " − r w − r − − r − − . " ] ; t h e n e c h o " [ √ ] / e t c / g r o u p 文 件 权 限 为 644 , 符 合 要 求 " e l s e e c h o " [ X ] / e t c / g r o u p 文 件 权 限 为 file3 = "-rw-r--r--." ];then echo " [ √ ] /etc/group文件权限为644,符合要求" else echo " [ X ] /etc/group文件权限为 file3="rwrr."];thenecho"[]/etc/group644"elseecho"[X]/etc/groupfile3,不符合要求"
fi

file4=ls -l /etc/securetty | awk '{print $1}'
if [ $file4 = “-rw-------.” ];then
echo " [ √ ] /etc/security文件权限为600,符合要求"
else
echo " [ X ] /etc/security文件权限不为600,不符合要求,建议设置权限为600"
fi

file5=ls -l /etc/services | awk '{print $1}'
if [ $file5 = “-rw-r–r--.” ];then
echo " [ √ ] /etc/services文件权限为644,符合要求"
else
echo " [ X ] /etc/services文件权限不为644,不符合要求,建议设置权限为644"
fi

file6=ls -l /etc/xinetd.conf | awk '{print $1}'
if [ !-f $file6 ];then
echo " [ √ ] /etc/xinetd.conf文件不存在,暂略此项"
else
if [ $file6 = “-rw-------.” ];then
echo " [ √ ] /etc/xinetd.conf文件权限为600,符合要求"
else
echo " [ X ] /etc/xinetd.conf文件权限不为600,不符合要求,建议设置权限为600"
fi
fi

file7=ls -l /etc/grub.conf | awk '{print $1}'
if [ f i l e 7 = " − r w − − − − − − − . " ] ; t h e n e c h o " [ √ ] / e t c / g r u b . c o n f 文 件 权 限 为 600 , 符 合 要 求 " e l s e e c h o " [ X ] / e t c / g r u b . c o n f 文 件 权 限 为 file7 = "-rw-------." ];then echo " [ √ ] /etc/grub.conf文件权限为600,符合要求" else echo " [ X ] /etc/grub.conf文件权限为 file7="rw."];thenecho"[]/etc/grub.conf600"elseecho"[X]/etc/grub.conffile7,不符合要求,建议设置权限为600"
fi

file8=ls -l /etc/lilo.conf | awk '{print $1}'
if [ -f /etc/lilo.conf ];then
if [ $file8 = “-rw-------” ];then
echo " [ √ ] /etc/lilo.conf文件权限为600,符合要求"
else
echo " [ X ] /etc/lilo.conf文件权限不为600,不符合要求,建议设置权限为600"
fi
else
echo " [ √ ] /etc/lilo.conf文件不存在,暂略此项"
fi

echo ------------------------------------------------------------------------

echo ----------------------------状态解释------------------------------

echo “ESTABLISHED的意思是建立连接。表示两台机器正在通信。”

echo “LISTENING的”

echo “SYN_SENT状态表示请求连接”

echo ------------------------------------------------------------------------

echo “查看系统中root用户TCP连接情况”

lsof -u root |egrep “TCP”

echo ------------------------------------------------------------------------

echo “查看系统中存在哪些非系统默认用户”

echo “root“该值大于500为新创建用户,小于或等于500为系统初始用户””

more /etc/passwd |awk -F “:” ‘{if($3>500){print “/etc/passwd里面的”$1 “的值为”$3",请管理员确认该账户是否正常。"}}’

echo ------------------------------------------------------------------------

echo “检查系统守护进程”

more /etc/xinetd.d/rsync | grep -v “^#”

echo ------------------------------------------------------------------------

echo “检查系统是否存在入侵行为”

more /var/log/secure |grep refused

echo ------------------------------------------------------------------------

echo “-----------------------检查系统是否存在PHP脚本后门---------------------”

if find / -type f -name *.php | xargs egrep -l “mysql_query($query, KaTeX parse error: Can't use function '\)' in math mode at position 7: dbconn\̲)̲|专用网马|udf.dll|c…writabledb|AnonymousUserName|eval(|Root_CSS()|黑狼PHP木马|eval(gzuncompress(base64_decode|if(empty( S E S S I O N ∣ _SESSION| SESSIONshellname|KaTeX parse error: Can't use function '\(' in math mode at position 22: …ir |PHP木马|Array\̲(̲"filename”| eval($_POST[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn 1>/dev/null 2>&1;then

echo “检测到PHP脚本后门”

find / -type f -name *.php | xargs egrep -l “mysql_query($query, KaTeX parse error: Can't use function '\)' in math mode at position 7: dbconn\̲)̲|专用网马|udf.dll|c…writabledb|AnonymousUserName|eval(|Root_CSS()|黑狼PHP木马|eval(gzuncompress(base64_decode|if(empty( S E S S I O N ∣ _SESSION| SESSIONshellname|KaTeX parse error: Can't use function '\(' in math mode at position 22: …ir |PHP木马|Array\̲(̲"filename”| eval($_POST[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn

find / -type f -name *.php | xargs egrep -l “mysql_query($query, KaTeX parse error: Can't use function '\)' in math mode at position 7: dbconn\̲)̲|专用网马|udf.dll|c…writabledb|AnonymousUserName|eval(|Root_CSS()|黑狼PHP木马|eval(gzuncompress(base64_decode|if(empty( S E S S I O N ∣ _SESSION| SESSIONshellname|KaTeX parse error: Can't use function '\(' in math mode at position 22: …ir |PHP木马|Array\̲(̲"filename”| eval($_POST[|class packdir|disk_total_space|wscript.shell|cmd.exe|shell.application|documents and settings|system32|serv-u|提权|phpspy|后门" |sort -n|uniq -c |sort -rn |awk ‘{print $2}’ | xargs -I{} cp {} /tmp/

echo “后门样本已拷贝到/tmp/目录”

else

echo “未检测到PHP脚本后门”

fi

echo ------------------------------------------------------------------------

echo “-----------------------检查系统是否存在JSP脚本后门---------------------”

find / -type f -name *.jsp | xargs egrep -l “InputStreamReader(this.is)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门” |sort -n|uniq -c |sort -rn 2>&1

find / -type f -name *.jsp | xargs egrep -l “InputStreamReader(this.is)|W_SESSION_ATTRIBUTE|strFileManag|getHostAddress|wscript.shell|gethostbyname|cmd.exe|documents and settings|system32|serv-u|提权|jspspy|后门” |sort -n|uniq -c |sort -rn| awk ‘{print $2}’ | xargs -I{} cp {} /tmp/ 2>&1

echo ------------------------------------------------------------------------

echo “----------------------检查系统是否存在HTML恶意代码---------------------”

if find / -type f -name *.html | xargs egrep -l “WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330” 1>/dev/null 2>&1;then

echo “发现HTML恶意代码”

find / -type f -name *.html | xargs egrep -l “WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330” |sort -n|uniq -c |sort -rn

find / -type f -name *.html | xargs egrep -l “WriteData|svchost.exe|DropPath|wsh.Run|WindowBomb|a1.createInstance|CurrentVersion|myEncString|DropFileName|a = prototype;|204.351.440.495.232.315.444.550.64.330” |sort -n|uniq -c |sort -rn| awk ‘{print $2}’ | xargs -I{} cp {} /tmp/

echo “后门样本已拷贝到/tmp/目录”

else

echo “未检测到HTML恶意代码”

fi

echo “----------------------检查系统是否存在perl恶意程序----------------------”

if find / -type f -name *.pl | xargs egrep -l “SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;” 1>/dev/null 2>&1;then

echo “发现perl恶意程序”

find / -type f -name *.pl | xargs egrep -l “SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;”|sort -n|uniq -c |sort -rn

find / -type f -name *.pl | xargs egrep -l “SHELLPASSWORD|shcmd|backdoor|setsockopt|IO::Socket::INET;”|sort -n|uniq -c |sort -rn| awk ‘{print $2}’ | xargs -I{} cp {} /tmp/

echo “可疑样本已拷贝到/tmp/目录”

else

echo “未检测到perl恶意程序”

fi

echo “----------------------检查系统是否存在Python恶意程序----------------------”

find / -type f -name *.py | xargs egrep -l “execCmd|cat /etc/issue|getAppProc|exploitdb” |sort -n|uniq -c |sort -rn

find / -type f -name *.py | xargs egrep -l “execCmd|cat /etc/issue|getAppProc|exploitdb” |sort -n|uniq -c |sort -rn| awk ‘{print $2}’ | xargs -I{} cp {} /tmp/

echo ------------------------------------------------------------------------

echo “-----------------------检查系统是否存在恶意程序---------------------”

find / -type f -perm -111 |xargs egrep “UpdateProcessER12CUpdateGatesE6C|CmdMsg.cpp|MiniHttpHelper.cpp|y4’r3 1uCky k1d!|[email protected]@GLIBC_2.0|initfini.c|ptmalloc_unlock_all2|_IO_wide_data_2|[email protected]@GLIBC_2.0|[email protected]@GLIBC_2.0|[email protected]@GLIBC_2.0|[email protected]@GLIBC_2.2.5|WwW.SoQoR.NeT|2.6.17-2.6.24.1.c|Local Root Exploit|[email protected]@GLIBC_2.0|syscall(__NR_vmsplice,|Linux vmsplice Local Root Exploit|It looks like the exploit failed|getting root shell” 2>/dev/null

echo ------------------------------------------------------------------------

echo “检查网络连接和监听端口”

netstat -an

echo “--------------------------路由表、网络连接、接口信息--------------”

netstat -rn

echo “------------------------查看网卡详细信息--------------------------”

ifconfig -a

echo ------------------------------------------------------------------------

echo “查看正常情况下登录到本机的所有用户的历史记录”

last

echo ------------------------------------------------------------------------

echo -----------内核文件dump配置检查中---------------------------------------

echo “检查系统中core文件是否开启”

cat /etc/security/limits.conf | grep -v ^# | grep core
if [ $? = 0 ];then
#soft=cat /etc/security/limits.conf| grep -V ^# | grep core | awk {print $2}
soft=cat /etc/security/limits.conf| grep -v '^#' | awk '{print $2}' &> /dev/null
for i in $soft
do
if [ $i = “soft” ];then
echo -e " [ √ ] 内核文件dump配置检查[\tsoft\tcore\t0]已经设置"
fi
if [ $i = “hard” ];then
echo -e " [ √ ] 内核文件dump配置检查[
\thard\tcore\t0]已经设置"
fi
done
else
echo -e " [ X ] 没有设置core,建议在/etc/security/limits.conf中添加[\tsoft\tcore\t0]和[\thard\tcore\t0]"
fi

ulimit -c

echo “core是unix系统的内核。当你的程序出现内存越界的时候,操作系统会中止你的进程,并将当前内存状态倒出到core文件中,以便进一步分析,如果返回结果为0,则是关闭了此功能,系统不会生成core文件”

echo ------------------------------------------------------------------------

echo “检查系统中关键文件修改时间”

ls -ltr /bin/ls /bin/login /etc/passwd /bin/ps /usr/bin/top /etc/shadow|awk ‘{print “文件名:”$8" ““最后修改时间:”$6” "$7}’

echo "ls文件:是存储ls命令的功能函数,被删除以后,就无法执行ls命令,黑客可利用篡改ls文件来执行后门或其他程序。

login文件:login是控制用户登录的文件,一旦被篡改或删除,系统将无法切换用户或登陆用户

user/bin/passwd是一个命令,可以为用户添加、更改密码,但是,用户的密码并不保存在/etc/passwd当中,而是保存在了/etc/shadow当中

etc/passwd是一个文件,主要是保存用户信息。

sbin/portmap是文件转换服务,缺少该文件后,无法使用磁盘挂载、转换类型等功能。

bin/ps 进程查看命令功能支持文件,文件损坏或被更改后,无法正常使用ps命令。

usr/bin/top top命令支持文件,是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。

etc/shadow shadow 是 /etc/passwd 的影子文件,密码存放在该文件当中,并且只有root用户可读。"

echo --------------------------------------------------------------------------

echo “-------------------查看系统日志文件是否存在--------------------”

log=/var/log/syslog

log2=/var/log/messages

if [ -e “$log” ]; then

echo "syslog日志文件存在! "

else

echo "/var/log/syslog日志文件不存在! "

fi

if [ -e “$log2” ]; then

echo "/var/log/messages日志文件存在! "

else

echo "/var/log/messages日志文件不存在! "

fi

echo --------------------------------------------------------------------------

echo “检查系统文件完整性2(MD5检查)”

echo “该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中”

echo “如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录”

echo “第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过”

file="/etc/md5db"

if [ -e “$file” ]; then md5sum -c /etc/md5db 2>&1;

else

md5sum /etc/passwd >>/etc/md5db

md5sum /etc/shadow >>/etc/md5db

md5sum /etc/group >>/etc/md5db

md5sum /usr/bin/passwd >>/etc/md5db

md5sum /sbin/portmap>>/etc/md5db

md5sum /bin/login >>/etc/md5db

md5sum /bin/ls >>/etc/md5db

md5sum /bin/ps >>/etc/md5db

md5sum /usr/bin/top >>/etc/md5db;

fi

echo ----------------------------------------------------------------------

echo “------------------------主机性能检查--------------------------------”

echo “CPU检查”

dmesg | grep -i cpu

echo -----------------------------------------------------------------------

more /proc/cpuinfo

echo -----------------------------------------------------------------------

echo “内存状态检查”

vmstat 2 5

echo -----------------------------------------------------------------------

more /proc/meminfo

echo -----------------------------------------------------------------------

free -m

echo -----------------------------------------------------------------------

echo “文件系统使用情况”

df -h

echo -----------------------------------------------------------------------

echo “网卡使用情况”

lspci -tv

echo ----------------------------------------------------------------------

echo “查看僵尸进程”

ps -ef | grep zombie

echo ----------------------------------------------------------------------

echo “耗CPU最多的进程”

ps auxf |sort -nr -k 3 |head -5

echo ----------------------------------------------------------------------

echo “耗内存最多的进程”

ps auxf |sort -nr -k 4 |head -5

echo ----------------------------------------------------------------------

echo ---------------------------------------------------------------------
}

if [ ! -d archive ]; then
mkdir archive
fi

start >> archive/Polling_$(date +%F)

echo ---------------------------------------------------------------------

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_36495954/article/details/113992520

智能推荐

十.linux线程概念及基本函数_MrT_WANG的博客-程序员信息网

笔记:https://note.youdao.com/ynoteshare1/index.html?id=e9b66eea3b1a46a3d70b2dc8c35af541&type=note目录一.再论进程1、多进程阻塞式实现同时读取键盘和鼠标2、使用进程技术的优势3、进程技术的劣势4、解决方案就是线程技术5、线程和进程的区别二.线程的引入1、使用线程技...

【此后无良辰】实验13 FAT12文件系统_此后无良辰的博客-程序员信息网

实验目的了解FAT文件系统的磁盘存储结构;学会文件各项空间属性的计算方法;掌握文件系统用户命令的开发方法。实验内容与记录3.2 记录sd命令的结果并逐条解释含义BytesPerSector:每扇区字节数。1.44MB 软盘每扇区有 512 字节。SectorsPerCluster:每簇扇区数。EOS 创建的引导扇区将该域设置为 1。ReservedSectors: 从第一个扇区开始的保留扇区数。在FAT12文件系统中,该域必须为 1。表示第一个扇区是保留扇区,即引导扇区。Fats:FAT 表

HBase1.2.4使用Java API创建和删除Table示例程序_syb18810107241的博客-程序员信息网

刚开始接触Java API操作HBase,碰到了zookeeper,hbase的配置问题,后来报错:HMaser is not running的错误,最后从HBase官网找了一段Java操作HBase的Demo,稍微改动一下,运行成功了!直接上代码:import org.apache.hadoop.conf.Configuration;import org.apache.hadoo

Linux_ftp_命令行下下载文件get与上传文件put的命令应用_iamiwangbo的博客-程序员信息网

Server Ubuntu 10.04上所使用的ftp服务器软件名称是vsftpd。   介绍:从本地以用户anok登录的机器192.168.0.16上通过ftp远程登录到192.168.0.6的ftp服务器上,登录用户名是peo。以下为使用该连接做的实验。   查看远程ftp服务器上用户p

Poj 3067 Japan 树状数组_lenga5241的博客-程序员信息网

题目链接:http://poj.org/problem?id=3067

ceph集群和数据库到底是储存数据_Amazon Aurora 数据库集群_weixin_39898150的博客-程序员信息网

Amazon Aurora 数据库集群包含一个或多个数据库实例以及一个管理这些数据库实例的数据的集群卷。Aurora 集群卷 是一个跨多个可用区的虚拟数据库存储卷,每个可用区具有一个数据库集群数据副本。Aurora 数据库集群由两类数据库实例组成:主数据库实例 – 支持读取和写入操作,并执行针对集群卷的所有数据修改。每个 Aurora 数据库集群均有一个主数据库实例。Aurora 副本 – 连接到...

随便推点

苹果开发者账号个人、公司、企业账号的申请和区别_gysea123321的博客-程序员信息网_苹果开发者账号申请

今天科普一下 苹果开发者账号 个人、公司、企业的费用以及权限。介于很多小伙伴不知道苹果开发者账号的区别,经常有人联系我让我申请,但工作繁多,不能一一帮忙,请见谅。目前,苹果开发者账号可分为三种类型:个人、公司、企业,且三者的费用以及权限等不尽相同。个人账号费用:99 美元/年 协作人数:仅限开发者自己 不需要填写公司的邓百氏编码( D-U-N-S Number) 支持账号下的 app 上线 App Store 需要创建 Apple ID公司账号费用:99 美元/年 允许多个开

程序员在上海之二_IT丶小农民的博客-程序员信息网

今天上午一致在整理自己的代码,想把maven分支的几个项目整合到一个项目中,把他们整合进来的时候根据自己的需求添加一些代码,红叉 满天飞啊~不过这是要淡定既然环境出错了就有解决办法,主要的一些类找不到:可能是有其他的类没有拷贝过来;还有就是没有引入依赖包,如果不是使用maven项目的话,我们需呀把对应的jar包拷打lib下面,通过Build Path来引入(有点麻烦),不过这些完全可以通过Ma

[官方文档] oracle官方文档总汇(9i,10g,11gR1, 11gR2)_zhenglib18的博客-程序员信息网_oracle11g官方文档

Oracle不同版本的官方文档在线参考和打包下载地址汇总,罗列在这里,供你我参考。1.9i Oracle官方文档1)在线浏览http://www.oracle.com/pls/db92/homepage2)下载在手,参考无忧Oracle9i Database Release 1 (9.0.1) Documentationhttp://www.oracle.com/tec

如何通过labelme标注将json文件转为png的label_逆风飞扬fei的博客-程序员信息网

1、安装labelme1、创建一个新环境conda create -n labelme python=3.62、进入该环境,安装pyqt5和labelme,labelme要求3.3.1的版本pip install pyqt5 -i https://pypi.doubanio.com/simplepip install labelme==3.3.1 -i https://pypi.doubanio.com/simple 3、安装完成后,直接输入labelme,打开labelme软件即可la

Android Dialog弹出输入法卡顿,容易发生ANR_小小de鲨的博客-程序员信息网

Dialog弹出以后,点击输入时,卡顿解决办法就是固定Dialog位置对话框主题       true       true         @android:color/transparent     代码设置对话框adialog=new Dialog(context, R.style.Dialog_Fullscreen);adialog.setCon

推荐文章

热门文章

相关标签