[sage-devel] Securing the Sage Notebook - final MSc project paper
The final project paper is now available at http://www.gingerlime.com/20090901_securing_sage_notebook.pdf Thanks again to everybody who helped figuring out the architecture, giving feedback and discussing ideas for improving the notebook's security. Yoav --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: Securing the Sage Notebook - MSc project draft paper
Thanks for the feedback, and apologies for not replying earlier. I have posted an updated draft on http://www.gingerlime.com/20090829__sage_msc_proj_draft.pdf Please see sections 4.1 and 5.4.4 where I documented the sagenb.org setup more clearly. I mentioned it is already using virtualisation and the benefits it brings. On Aug 26, 9:45 am, Martin Albrecht wrote: > Hi, > > > One thing you repeatedly mention is that sniffing data/credentials > > may be possible on the public server. I don't think this is ever high > > risk, as anyone doing "sensitive" computations shouldn't be using > > someone else's hardware to do it (SSL encrypted connection or not), > > especially as it is so easy to run your own personal copy of Sage > > (locally or somewhere that you trust). Also, by default, there's a > > big warning on running without https on anything but localhost. > > With the same argument you could say one shouldn't use webmail or e-mail at > all if one thinks e-mail is private. Also, it is not only issues with > sensitive computations but SSL would mitigate quite a few threats Yoav pointed > out (spoofing, attacks on others, etc.) > > > Encrypting and authenticating worksheets seems beyond the scope of > > what the Sage notebook should do, there are plenty of 3rd party tools > > to do this cleanly and it's obvious (I hope) that sharing worksheets > > is sharing code. The %auto keyword could be bad though. > > I agree that downloading and mailing worksheets might be beyond the scope of > Sage but sharing within Sage certainly isn't. > > Also, for the download-and-share situation it would be very easy to add some > protection because Sage has all the relevant crypto-protocols available > anyway. It would send a clear signal that we care about security and would be > relatively easy to implement. > > Cheers, > Martin > > -- > name: Martin Albrecht > _pgp:http://pgp.mit.edu:11371/pks/lookup?op=get&search=0x8EF0DC99 > _otr: 47F43D1A 5D68C36F 468BAEBA 640E8856 D7951CCF > _www:http://www.informatik.uni-bremen.de/~malb > _jab: martinralbre...@jabber.ccc.de --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: barriers to community growth
Don't know if anyone's interested, but I've converted the sage vmware image to run on virtualbox, and had it running both under Ubuntu and Mac hosts a while ago. The steps I followed (apologies if it's wrong, I just scribbled it down as I was doing it, so may have left something) 1. Import the vmware disks into virtualbox, using the virtualbox media manager. Import both disks - disk.vmdk and swap.vmdk 2. Create a new ubuntu virtual machine and assign the new disks (disk.vmdk as primary master, swap.vmdk as primary slave) 3. Boot the virtual machine, click Esc to get to the grub menu, edit configuration (clicking 'e'), change sda1 to hda1 on the line that says kernel /boot/vmlinuz... root=/dev/sda1 ro quiet ... press enter, then click 'b' to boot 4. The virtual sage machine should load. After it does, log in with user: manage; sudo vi /boot/grub/menu.lst - change sda1 to hda1 and save 5. For networking, find out the Virtualbox MAC address for the interface, then edit the first line mac on /etc/iftab 6. reboot Yoav On Aug 12, 7:58 pm, Harald Schilly wrote: > On Aug 12, 8:04 pm, William Stein wrote: > > > > > At this point VirtualBox is like a massive breath of fresh air > > compared tovmware > > ... and don't forget, virtualbox has a python API. That might be > useful sometimes and fits perfectly. > > H --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Securing the Sage Notebook - MSc project draft paper
Following my previous posts, I've finished working on the draft MSc project draft paper. The paper includes two threat models I already shared previously, one for the Sage open source development process, and another of the application itself - focusing on the Sage Notebook. There's some further analysis, including a look into open source security issues in general, process isolation techniques, virtualisation etc. The paper is not very practical, i.e. it doesn't actually include any code or spells out exactly how things should be done, but I hope it can give the Sage project some ideas on the security threats and vulnerabilities it faces, and some high level suggestions on how to improve security. The current version is available at http://www.gingerlime.com/20090825_sage_msc_proj_draft.pdf I would highly appreciate any comments or thoughts on the paper, particularly if you feel I did injustice to Sage or made any serious mistakes. Yoav --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: notebook rewrite
On Aug 23, 4:51 pm, Alex Clemesha wrote: > On Fri, Aug 21, 2009 at 5:56 PM, Yoav Aner wrote: > > > Sounds like a great idea to me to de-couple the notebook from sage. > > Appengine is not the only option though (but maybe the cheapest at > > least for now), you could probably use an Amazon EC2 instance just as > > easily (and with some more facilities at your disposal, having a > > virtual server running). > > > Some more input from a security perspective: De-coupling the notebook > > and the processing engine is is one of the key recommendations on my > > threat model (http://groups.google.com/group/sage-devel/browse_thread/ > > thread/4bf627a69e0401c0 more details will be available soon as I hope > > to complete a draft of the entire paper, or the final version due by > > 4th September). > > I just read your paper > (http://www.gingerlime.com/sageNotebookThreatModel.pdf), > and it's very impressive how in depth you go, nice job. Thanks. I'm hoping to post a better and full draft of the MSc project paper very soon. > > I wanted to point out a couple of things related to de-coupling the notebook > from sage, and the current security situation in the sage notebook. > > A good portion of the 'security' related code (HTTP sessions) in the > sage notebook was written by > me (see 'sage/server/notebook/avatars.py' or > 'sage/server/notebook/run_notebook.py', etc) > and is old and crufty, and probably has some security vulnerabilities. > I've long since realized that trying to > write you own http sessions framework is a bad idea (obviously). > > As you point out, decoupling the notebook from sage, and using more > well established > frameworks (like Django) is an excellent way to improve security > because you have hundreds > to people testing, using, and writing the code for you. In fact, I True, but don't take django's security for granted. On the positive side, it's more likely django will get the necessary security 'attention' as so many people rely on it, but then also attackers will be more motivated to try to poke holes at it. Overall, my personal feeling is that it is the right direction. It provides a more solid and extensible framework to rely on, particularly with regards to using different authentication and authorisation options. > have started a project > called codenode (used to be called Knoboo, or sometime badly spelled as > Knooboo) > that is exactly what you speak of: a de-coupled sage notebook that use Django. > See here:http://codenode.organd here:http://github.com/codenode/codenode Codenode looks very sleek. Please forgive my ignorance, but why are there two projects? or perhaps, looking from a different angle, why doesn't sage simply use codenode as the front-end? I see there's a very healthy collaboration between the two projects, so wouldn't it be more sensible to join forces here, rather than maintaining two 'versions' of the notebook? > > > > > As far of having notebook running on appengine. It would probably be > > more straight-forward to use Robert's model - i.e. user->notebook on > > appengine->sage backend. Otherwise issues like user authentication > > (token mangement), synchronisation etc sound like a potential > > nightmare to me. This 'standard' architecture still has its own > > issues, particularly with appengine. I don't believe google allows to > > initiate ssh connections to a backend (for the pexpect interface), > > only web-based requests. Google also try to push users to have a > > google account to authenticate. It might be a good or a bad thing, > > depending on your perspective. Amazon EC2 in that respect gives you > > more flexibility I believe. I would personally avoid either from a > > vendor lock-in perspective, but that's just me. > > One of the "backends" of codenode can be google app engine, which > is awesome because you get the security benefits that comes along with > running arbitrary code on google's servers. You can try it out > right now here:http://live.codenode.org That's a very good idea from a 'short-term' security perspective, as google seem to have done a good job at placing security around untrusted code - and they take the risk to a great extent (if someone tries to run malicious code - it runs on google). The downside is of course the fact that you're locked into google. If users do try to run malicious code, they might block your account, they might ask you to pay increasing fees over time, and there's no real competition to their service at the moment. So from a slightly longer term security perspective, you might be bette
[sage-devel] Re: notebook rewrite
On Aug 22, 6:04 am, Thierry Dumont wrote: > Yoav Aner a écrit : > > > only web-based requests. Google also try to push users to have a > > google account to authenticate. It might be a good or a bad thing, > > depending on your perspective. Amazon EC2 in that respect gives you > > more flexibility I believe. I would personally avoid either from a > > vendor lock-in perspective, but that's just me. > > If we need to have a Google Account tu use this, Sage is no more a free > software...I cannot imagine this. Me neither. I don't imagine anybody would suggest running the notebook *only* on appengine. But if the notebook code is 100% appengine compatible, I suppose it would make a good idea for anyone who wants to use it there. They will still have to find a somewhere to run the backend server though... > But Appengine seems great, and Django is great. > Yours. > t. > > tdumont.vcf > < 1KViewDownload --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: notebook rewrite
Sounds like a great idea to me to de-couple the notebook from sage. Appengine is not the only option though (but maybe the cheapest at least for now), you could probably use an Amazon EC2 instance just as easily (and with some more facilities at your disposal, having a virtual server running). Some more input from a security perspective: De-coupling the notebook and the processing engine is is one of the key recommendations on my threat model (http://groups.google.com/group/sage-devel/browse_thread/ thread/4bf627a69e0401c0 more details will be available soon as I hope to complete a draft of the entire paper, or the final version due by 4th September). As far of having notebook running on appengine. It would probably be more straight-forward to use Robert's model - i.e. user->notebook on appengine->sage backend. Otherwise issues like user authentication (token mangement), synchronisation etc sound like a potential nightmare to me. This 'standard' architecture still has its own issues, particularly with appengine. I don't believe google allows to initiate ssh connections to a backend (for the pexpect interface), only web-based requests. Google also try to push users to have a google account to authenticate. It might be a good or a bad thing, depending on your perspective. Amazon EC2 in that respect gives you more flexibility I believe. I would personally avoid either from a vendor lock-in perspective, but that's just me. Another plus point for google appengine in terms of security - you get the added security that the appengine provides over and above standard python and you 'offload' any security problems with the notebook itself to google. However, if someone does hack your notebook, not sure whether google will simply shut you down (they probably will). Of course it only applies to the Notebook code itself, and even then it won't solve any XSS issues for you. It obviously won't help with any security issue relating to the backend either, which is where the sage 'soft-spot' is currently. Unrelated to appengine, using a web framework like django is a good idea from a security standpoint. It should give you much more flexibility in terms of user authentication and authorisation with many backend support. That alone would make a good security improvement too. On Jul 21, 7:53 pm, William Stein wrote: > On Tue, Jul 21, 2009 at 10:21 AM, Ondrej Certik wrote: > > > On Tue, Jul 21, 2009 at 10:44 AM, William Stein wrote: > > > > On Tue, Jul 21, 2009 at 9:39 AM, Ondrej Certik wrote: > > > >> On Tue, Jul 21, 2009 at 1:58 AM, Robert > > >> Bradshaw wrote: > > > >>> On Jul 20, 2009, at 9:02 PM, Ondrej Certik wrote: > > > Well, let me say that I really like to run things on the appengine, > > rather than to constantly maintain our own servers. I see no reason > > why the notebook cannot run on the appengine, only the AJAX would talk > > to our own server with Sage to actually evaluate the cells (and for > > many people, I think appengine itself could actually be enough). I > > have to think though what the best way to transfer data to the > > database with worksheets is though. > > > >>> +1, though for Sage we rely heavily on compiled code. I wonder how > > >>> much introduced latency there would be if the backend were served on > > >>> a university computer, and the front end in appengine. > > > >> I think none, it would be as fast as it is now (e.g. the browser > > >> communicating directly with the engine). > > > > How is it "none", given that there are now three separate computers > > > involved instead of two? There would have to be a little extra > > > What I meant is that the latency in typing 1+1 into the cell and get > > the output cell saying 2 should not change at all, because the > > javascript in the browser sends a POST request to the Sage engine > > (e.g. a web app with the url interface, just like it is now) and it > > returns it back directly to the browser. > > Thanks for the clarification, since I clearly misunderstood you. Robert > said "backend were served on a university computer, and the front end in > appengine." You seem to be eliminating the frontend completely when > computations are done. I.e., do you imagine appengine *just* serving some > javascript and a database interface, and basically nothing else? So what > would happen is the following: > > 1. User visits the appengine server and gets the javascript for the sage > notebook (after authenticating). > 2. User starts a worksheet. The javascript in the browser requests a "sage > engine token", and the appengine allocates a "compute engine" somewhere for > use by that user's worksheet. > 3. The user types "factor(2^197-1)" and their javascript *directly* connects > to the compute engine and runs the code "factor(2^197-1)". It also connects > to the appengine and stores that "factor(2^197-1)" was input in the > database. > 4. The javascript in the browser gets back the answer to the factor
[sage-devel] Re: Sage Notebook Threat Model - draft
The other chapters are where the REALLY interesting stuff is. This is just a taste to get you hooked... :) On a more seriously note - other chapters cover the previous threat model of the Sage development process (see other post), as well as information about the threat model methodology, background e.g. open source security concerns in general and some info on Sage itself. I'm hoping to write a more comprehensive summary for the threat model, with a list of key issues and recommendations, particularly for the higher level risks / core issues. I realise the format / presentation of the threat model pdf is a little dull and perhaps tedious to read through, but this is the key analysis output. I'll try to share other segments of my project paper as and when they take better form. Cheers Yoav On Aug 9, 11:19 pm, David Joyner wrote: > > To me this looks great and very valuable but since the pdf starts with > chapter 4, > I'm curious what the other chapters say:-) > > > > > Cheers > > Yoav --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Sage Notebook Threat Model - draft
This is a follow-up on my previous post on http://groups.google.com/group/sage-devel/msg/1f851e27f5500712 - which (for obvious reasons) generated overwhelming response :) I have now completed the first 'official' draft of the Sage Notebook threat model. It is available on http://www.gingerlime.com/sageNotebookThreatModel.pdf I am hoping this threat model is a little more 'juicy', as it covers real vulnerabilities and threats to the Sage Notebook itself. I'm hoping at least some of you might find it useful, and am really looking forward to any feedback you might have. I must have made some mistakes in the analysis, failed to cover certain areas, or paid too much attention to others, the risk rating may be inaccurate etc. Any input would be greatly appreciated. If you require more background information on the methodology I used, I'd be happy to share it, but most of it is still work in progress as part of my project. Cheers Yoav --~--~-~--~~~---~--~~ To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Sage development process Threat Model
Some updates on the sage notebook security review project I'm working on: First threat model for the development process: The model I created might apply to other open source applications or systems, or even not purely open source ones, as it is focused on the development process, code changes / contributions, and distribution of code and packages. There isn't anything radically new or that people weren't fully aware of before, but I think it does help highlight some potential threats, even in the existing development process which is fairly robust. From what I picked up at the Sage Days 16 conference and talking to Martin Albrecht and William Stein, every bit of code must get reviewed and 'earn' its way into the codebase. However, I think the threat model shows there are still ways of bypassing this process (e.g. faking positive reviews, modifying code or Trac records after review etc). I'm not entirely sure how feasible or likely these threats, but I think they are still valid. They probably won't rate very high on the list of priorities, but worth capturing. The model is based on the Microsoft SDL (Security Development Lifecycle) methodology, itself drawing from other methodologies like the one in the Threat Modeling book (again by MS press). The model is based around a Data Flow Diagram (DFD), which lists the main components and the flow of information between them: e.g. People, processes, storage, data links. Whilst my initial 'gut feeling' was that Microsoft isn't exactly the best source for information when it comes to threat modeling, particularly for open source systems, I have to say that most of it makes sense, and seems to apply. It's not perfect, but seems like a good way to go through a checklist of items and think about the threats that may apply to each. It is built around Data Flows (and there's a tool which rather neatly allows you to draw the Data Flows and then use it to list threats). Please find a link to the threat model report generated by the MS tool (and then converted fairly crudely to LaTeX). I will carry on working and trying to produce a threat model for the core elements, i.e. sage notebook and the usage (as opposed to dev) processes. This is still work in progress obviously. Please have a look at the PDF for more detailed information. It can be downloaded from http://www.gingerlime.com/sageosThreatModel.pdf I'm assuming some of the information I captured is inaccurate, wrong, irrelevant etc. Hopefully some issues will be highlighted and I'll update the model. Any other feedback, ideas, suggestions will be greatly appreciated. Cheers Yoav --~--~-~--~~~---~--~~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: Securing Sage Notebook - MSc project
Thank you for useful points / comments and for the pointers to how sage works in particular. I certainly have more information to get started now, though I'm sure I'll end up with more questions sooner or later... I'm guessing the answer is no, but are there any high or lower level diagrams to help understand the architecture (e.g. server pool processes, OS processes, web front-end and their interfaces etc, how it all sits together)? I mean other than going through the code? I'll start looking at the code Martin and Robert mentioned though. That's already of great help! Regarding working out the security threats / vulnerabilities / scenarios - I think it's important to try to separate common vulnerabilities from sage/notebook specific ones. Booting from a CD and gaining direct access to the filesystem which Dave mentioned, or accessing localhost sockets which Robert referred to are not less important, but generic concerns tend to have generic solutions or approaches. However, Sage/Notebook specific vulnerabilities, which are inherent to the way Sage was designed and built and from the functionality it provides, would perhaps be of more interest / challenge to solve. I hope that this project can bring more 'value' by trying to address those. Having said that, some time the biggest 'value for money' can be gained by something as simple as changing a default parameter, even if it's something trivial like setting a process to listen on 127.0.0.1:80 instead of 0.0.0.0:80. I would certainly want to consider all threats, generic or otherwise. Thanks again for your replies. I'll try to figure out more on my own now, and come back with more specific questions. Yoav p.s hopefully more people would share their thoughts so this thread isn't dead yet... --~--~-~--~~~---~--~~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Re: Securing Sage Notebook - MSc project
I'm still rather lost to be honest and in need of some guidance. Could anybody please suggest what's the best way to work out (map) the software architecture of sage in terms of: Software components/objects Interfaces (User interfaces, functional specifications, object relationship/hierarchy) Data flows, communication/storage Libraries and underlying OS functions (e.g. authentication, authorisation, filesystem, process memory and cpu space, external directories e.g. LDAP?) Any other comments? Am I posting on the right group? Did I say something wrong/offending/inappropriate? Am I asking too many questions? (ok, I'll stop there...) Thanks in advance Yoav On Jun 3, 10:18 am, Yoav Aner wrote: > Hello all, > > This is my first post. My name is Yoav, and I'm studying for an > Information Security MSc at Royal Holloway, University of London. I'm > starting to work on a project proposed by Martin Albrecht, to look at > several security aspects of the Sage Notebook server. > > The MSc project is primarily intended to produce a paper, rather than > write code or deliver any functionality (and my programming skills are > limited anyway). Nevertheless, I'm hoping that at least some of the > work would benefit the Sage community, at the very least in suggesting > some security improvements. > > Martin has kindly pointed me to a couple of threads on the > subject:http://groups.google.com/group/sage-devel/browse_thread/thread/06735e... > andhttp://groups.google.com/group/sage-support/browse_thread/thread/1351... > > Martin highlighted two primary areas on his project proposal: > > 1. Denial of Service - which is apparently relatively easy considering > access is granted via the web to the shell and / or spawning processes > via external system calls (e.g. python os.system etc). Denial of > Service attacks are not limited to the Sage platform itself, but it > can be used as a platform to launch attacks on other systems. > 2. Using Sage Notebook in an academic environment, where stricter > access control to data may be necessary. For example, to prevent one > student tampering with or accessing other's work. > > The project will obviously try to cover those, and possibly other (in) > security areas if they can be identified. I would therefore like to > start by performing some form of a threat modeling / assessment, to > discover other areas which security needs consideration or > improvements. > > I have sage running on a virtual machine and tried to read through the > various groups and documentation, but still trying to figure out the > sage notebook architecture, components, interfaces etc. Any help, > suggestions, ideas or comments are most welcome. I would try to share > my own thoughts and project progress with you and hope to contribute > to the project as much as I can. > > Yoav --~--~-~--~~~---~--~~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---
[sage-devel] Securing Sage Notebook - MSc project
Hello all, This is my first post. My name is Yoav, and I'm studying for an Information Security MSc at Royal Holloway, University of London. I'm starting to work on a project proposed by Martin Albrecht, to look at several security aspects of the Sage Notebook server. The MSc project is primarily intended to produce a paper, rather than write code or deliver any functionality (and my programming skills are limited anyway). Nevertheless, I'm hoping that at least some of the work would benefit the Sage community, at the very least in suggesting some security improvements. Martin has kindly pointed me to a couple of threads on the subject: http://groups.google.com/group/sage-devel/browse_thread/thread/06735e88260cc079/5a341e48670c5465 and http://groups.google.com/group/sage-support/browse_thread/thread/1351e426eb55d6e2 Martin highlighted two primary areas on his project proposal: 1. Denial of Service - which is apparently relatively easy considering access is granted via the web to the shell and / or spawning processes via external system calls (e.g. python os.system etc). Denial of Service attacks are not limited to the Sage platform itself, but it can be used as a platform to launch attacks on other systems. 2. Using Sage Notebook in an academic environment, where stricter access control to data may be necessary. For example, to prevent one student tampering with or accessing other's work. The project will obviously try to cover those, and possibly other (in) security areas if they can be identified. I would therefore like to start by performing some form of a threat modeling / assessment, to discover other areas which security needs consideration or improvements. I have sage running on a virtual machine and tried to read through the various groups and documentation, but still trying to figure out the sage notebook architecture, components, interfaces etc. Any help, suggestions, ideas or comments are most welcome. I would try to share my own thoughts and project progress with you and hope to contribute to the project as much as I can. Yoav --~--~-~--~~~---~--~~ To post to this group, send email to sage-devel@googlegroups.com To unsubscribe from this group, send email to sage-devel-unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URLs: http://www.sagemath.org -~--~~~~--~~--~--~---