{ "info": { "author": "Robert Lujo", "author_email": "trebor74hr@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: POSIX", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python", "Topic :: Software Development", "Topic :: System :: Shells", "Topic :: System :: Software Distribution", "Topic :: System :: Systems Administration", "Topic :: System :: Systems Administration :: Authentication/Directory", "Topic :: System :: System Shells", "Topic :: Utilities" ], "description": "permset\n=======\n\nSimple standalone utility script to manage \\*nix permissions on file and directory trees based\non patterns.\n\nInstallation\n------------\nAs a standalone script - go to some PATH visible dir and do:\n\n wget https://raw.github.com/trebor74hr/permset/master/permset/base.py -O permset && chmod u+x permset\n\nOr as a python package using [pip](http://www.pip-installer.org/en/latest/):\n\n pip install permset\n\nTry it out:\n\n permset\n\nMore details about installation options at the end of the page.\n\n*Us it on your own risk - this sw is still in alpha stage*. \n\nLicence and disclaimer in [LICENCE](https://github.com/trebor74hr/permset/blob/master/LICENCE) \nfile.\n\nRequirements\n------------\n\n* \\*nix (linux, osx, bsd, unix ...).\n* Python 2.6+ (json module used).\n\nUsage\n-----\n\nUsage:\n\n permset [options] []\n\n### Arguments:\n\n* when dir is not specified, current folder is used (.)\n* script uses dir/.permset to save/check against permission setup.\n* when no options is set - script calculates patterns and prints them\n out. If dir/.permset exists - calculated patterns and saved patterns\n are compared.\n\n### Options\n\nOptions:\n\n -h, --help show this help message and exit\n -o FILE, --output=FILE where to write output perm.setup to FILE. Option sets\n save option too.\n -s, --save save perm.setup to new file or overwrite existing\n -t, --set set permissions by actual perm.setup\n -v, --verbose verbose output\n\n### Variable substitution\n\n Pattern can have variables for user or group in saved patterns. Example:\n\n ,[\"F\", \"S\", null, \"$user|admin|rw-------\", ...\n\n Variables are read from json ~/.permset.config file. Example:\n\n { \"$user\": \"jo\" } \n\nCommon workflow \n---------------\nCommon workflow:\n\n1. calculate permission patterns (permset), save them to root/.permset\n (permset --save)\n2. compare current permissions with saved patterns \n (permset), if any difference found, apply patterns (permset --set) \n or overwrite existing patterns with new one (permset --save)\n\n\nPattern codes by columns\n------------------------\nPattern codes by columns:\n\n1. D - directory pattern, F - files pattern\n2. P - is pattern, S - single file/directory\n3. if pattern: R - recursive, L - current directory only\n4. mark - user|group|permission\n5. file/directory the entry applies to\n6. (opt) file/directory depth - 0 is the root\n\nExample session\n---------------\nSome django project:\n\n user @ ~/env/proj/src/python/proj$ permset\n - - - -------------------- ----------------------------------------\n F P R user1|staff|rw-r--r-- .\n F P R user1|admin|rw-r--r-- ./sites\n F S - user1|admin|rw------- ./sites/person/local_settings.py\n F S - user1|admin|rw------- ./sites/person/local_settings.pyc\n F S - user1|admin|rw------- ./sites/company/local_settings.py\n F S - user1|admin|rw------- ./sites/company/local_settings.pyc\n - - - -------------------- ----------------------------------------\n D P R user1|staff|rwxr-xr-x .\n D P R user1|admin|rwxr-xr-x ./sites\n\n Stats: F => 6 / 101 = 5.9 % | D => 2 / 14 = 14.3 %\n\n Call the script with --save option to save permission patterns.\n\nSave the patterns:\n\n user @ ~/env/proj/src/python/proj$ permset --save\n Saved in ./.permset\n\nCheck current permissions with saved patterns:\n\n user @ ~/env/proj/src/python/proj$ permset\n Permission setup './.permset' matched.\n\nChange permission for some file:\n\n user @ ~/env/proj/src/python/proj$ chmod u+x r.log\n\nCheck again - difference is noticed:\n\n user @ ~/env/proj/src/python/proj$ permset\n Permission differs from ./.permset setup.\n === Number of patterns differs (9!=10)\n\n Call the script with:\n - option --set - to reset everything to saved setup, or with\n - option --save - to overwrite setup with current permission patterns\n - option --verbose - to see details\n\nSee details:\n\n user @ ~/env/proj/src/python/proj$ permset --verbose\n Permission differs from ./.permset setup.\n Setup saved in ./.permset:\n - - - -------------------- ----------------------------------------\n F P R user1|staff|rw-r--r-- .\n F P R user1|admin|rw-r--r-- ./sites\n F S - user1|admin|rw------- ./sites/person/local_settings.py\n F S - user1|admin|rw------- ./sites/person/local_settings.pyc\n F S - user1|admin|rw------- ./sites/company/local_settings.py\n F S - user1|admin|rw------- ./sites/company/local_settings.pyc\n - - - -------------------- ----------------------------------------\n D P R user1|staff|rwxr-xr-x .\n D P R user1|admin|rwxr-xr-x ./sites\n\n Stats: F => 6 / 101 = 5.9 % | D => 2 / 14 = 14.3 %\n\n Directory's current permission patterns:\n - - - -------------------- ----------------------------------------\n F P R user1|staff|rw-r--r-- .\n F S - user1|staff|rwxr--r-- ./r.log\n F P R user1|admin|rw-r--r-- ./sites\n F S - user1|admin|rw------- ./sites/person/local_settings.py\n F S - user1|admin|rw------- ./sites/person/local_settings.pyc\n F S - user1|admin|rw------- ./sites/company/local_settings.py\n F S - user1|admin|rw------- ./sites/company/local_settings.pyc\n - - - -------------------- ----------------------------------------\n D P R user1|staff|rwxr-xr-x .\n D P R user1|admin|rwxr-xr-x ./sites\n\n Stats: F => 7 / 101 = 6.9 % | D => 2 / 14 = 14.3 %\n\n === Number of patterns differs (9!=10)\n\n Call the script with:\n - option --set - to reset everything to saved setup, or with\n - option --save - to overwrite setup with current permission patterns\n - option --verbose - to see details\n\nSet all files permissions to match patterns:\n\n user @ ~/env/proj/src/python/proj$ permset --set\n Permission differs from ./.permset setup.\n === Number of patterns differs (9!=10)\n === Following commands needs to be executed to apply saved patterns:\n chown -h user1 $(find . -type f)\n chgrp -h staff $(find . -type f)\n chmod -h u+rw,u-x,g+r,g-wx,o+r,o-wx $(find . -type f)\n ...\n chown -h user1 $(find . -type d)\n chgrp -h staff $(find . -type d)\n chmod -h u+rwx,g+rx,g-w,o+rx,o-w $(find . -type d)\n ...\n chmod -h u+rwx,g+rx,g-w,o+rx,o-w $(find ./sites -type d)\n === Do you want to continue (y/n)? y\n chown -h user1 $(find . -type f)\n ...\n chmod -h u+rwx,g+rx,g-w,o+rx,o-w $(find ./sites -type d)\n === Done\n\nCheck again:\n\n user @ ~/env/proj/src/python/proj$ permset\n Permission setup './.permset' matched.\n\n\nLogic behind patterns\n---------------------\nShortly:\n\n * files and directory permissions are processed separately - due different x interpretation\n * patterns are searched for - recursively (R) and locally - current folder only\n (L). For the files/dirs that don't match current pattern - one special pattern entry for that file/dir is added (S).\n * patterns forumula: if more than 2/3 of files or directories have the same\n mark (user/group/permissions) that will become pattern\n\nFile .permset\n------------------\nFile .permset contains saved patterns as list of lists in JSON format:\n\n [\n [\"F\", \"P\", \"R\", \"user1|staff|rw-r--r--\", \".\", 0, [6, 7], [74, 101]]\n ,[\"F\", \"S\", null, \"user1|staff|rwxr--r--\", \"./permset\", 0, null, null]\n ...\n ,[\"D\", \"P\", \"R\", \"user1|staff|rwxr-xr-x\", \".\", 0, [4, 5], [11, 14]]\n ,[\"D\", \"P\", \"R\", \"user1|admin|rwxr-xr-x\", \"./sites\", 1, [2, 2], [2, 2]]\n ]\n \nThe file can be easily manually edited, as long as it is valid JSON format with valid permset options.\n\nInternals and potential performance issues\n---------------------------------------------------\nThe script is based on simple logic, done in [python](http://www.python.org/) programing language, internally uses python builtin [json](http://json.org/) parser and python's builtin [sqlite](https://sqlite.org/) db engine (as in-memory db). \n\nThe script intended usage is for small to medium sized directory trees. For large ones the script probably won't perform well.\n\nDevelopment\n-----------\nTests can be found in package file tests/tests.py.\n\n\nIssue reporting\n---------------\nReport issue on [github](https://github.com/trebor74hr/permset/issues).\n\nLicence and disclaimer\n----------------------\nLicence and disclaimer in [LICENCE](https://github.com/trebor74hr/permset/blob/master/LICENCE) file.\n\nInstallation options\n--------------------------\n\n### Option 1 - standalone script\nAs a standalone script - go to some PATH visible dir and do:\n\n wget https://raw.github.com/trebor74hr/permset/master/permset/base.py -O permset && chmod u+x permset\n\n### Option 2 - pip way\nOr as a python package using [pip](http://www.pip-installer.org/en/latest/):\n\n pip install permset\n\n### Option 3 - distutils way\n * download latest release from http://pypi.python.org/pypi/permset\n * unpack & go to folder\n * run: python setup.py install\n\nContact\n-------\nIf you want to contact author - mail can be found in \n[LICENCE](https://github.com/trebor74hr/permset/blob/master/LICENCE) file.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/trebor74hr/permset", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "permset", "package_url": "https://pypi.org/project/permset/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/permset/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/trebor74hr/permset" }, "release_url": "https://pypi.org/project/permset/0.22/", "requires_dist": null, "requires_python": null, "summary": "Simple standalone utility script to manage \\*nix permissions on file and directory trees based on patterns.", "version": "0.22" }, "last_serial": 796172, "releases": { "0.21": [ { "comment_text": "", "digests": { "md5": "56ef5e86686e41e784195490c05af8d1", "sha256": "953646a9edcd7cbd481f26ecd03090eebf212e5ccbb4332a61f0d2e7ef6dbc33" }, "downloads": -1, "filename": "permset-0.21.tar.gz", "has_sig": false, "md5_digest": "56ef5e86686e41e784195490c05af8d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11346, "upload_time": "2012-12-12T18:23:55", "url": "https://files.pythonhosted.org/packages/54/3c/a8400e471b3413c83647f38fe7e394c50d4af34f9f995c0125e230ef9336/permset-0.21.tar.gz" } ], "0.22": [ { "comment_text": "", "digests": { "md5": "8e65ee53810380c7ef1d85bbd1de9ad7", "sha256": "4a986582b2c434a04deee3766c382259b2f8d5481f96f37a0249775390d22406" }, "downloads": -1, "filename": "permset-0.22.tar.gz", "has_sig": false, "md5_digest": "8e65ee53810380c7ef1d85bbd1de9ad7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12333, "upload_time": "2012-12-14T22:17:00", "url": "https://files.pythonhosted.org/packages/da/ba/3ae01ba7a332f17dac4fd87d161378e6da9f2766ac0dac20d75013942c7e/permset-0.22.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8e65ee53810380c7ef1d85bbd1de9ad7", "sha256": "4a986582b2c434a04deee3766c382259b2f8d5481f96f37a0249775390d22406" }, "downloads": -1, "filename": "permset-0.22.tar.gz", "has_sig": false, "md5_digest": "8e65ee53810380c7ef1d85bbd1de9ad7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12333, "upload_time": "2012-12-14T22:17:00", "url": "https://files.pythonhosted.org/packages/da/ba/3ae01ba7a332f17dac4fd87d161378e6da9f2766ac0dac20d75013942c7e/permset-0.22.tar.gz" } ] }