2019独角兽企业重金招聘Python工程师标准>>>

使用oracle修改/etc/passwd

/etc/passwd默认SHELL被修改后,无法登录的处理办法

描述:

系统环境:AIX6.1  64bit

操作:修改root用户的默认shell ->ksh,使用bash做为默认登录shell

修改时顺带把普通用户的shell也改成了bash

问题:/etc/passwd文件修改成功,但没有安装bash,结果可想而知,所有用户不能正常登录。

错误:无法使用任何方式登录aix,ftp、ssh、sftp、scp、telnet不能登录。

    这种情况己经无法进行远程管理,对系统的维护将无从下手,而唯一的处理办法就是通过机房重启系统,并在启动时用维护模式进行修改,把root/usr/bin/bash改回默认的/usr/bin/ksh

但是,该服务器在运行着数据库服务,业务要求不能间断,意味着你不能随心所欲的进行重启单用户维护,那么现在的情况很糟糕:

1.不能用任何方式登录对系统进行维护

2.保证该服务器正在运行的数据库不能中断业务

3.要修复/etc/passwd必须重启

在这种情况下,只能通过其它手段来修改/etc/passwd文件,把不存在的bash /usr/bin/bash改为默认的/usr/bin/ksh,这样以来保证可以登录,其次再去安装bash进行系统优化。

在深入分析并测试后发现有以下几个方面值得关注:

1.运行数据库服务的是oracle用户

2.数据库服务运行正常,可以进行任何数据库操作

3.数据库可以写内部JAVA过程

4.JAVA可以操作文件,当然也可以执行系统命令。

5.JAVA将继承运行它的用户属主的权限,可以任意修改oracle的目录及文件。

6.  su -s /usr/bin/ksh root 命令可以使用指定的shell进行登录,而忽略/etc/passwd指定的shell

7.AIX系统中有expect

8.AIX系统中有perl

9.root和oracle用户的登录口令都没有改动。

通过以上条件,汇总整理一条可以获得root权限来修改/etc/passwd的流程,如下:

change_passwd.sh脚本获得root权限,并调用perl修改/etc/passwd文件

change_passwd.sh脚本:

要生成change_passwd.sh,需要在JAVA里输入各行内容,在写入时需要注意转义。

需要的权限有:

1.root 权限

2.数据库权限

需要的role:

connect,resource

3.java操作文件权限

call dbms_java.grant_permission( 'SYSTEM', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );

call dbms_java.grant_permission('SYSTEM','java.io.FilePermission','<<ALL FILES>>','read,write');

即使SYSTEM用户也需要执行上述授权才行,要不然无法进行文件处理。

下面编写的2个JAVA过程

java_create_expect用于建立change_passwd.sh文件

java_exec_expect用于执行chang_passwd.sh文件

*********************************************************************create or replace and compile java source named java_create_expect asimport java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class Javacreateexpect {public static void main(String[] args) {FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff = null;
FileWriter fw = null;  try {  /*   建立/home/oracle/change_passwd.sh脚本文件  */byte[] str1 = "#!/usr/bin/expect\n".getBytes();  byte[] str2 = "spawn  /usr/bin/su -s /usr/bin/ksh root\n".getBytes();  byte[] str3 = "expect \"Password:\";\n".getBytes();byte[] str4 = "send \"cdr12345\\n\";\n".getBytes();byte[] str5 = "expect \"#\";\n".getBytes();// byte[] str6 = "send \"/usr/bin/cp -f /etc/passwd /home/oracle/\\n";\n".getBytes();byte[] str6 = "send \"/usr/bin/cp -f /etc/passwd /home/oracle/\\n\"\n".getBytes();byte[] str7 = "send \"/usr/bin/perl -p -i -e s,:/usr/bin/bash,:/usr/bin/ksh, /home/oracle/passwd\\n\"\n".getBytes();byte[] str8 = "send \"/usr/bin/cat /home/oracle/passwd\\n\"\n".getBytes();byte[] str9 = "send \"/usr/bin/mv /etc/passwd /etc/passwd.bak_20121123\\n\"\n".getBytes();byte[] str10 = "send \"/usr/bin/cp /home/oracle/passwd /etc/passwd\\n\"\n".getBytes();byte[] str11= "send \"exit\\n\";\n".getBytes();byte[] str12 = "expect eof".getBytes();out = new FileOutputStream(new File("/home/oracle/change_passwd.sh"));  long begin = System.currentTimeMillis();  out.write(str1);  out.write(str2);out.write(str3);out.write(str4);out.write(str5);out.write(str6);out.write(str7);out.write(str8);out.write(str9);out.write(str10);out.write(str11);out.write(str12);out.close();//System.out.println("hello,world");/*   修改change_passwd.sh文件属性,添加可执行权限  */String cmd = "chmod +x /home/oracle/change_passwd.sh";Process p = Runtime.getRuntime().exec(cmd);/* System.out.println("hello,earth");*//*显示change_oracle.sh文件内容 *//*String cmd_disp_expect = "cat /home/oracle/ep.sh";p = Runtime.getRuntime().exec(cmd_disp_expect);is = p.getInputStream();br = new java.io.BufferedReader(new java.io.InputStreamReader(is));sb = new StringBuffer();do {sb.setLength(0);String str = br.readLine();if (str == null)break;if (str.trim().equals(""))continue;sb.append(str);System.out.println(sb.toString());} while (true);*/} catch (Exception e) {e.printStackTrace();}}}

*********************************************************************create or replace and compile java source named java_exec_expect asimport java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.lang.Thread;
import java.lang.Object;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;public class Javaexecexpect {public static void main(String[] args) {
FileOutputStream out = null;
FileOutputStream outSTr = null;
BufferedOutputStream Buff = null;
FileWriter fw = null;  try {String cmd_exec_expect = "/usr/bin/expect -f /home/oracle/change_passwd.sh";Process p = Runtime.getRuntime().exec(cmd_exec_expect);// 获得返回值java.io.InputStream stdin = p.getInputStream();java.io.InputStreamReader isr = new java.io.InputStreamReader(stdin);java.io.BufferedReader br = new java.io.BufferedReader(isr);StringBuffer sb = new StringBuffer();do {sb.setLength(0);String str = br.readLine();if (str == null)break;if (str.trim().equals(""))  continue;sb.append(str);System.out.println(sb.toString());  // System.err.println(loadStream(p.getErrorStream()));} while (true);/*Thread.sleep(1000);*/int exitVal = p.waitFor();System.out.println("Process exitValue: " + exitVal);} catch (Exception e) {System.err.println("System Monitor Error" + e.toString());e.printStackTrace();}}
}

*********************************************************************/* 用procedure引用java */create or replace procedure p_java_create_expect(vv in varchar2) as  language java name 'Javacreateexpect.main(java.lang.String[])';
create or replace procedure p_java_exec_expect(vv in varchar2) as  language java name 'Javaexecexpect.main(java.lang.String[])';/* 按顺序执行这2个过程 */
set serverout on;
call dbms_java.set_output(5000);
exec p_java_create_expect ('');
set serverout on;
call dbms_java.set_output(5000);
exec p_java_exec_expect ('');
/*执行完成后,用SSH客户端登录进行测试 */

至此,用oracle对root系统配置文件的修改操作成功。

转载CU上的讨论帖,附件本站下载地址:http://www.oschina.net/action/code/download?code=16402&id=27052

转载于:https://my.oschina.net/chenshouyong/blog/95701

使用oracle修改/etc/passwd /etc/passwd默认SHELL被修改后,无法...相关推荐

  1. linux默认csh修改命令,Solaris中默认Shell的修改以及命令行补全的设置

    Solaris中默认Shell的修改以及命令行补全的设置 发布时间:2008-02-18 00:01:41来源:红联作者:qtsmy Solaris10 x86虽然可以跑起来,但有很多方面都用这和以前 ...

  2. win8系统修改默认html,win8系统如何修改ie浏览器的主页默认值? 修改ie浏览器的主页默认值的方法介绍...

    win8系统设置ie浏览器的主页方法: 1.IE默认连接首页被修改,受到更改的注册表项目为: HKEY_LOCAL_MACHINE\Software\Microsoft\Internet Explor ...

  3. 修改节点的属性 节点默认不允许修改

    xml的节点默认是不允许修改的,本文也就不做处理了 XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(xmlPath); XmlElement e ...

  4. linux 补充文件名,linux修改文件名(Linux 下使用 shell 批量修改文件名的三种方法)...

    1.通过sed替换 [root@node01 wolf]# find / -type f -name wolf.log /wolf.log /tmp/wolf.log /root/wolf/wolf. ...

  5. shell 批量修改文件名

    shell 批量修改文件名 tags: 任务 文章目录 shell 批量修改文件名 1. 添加 2. 修改 3. 删除 1. 添加 $ ls file1 file2 file3 file4 $ cat ...

  6. linux设置用户名密码命令,Linux设置(修改)用户密码命令-passwd | IT运维网

    格式:passwd [options] [username] -S UserName:查询用户密码的密码状态:仅root用户可 -l UserName:锁定指定用户(其实就是在用户密码前添加两叹号!! ...

  7. 改oracle监听程序端口号,windows下如何修改oracle的默认监听端口号port

    首先我们要知道,在oracle中,什么文件里面有关于端口号的信息,路径如下: X:\oracle_home\product\11.2.0\dbhome_2\NETWORK\ADMIN 到这个路径下我们 ...

  8. Solaris 默认Shell 修改

    Solaris 有很多方面都用这和以前不大一样,下面讲Solaris中Shell的一些问题和解决方法. Solaris的默认Shell是sh,即命令行提示符为(root用户):# 而在用Linux命令 ...

  9. easyui修改css样式,修改easyui的easyloader的默认css目录路径

    easyloader默认情况下会使用js文件所在目录下的themes文件夹中的css,这里改成项目自定义的css文件夹. 首先找到: var m=src.match(/easyloader\.js(\ ...

  10. 添加列oracle默认值,Oracle 11g增加列,并带默认值的新特性

    在Oracle 11g以前,如果要在一个大表中增加一列,并设置默认值,那将是一个非常悲剧的事情.有些时候不得不选择在线重定义功能来实现 Oracle 11g增加列,并带默认值的新特性 [日期:2014 ...

最新文章

  1. Git复习(二)之远程仓库、注册GitHub账号、SSH警告、使用GitHub
  2. chart.js绘制精美的数据化图形--入门示例
  3. java io之图片存取
  4. PKM(个人知识管理)类软件收集(偶尔更新列表)
  5. 转:设置Eclipse中的tab键为4个空格的完整方法
  6. 018年,这种员工,开再高的工资都要留住
  7. Visual Studio 2019 16.3 Preview 3 发布,使用 IntelliCode 重构更容易
  8. C#.Net工作笔记014---C#中internal的意思
  9. 移动webAPP前端开发技巧汇总
  10. Intellij Idea选中内容后Backspace删除无法使用,Ctrl+c/Ctrl+v/Ctrl+s/Ctrl+d等等快捷键无法使用的问题的解决
  11. 网易游戏笔试【2020暑期实习生】游戏研发工程师第二批在线笔试4月6日
  12. 实话实说!猿如意大测评!助力coding!
  13. eclipse打不开的常见错误
  14. 【2019蓝桥杯国赛B组】排列数
  15. python怎么导入数据集keras_keras使用Sequence类调用大规模数据集进行训练的实现
  16. ROM、RAM和FLASH的区别是什么?SRAM、DRAM、PROM、EPROM、EEPROM
  17. 【水花的2021年度总结】
  18. 【C#】无法从命令行或调试器启动服务,必须首先安装Windows服务(使用installutil.exe)
  19. 杭州seo工资高吗?杭州做seo工资一般多少
  20. 大四做毕业设计,是一种怎样的感受?

热门文章

  1. 关于重分类工具的其他讨论
  2. Arcpy实现dem数据主河网自动提取
  3. sublime test3 php语法错误高亮
  4. nologging mysql_oraclenologgingoperation
  5. GitHub配置SSH key
  6. 眼压高学计算机行吗,为什么眼压高到降不下,医生却说没问题?
  7. java 访问https 证书_Java+SSL证书访问Https站点
  8. 为什么 30 岁的工程师容易跳槽?
  9. yii mysql 操作_YII 数据库相关操作
  10. html5页面签字,html5 canvas实现的手机端签字板