ShenanigaNFS


NameShenanigaNFS JSON
Version 0.2 PyPI version JSON
download
home_pagehttps://github.com/JordanMilne/ShenanigaNFS
SummaryLibrary for making somewhat conformant NFS and SunRPC clients and servers
upload_time2023-11-13 17:32:22
maintainer
docs_urlNone
authorJordan Milne
requires_python>=3.7
license
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # ShenanigaNFS

Python library for making somewhat conformant-ish low-level NFSv2/3 clients and servers.
Includes tools for making NFS servers with mount-specific FS state and a 
VFS API similar to FUSE for making custom filesystems.

Primarily meant for use-cases where a real FUSE filesystem shared over NFS
wouldn't be appropriate, such as when each client _must_ receive a distinct
filesystem. Authentication is intentionally unsupported as are file locking and
transport encryption.

## Features

* SunRPC IDL -> Client / Server stub generator (outputs type hints too!)
* RPCBind / PortMapper server implementation
* * Optional, can register services with system RPCbind if preferred
* Basic NFSv2 and NFSv3 implementations
* `asyncio`-based networking, TCP-only for the moment
* Example filesystems (SimpleFS, ZipFS)

## Is this appropriate for production use?
No.

I needed the ability to expose an unauthenticated, world-writable filesystem
to the public internet, and each mounter needed to have their writes only 
accessible to themselves, and it needed to be somewhat hardened against DoS.
If you just need a user mode NFS server, I recommend NFS Ganesha.

Otherwise, the tools are low-level enough to be useful for reverse engineering
and creating intentionally misbehaved filesystems.

## Running RPCBind as non-root
See <https://stackoverflow.com/a/414258> for how to allow your script to bind 
to low ports. In short:

> `sudo setcap 'cap_net_bind_service=+ep' /path/to/python`

## Acknowledgements

* [PineFS](https://www.panix.com/~asl2/software/Pinefs/) - Used as the basis for the 
  XDR and IDL parsing code
* [go-nfs](https://github.com/willscott/go-nfs) - Unrelated, but seems like we started writing 
  them at the same time. Also it looks nice and is probably more stable, give it a look.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/JordanMilne/ShenanigaNFS",
    "name": "ShenanigaNFS",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "",
    "author": "Jordan Milne",
    "author_email": "JordanMilne@users.noreply.github.com",
    "download_url": "https://files.pythonhosted.org/packages/5a/82/e690c02bc4dcfd2f642b14411306b9709f14228ebb84e315be9caff008e9/ShenanigaNFS-0.2.tar.gz",
    "platform": null,
    "description": "# ShenanigaNFS\n\nPython library for making somewhat conformant-ish low-level NFSv2/3 clients and servers.\nIncludes tools for making NFS servers with mount-specific FS state and a \nVFS API similar to FUSE for making custom filesystems.\n\nPrimarily meant for use-cases where a real FUSE filesystem shared over NFS\nwouldn't be appropriate, such as when each client _must_ receive a distinct\nfilesystem. Authentication is intentionally unsupported as are file locking and\ntransport encryption.\n\n## Features\n\n* SunRPC IDL -> Client / Server stub generator (outputs type hints too!)\n* RPCBind / PortMapper server implementation\n* * Optional, can register services with system RPCbind if preferred\n* Basic NFSv2 and NFSv3 implementations\n* `asyncio`-based networking, TCP-only for the moment\n* Example filesystems (SimpleFS, ZipFS)\n\n## Is this appropriate for production use?\nNo.\n\nI needed the ability to expose an unauthenticated, world-writable filesystem\nto the public internet, and each mounter needed to have their writes only \naccessible to themselves, and it needed to be somewhat hardened against DoS.\nIf you just need a user mode NFS server, I recommend NFS Ganesha.\n\nOtherwise, the tools are low-level enough to be useful for reverse engineering\nand creating intentionally misbehaved filesystems.\n\n## Running RPCBind as non-root\nSee <https://stackoverflow.com/a/414258> for how to allow your script to bind \nto low ports. In short:\n\n> `sudo setcap 'cap_net_bind_service=+ep' /path/to/python`\n\n## Acknowledgements\n\n* [PineFS](https://www.panix.com/~asl2/software/Pinefs/) - Used as the basis for the \n  XDR and IDL parsing code\n* [go-nfs](https://github.com/willscott/go-nfs) - Unrelated, but seems like we started writing \n  them at the same time. Also it looks nice and is probably more stable, give it a look.\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "Library for making somewhat conformant NFS and SunRPC clients and servers",
    "version": "0.2",
    "project_urls": {
        "Homepage": "https://github.com/JordanMilne/ShenanigaNFS"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "995ccbfebf5133adc1c900271ba97d2b210e2838ed63fbfb40e917deea306758",
                "md5": "5aa0b2f52694ac41c65d97515d646c79",
                "sha256": "b222cebf92fa1ee575624933475c8331fc1c8298b63052c433807011c1a16bbe"
            },
            "downloads": -1,
            "filename": "ShenanigaNFS-0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5aa0b2f52694ac41c65d97515d646c79",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 55624,
            "upload_time": "2023-11-13T17:32:20",
            "upload_time_iso_8601": "2023-11-13T17:32:20.448877Z",
            "url": "https://files.pythonhosted.org/packages/99/5c/cbfebf5133adc1c900271ba97d2b210e2838ed63fbfb40e917deea306758/ShenanigaNFS-0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "5a82e690c02bc4dcfd2f642b14411306b9709f14228ebb84e315be9caff008e9",
                "md5": "8c6e6e1e253689784cc56e9265eae96b",
                "sha256": "994782c8947b35eac15d540d58cf60b9dcc1024a18f2f0cadd3baa5b0d977601"
            },
            "downloads": -1,
            "filename": "ShenanigaNFS-0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "8c6e6e1e253689784cc56e9265eae96b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 45896,
            "upload_time": "2023-11-13T17:32:22",
            "upload_time_iso_8601": "2023-11-13T17:32:22.023098Z",
            "url": "https://files.pythonhosted.org/packages/5a/82/e690c02bc4dcfd2f642b14411306b9709f14228ebb84e315be9caff008e9/ShenanigaNFS-0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-11-13 17:32:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "JordanMilne",
    "github_project": "ShenanigaNFS",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "shenaniganfs"
}
        
Elapsed time: 0.55098s