To change permissions using the command line, enterprise Mac administrators should use the chmod command. Again, as with the chown command, when using the chmod command to change files your user. In this app you can also see off-line a great tutorial about chmod by Dave Eisenberg’s, tutorial licensed under the 'Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License'. In the section 'About' of the app, you can share your opinion either directly through the app using the twitter. Thankfully, chmod can act on multiple files. Suppose you wish to change all text files that have a txt extension. Simply combine the chmod command with the appropriate file list filter, such as: chmod go+wx.txt; This enables write and execute permissions for Groups and Others to all text files in the current directory. The chmod command can, after all, be a little intimidating if you haven’t used it before not to mention that it can really mess up your system if you don’t use it quite right. Mac users can find comfort knowing they can easily adjust the read, write, and execute permission on any file(s) or folder using the free BatChmod. This app wraps a GUI around the terminal command so that you only have to select the options you want, and it will do all of the dirty work for you. In Short: chmod +x on a file (your script) only means, that you'll make it executable. Right click on your script and chose Properties- Permissions- Allow executing file as program, leaves you with the exact same result as the command in terminal. If a file you want to change permissions on is located within the systems directory you may need to be root, like so: (be careful, while using.

Home > Articles > Apple > Operating Systems

  1. Managing Permissions via Command Line
< BackPage 7 of 11Next >
This chapter is from the book
Apple Training Series: Mac OS X Support Essentials v10.6: A Guide to Supporting and Troubleshooting Mac OS X v10.6 Snow Leopard

This chapter is from the book

This chapter is from the book

Apple Training Series: Mac OS X Support Essentials v10.6: A Guide to Supporting and Troubleshooting Mac OS X v10.6 Snow Leopard

Managing Permissions via Command Line

Viewing and modifying file system permissions in the command line is both much richer and more complicated than in the Finder. The Finder has streamlined ownership, permissions, and ACLs, providing only the most common features that users require. However, the command line offers every conceivable ownership and permissions option. Further, the command line often provides more than one method for performing identical permissions tasks.

Viewing Traditional UNIX Permissions

Once again, the ls command is your primary tool for viewing file and folder information in the command line. The ls command has many options for viewing nearly any file or folder attribute. You can learn more about all the options available to ls from its manual entry page. Here, you will be presented with a few fundamental permissions viewing options.

The most basic ls option for viewing file and folder ownership and permissions is –l:

The first string of characters at the beginning of each line is shorthand for the item type and permissions. The following information appears from left to right: the number of hard links associated with the item (for most users, this particular bit will be trivial information), the assigned owner, the assigned group, the last modification date, and finally the item’s name.

The syntax for the abbreviated information section is:

  • The first character is item type: - for file, d for folder, and l for symbolic link.
  • The next three characters indicate the owner’s permissions: - for no access, r for read access, w for write access, and x for file execute access or folder browsing access.
  • The middle set of three rwx or - characters indicate the group’s permissions.
  • The final set of three rwx or - characters indicate everyone else’s permissions.
  • Optionally, there may be a + at the end to indicate that the item has ACL rules applied to it, or an @ at the end to indicate that the item has extended attributes.

The execute privilege attribute x has not been introduced yet, but it is the third standard UNIX privilege attribute after read and write. The execute privilege is enabled on files that are commands and applications (or folders that contain application bundles), to indicate that the item contains executable software code. The execute privilege is also required on normal folders to access the contents of the folder. The Finder doesn’t show you when the execute privilege is used, but it will properly manage the execute privilege when you make permissions changes using the Get Info window.

Viewing Access Control Lists (ACLs)

The ACL technology is more advanced than traditional UNIX-style permissions because it allows for an arbitrary number of user and group permissions rules per item. Each permissions rule is known as an Access Control Entry (ACE). Every file and folder on the system can have an unlimited list of ACE rules, hence the “list” in ACLs.

From the command line, Mac OS X’s ACL implementation provides more than a dozen unique privilege attribute types and lets you define each as a specific allow or deny rule. In other words, you can assign an item an unlimited number of user or group rules, or ACEs, which can be used to allow or deny any of the following privilege attributes:

  • Administration—Administration attributes, which define a user’s or group’s ability to make permissions changes, include change privileges and change ownership.

  • Read—Read attributes define a user or group’s ability to read items and include read attributes, read extended attributes, read file data or list folder contents, execute file or traverse folder, and read permissions.

  • Write—Write attributes define a user’s or group’s ability to make changes and include write attributes, write extended attributes, read file data or create files in folder, append file data or create new subfolder inside folder, delete item, and delete subfolders and files.

Furthermore, each ACE for a folder can include a static inheritance rule that defines whether the folder’s permissions also apply to new items placed in the folder. Inheritance attributes include the following: no inheritance, apply to just new items in this folder, apply to any new child folders, apply to any new child files, and apply to all descendants of this folder.

To view an item’s ACLs alongside their permissions, simply add the -e option to the -l option:

Modifying File Permissions via Command Line

You will use two primary commands for changing file and folder permissions in the command line: chown for changing ownership and chmod for changing privileges.

Changing Ownership via Command Line

Short for “change ownership,” chown will let you change the owner and group associated with a file or folder. Using chown often requires root access, so this command is almost always preceded by the sudo command. To use chown, enter the new owner’s name, followed optionally by a colon and the new group name, and then finish with the item’s path. In the following example, Michelle will use the chown command to change testfile1’s ownership to the user account “kevin” and the group account “admin.”

Changing Privileges via Command Line

Short for “change file mode,” chmod will let you change the privileges associated with a file or folder. Using chmod on files you don’t own requires root access, so the chmod command is often preceded by the sudo command. To use chmod, enter the new privileges first followed by the item’s path.

As for changing privileges, there are two basic methods when using the chmod command:

  • Using alphanumeric abbreviations—The basic syntax goes: account type, modifier, and then privilege. Account types include u for owner, g for group, and o for everyone else. Modifiers include + for allow, - for deny, and = for exact setting. Privileges are as expected with r for read, w for write, and x for execute or folder access. For example, if you’re using this method to allow full access for the owner and group but read-only access for everyone else, you’d enter ug=rwx,o=r.

  • Using octal notation—As you can see, chmod extensively uses shortcuts and abbreviations. To save even more keystrokes you can use octal notation, which uses numeric abbreviations for defining privileges. The basic syntax for octal notation is to use a single-digit number for the user first, followed by a single number for the group, and then a last single number for everyone else. Octal notation uses 0, for no access; 1, for execution only; 2, for write-only; and 4, for read-only. To use mixed permissions, simply add the numbers together. For example, if you’re using this method to allow for full access to a folder for the owner and group but read-only access for everyone else, you’d type 775.

In the following example, Michelle will use the chmod command to change the permissions of testfile1 and testfolder to allow read and write access for the owner and the group but read-only access for everyone else. She will first use alphanumeric abbreviations, and then octal privilege equivalents.

Using the Sticky Bit

As mentioned previously in this chapter, the /Users/Shared folder has a unique permission setting that allows all local users to read and write items into the folder yet prevents other users from being able to delete files that they didn’t originally put in this folder. This special permissions configuration is brought to you courtesy of the “sticky bit.” Essentially, enabling the sticky bit on a folder defines it as an append-only destination, or, more accurately, a folder in which only the owner of the item can delete the item.

You can clearly see the sticky bit setting of the /Users/Shared folder when you view its ownership and permissions. Note the t on the end of the permissions information, which indicates that the sticky bit is enabled:

You can enable sticky bit functionality similar to the /Users/Shared folder on any other folder using a special octal notation with the chmod command. In the following example, Michelle has already created a new folder named NewShared. She then uses the chmod command with +t to set sharing for all users with sticky bit functionality:

Managing Locked Items via Command Line

As mentioned previously, Mac OS X includes a special file system lock feature that prevents anyone but the owner of an item from making changes to that item. Any user can easily lock a file or folder he owns from the Finder’s Get Info window, also covered earlier in this chapter.

The problem with the file system lock is that the Finder prevents even other administrative users from making changes or even unlocking items they don’t own. In fact, this file system lock extends to the command line as well. Even with sudo access, an administrator is not allowed to change a locked item—with one important exception, the chflags command. This command allows the administrator to change file system flags, which among other things allows you to lock or unlock any file or folder on the system.

In the following example, Michelle needs to change the permissions of a folder owned by another user so the folder can be shared. However, even using sudo she is denied access from doing this, indicating the file is locked. She verifies this by using ls –lO to view the file listing with file flags, which indeed returns that the folder is locked, “uchg”. She then uses the chflags command with the nouchg option to unlock the folder. Finally, she is able to make changes to the previously locked file.

Chmod App For Mac

Related Resources

  • Book $55.99
  • eBook (Watermarked) $55.99
  • Web Edition $55.99

Basically, a Mac application has a .app extension, but it’s not really a file — it’s a package. You can view the application’s contents by navigating to it in the Finder, right-clicking it and then choosing “Show Package Contents”.

The internal folder structure may vary between apps, but you can be sure that every Mac app will have a Contents folder with a MacOS subfolder in it. Inside the MacOS directory, there’s an extension-less file with the exact same name as the app itself. This file can be anything really, but in its simplest form it’s a shell script. As it turns out, this folder/file structure is all it takes to create a functional app!

Enter appify

Chmod App Macos

After this discovery, Thomas Aylott came up with a clever “appify” script that allows you to easily create Mac apps from shell scripts. The code looks like this:

Installing and using appify is pretty straightforward if you’re used to working with UNIX. (I’m not, so I had to figure this out.) Here’s how to install it:

  1. Save the script to a directory in your PATH and name it appify (no extension). I chose to put it in /usr/local/bin, which requires root privileges.
  2. Fire up Terminal.app and enter sudo chmod +x /usr/local/bin/appify to make appify executable without root privileges.

After that, you can create apps based on any shell script simply by launching Terminal.app and entering something like this:

Obviously, this would create a stand-alone application named Your App Name.app that executes the your-shell-script.sh script.

After that, you can very easily add a custom icon to the app if you want to.

Adding a custom app icon

  1. Create an .icns file or a 512×512 PNG image with the icon you want, and copy it to the clipboard (⌘ + C). (Alternatively, copy it from an existing app as described in steps 2 and 3.)
  2. Right-click the .app file of which you want to change the icon and select “Get Info” (or select the file and press ⌘ + I).
  3. Select the app icon in the top left corner by clicking it once. It will get a subtle blue outline if you did it right.
  4. Now hit ⌘ + V (paste) to overwrite the default icon with the new one.

Note that this will work for any file or folder, not just .app files.

Examples

Chrome/Chromium bootstrappers

I like to run Chrome/Chromium with some command-line switches or flags enabled. On Windows, you can create a shortcut and set the parameters you want in its properties; on a Mac, you’ll need to launch it from the command line every time. Well, not anymore :)

The & at the end is not a typo; it is there to make sure Chromium is launched in a separate thread. Without the &, Chromium would exit as soon as you quit Terminal.app.

Launch a local web server from a directory

Say you’re working on a project and you want to debug it from a web server. The following shell script will use Python to launch a local web server from a specific directory and open the index page in your default browser of choice. After appifying it, you won’t even need to open the terminal for it anymore.

More?

Needless to say, the possibilities are endless. Just to give another example, you could very easily create an app that minifies all JavaScript and CSS files in a specific folder. Got any nice ideas? Let me know by leaving a comment!