顺便说一下:在linux可以用命令实现修改用户密码的操作,与命令行进行交互,就是利用它们的管道,但这样太不安全了,因为修改密码要用root权限,而命令行如果是从WEB传递的话,我传一个对系统删除或什么命令你整个系统就死了.
LINUX下都是让容器以nobody身份运行的.
其它命令是可以交互的,比如nslookup可以把set type=mx 和hostname传给它,但passwd命令是特殊设计的,不能这样传参数,如果要做,先实现UnixCrypt涵数,然后把密码直接写到passwd文件中. 

解决方案 »

  1.   

    为了安全,passwd组件只接受键盘输入,不接收内存中的字符串,这个要求在任何输入passwd的地方都要求做到,而且,passwd按要求是不能以String读到的,(HTML的输入框没有做到,所以它不安全),而是读其中的字节数组.linux在你输入passwd  xxx后,它只从键盘读数据,所以你用管道命令根本传不过去,而别的都可以,比如:
    nslookup <<EOF 
    set type=mx
    www.ddd.com
    EOF
    可以把管道的参数传给nslookup,但
    passwd MDL <<EOF
    111111
    111111
    EOF
    因为passwd命令根本不接收从其它地方传入的参数,所以你根本没法用命令行执行.只能把111111加密,然后把这个写到/etc/passwd文件中,这是可以的.
    tomcat或resin,wls等都有配置可以设置在unix系统下以nobody身份运行的.这样才安全,我记得经前一个全球性的cgi提供商是以ROOT身份运行的,只用一个JSP就可以读写passwd文件 
      

  2.   

    如何确认自己的jar被nobody运行?这个帐号是系统default的吗?