World Class Web Hosting
+1.877 724-7638

my pair account webmail

Web hosting services

 

about pair Networks

 

Contact Us

pairNIC Support

blog.pair.com

Call Us

  • +1.877 724-7638
  • +1.412 381-7247

Fax

  • +1.412 381-9997

E-mail Us

Web contact forms

Mailing Address

  • pair Networks, Inc.
    Suite 210
    2403 Sidney Street
    Pittsburgh, PA 15203-2168

support - knowledge base

 

The Basics - Tutorials - File Permissions

The UNIX security model allows you to set different levels of access to a file for different groups of people. This allows you to let the web server modify a file via a CGI script, for instance, while preventing other users from having normal access to the file. There are three groups in terms of file access, and three different permission types they can receive.

File Permissions And Groups

The groups are:

  • User - the 'user' group consists only of the owner of the file (your account, in most cases)
  • Group - the 'group' group consists of the other users on the server -- you can usually remove their permissions entirely if you think it is necessary
  • Other - the 'other' group consists of everyone else -- most importantly, the web server falls into the 'other' category
The potential permissions are:

  • Read - the 'read' permission allows a user or program the ability to read the data in a file
  • Write - the 'write' permission allows a user or program the ability to write new data into a file, and to remove data from it
  • Execute - the 'execute' permission allows a user or program the ability to execute a file, if it is a program or a script

Setting Permissions

If you are setting permissions via FTP the process will vary depending on your FTP program. Many modern FTP clients support a visual method of setting file permissions -- try right-clicking (clicking and holding for Mac users) on the file to see if a menu option for file permissions/access exists, or read the help files. Below is a screenshot of the visual file permissions setup for the CuteFTP FTP client:

CuteFTP Screenshot

If you are working while connected via SSH, the chmod command is used to set or change file permissions. chmod has two distinct methods of operation.

In the first, and perhaps easier to understand method, the letters u (for user), g (for group), and o (for other), along with the letters r (for read permission), w (for write permission), and x (for execute permission) are used with + (plus), - (minus) and = (equals) to alter permissions from a file. Some examples:

chmod u=rwx file.html
chmod g-rwx secret.txt
chmod o+rwx weblog.txt
chmod u=rwx, g-rwx, o=r other.html

In the first example, the ,user, group (u) is given read (r), write (w), and execute (x) permissions to file.html. In the second, the ,group, group (g) has read, write, and execute permissions subtracted for secret.txt, effectively making it inaccessible to that group. In the third example, the ,other, group is given all permissions to the file, allowing that group (which includes the web server) to access and modify it fully. This is most useful when a CGI script needs access to a certain file.

The last example makes use of commas, which allow you to set individual permissions for each group. It is used to give all permissions to your username, take away all permissions for other users on the server, and give read access to the 'other' group. This setting overall is useful to prevent casually browsing of a file by other users on the server, while allowing yourself full access to it and allowing the web server to process browser requests for it.

Setting Permissions Numerically

In the second method, special numeric codes are used in place of the letters system. Each permission level is assigned a value, as per the following chart:

PermissionValue
execute1
write2
read4
no permissions0

To determine the value of a set of permissions, their numbers are added. For instance, the numeric code 5 equals execute and read permissions (1 (execute) + 4 (read) = 5). This leaves eight possible combinations for each group, as shown in this table:

Numeric ValuePermissions
0no permissions
1execute permission
2write permission
3write and execute permissions
4read permission
5read and execute permissions
6read and write permissions
7read, write, and execute permissions

To use chmod with numerical permissions, a three digit number is formed. The first indicates the permissions that ,user, should receive, the second indicates what ,group, should receive, and the last indicates what ,other, would receive. Some examples:

chmod 700 private.txt
chmod 755 normal.txt
chmod 707 forwebserver.txt

The first example gives all permissions to user Ɨ), and no permissions to group or other (the zeroes). The second again gives all permissions to user, and gives read and execute permissions ƕ) to group and other. The last gives all permissions to user and other, but gives no permissions to group.

Common Numeric Codes

In various articles and instructions, both here in the Support Forum and elsewhere, may ask you to use chmod to set specific permissions on files. The chart below indicates the meanings of common numeric codes you may see:

NumericCodePermissions
700 User: read, write, execute
Group: none
Other: none
755 User: read, write, execute
Group: read, execute
Other: read,execute
777 User: read, write, execute
Group: read,write,execute
Other: read,write,execute
707 User: read, write, execute
Group: none
Other: read, write, execute

NOTES: Code 707 can usually be substituted for 777, and is a little more secure as it cuts out direct access by other users. "Other" must maintain at least read access to any normal file in your web space, in order for the web server to be able to serve it to your site viewers.

Viewing Current File Permissions

While logged in via SSH, you can view the current permissions of a file or directory with the ls -la command:

username@server% ls -la file.txt
-rwxr--rw-  1 username  users  368640 Aug 23 13:59 file.txt

The first field has 10 slots. The first will always be a dash (-) in the case of a file and ,d, if it is a directory. The next three indicate permissions for ,user, using the letters r, w, and x. In this case, user has read, write, and execute permissions.

The next three slots indicate the permissions for ,group., In this example, group has read permissions, but not write or execute. The last three slots show permissions for ,other, -- other has read and write permissions, but not execute.

Setting Permissions On Directories

The same permission settings are used on directories, but the meaning is slightly different. For a directory, the read setting controls whether or not a directory can be read for a listing of files. More importantly, the execute setting controls whether or not a directory can be searched for a particular file. Read without execute is almost useless, but execute without read is useful for letting a directory be used but not searched. This is why setting your home directory to 701 allows the Web server to reach your public_html symbolic link, but protects your directory from other snooping. For more information on setting permissions, login using SSH and issue the command "man chmod".