Skip to main content

Windows and Linux compatible chmod

Project description

oschmod

Python chmod that works on Windows and Linux

Mergify

Use oschmod to set permissions for files and directories on Windows, Linux and macOS. While Python's standard libraries include a simple command to do this on Linux and macOS (os.chmod()), the same command does not work on Windows.

Usage

The problem is that on Linux and macOS, you can easily set distinct permissions for a file's owner, group, and all others. It takes one command and one mode, or, in other words, a number representing bitwise permissions for reading, writing, and executing. On Linux and macOS, you use the os module and os.chmod().

Misleadingly, on Windows, os.chmod() does not have the same effect and does not give a warning or error. You think you've protected a file but you have not.

For example, on Linux or macOS, to give a file owner read, write, and execute permissions and deny the group and others any permissions (i.e., equivalent of 700), you can make a single call:

import os
import stat
os.chmod('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)

Running the same command on Windows does not achieve the same results. The owner isn't given any permissions and the group and others are not denied any permissions. All you can do is restrict anyone from deleting, changing or renaming the file. That's nothing like what os.chmod() does.

However, using oschmod you can use the same command on Windows, macOS or Linux and get the same results:

import oschmod
oschmod.set_mode('myfile', stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)

CLI

The oschmod CLI works similarly to chmod albeit with fewer options:

$ oschmod -h
usage: oschmod [-h] [-R] mode object

Change the mode (permissions) of a file or directory

positional arguments:
  mode        octal mode of the object
  object      file or directory

optional arguments:
  -h, --help  show this help message and exit
  -R          apply mode recursively

For example, to open up a file to the world, you can run this command:

$ oschmod 777 file_name

As another example, you can lock down a file to just the file owner:

$ oschmod 700 file_name

Installation

$ pip install oschmod

Changelog

0.2.4

Commit Delta: Change from 0.2.2 release

Released: 2020.04.21

Summary:

  • Add command line interface (CLI).

0.2.2

Commit Delta: Change from 0.2.0 release

Released: 2020.04.21

Summary:

  • Fix issue with account lookup failing with error (No mapping between account names and security IDs was done.).

0.2.0

Commit Delta: Change from 0.1.5 release

Released: 2020.04.20

Summary:

  • Add recursive version of oschmod.set_mode(): oschmod.set_mode_recursive()

0.1.5

Commit Delta: Change from 0.1.4 release

Released: 2020.04.17

Summary:

  • Create Linux version of permissions test (oschmod.perm_test())

0.1.4

Commit Delta: Change from 0.1.0 release

Released: 2020.04.17

Summary:

  • Revise Windows to keep permissions an object already has for SYSTEM/NT AUTHORITY and don't include those permissions in mode calculation.
  • Fix various minor cosmetic issues.

0.1.0

Commit Delta: Change from 0.0.0 release

Released: 2020.04.15

Summary:

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

oschmod-0.2.6.tar.gz (16.1 kB view hashes)

Uploaded Source

Built Distribution

oschmod-0.2.6-py2.py3-none-any.whl (12.2 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page