资讯专栏INFORMATION COLUMN

Linux 文件和文件夹的操作权限

BearyChat / 1262人阅读

摘要:给文件或文件夹的拥有者加可执行权限给文件或文件夹的拥有者和组成员加可读可写权限给文件或文件夹的拥有者和组成员除去可写权限使用数字表示八进制数为了简化表述,也可使用八进制数来表示权限。

由于 linux 是多用户操作系统,所以基于安全的考虑,需要具备保障个人隐私和系统安全的机制。因此在使用 linux 系统的时候,经常会出现权限的问题(比如: 删除文件、安装软件、运行应用等等),期初遇到这些问题的时候,大部分都使用sudo或者是sudo chmod 777 file(后面会讲解这个命令)来解决的。虽然这种方式可以解决问题,但是这样是不安全的,特别是在服务器上操作的时候,因为不是所有的文件和文件夹都可以被其它用户操作的,不是所有的用户都有root权限的,不是所有的应用都可以用root用户启动的。那么我们要如何正确的处理这些权限问题呢?那就让我们来学习一下 linux 权限相关的知识。

用户的权限

要确定一个用户对某个文件或文件夹是否具有相应的操作权限,先要明确该用户与文件或文件夹之间的关系。在 linux 系统中,定义了如下三种关系:

文件或文件夹的所有者 (owner):文件或文件夹的拥有者,开始创建文件或文件夹时为创建者。

组 (group):文件或文件夹所属的组, 开始创建文件或文件夹时为创建者的所属的组。

其他人 (other):除了文件或文件夹的所有者和文件或文件夹所属的组的其他成员,剩下的 linux 的用户。

因为在 linux 下的文件和文件夹都有读取(r)写入(w)执行(x)的操作,所以上面描述的每种关系的用户分别都可以赋予这些操作权限。操作权限介绍:

权限 简写 对普通文件的作用 对文件夹的作用
读取 r 查看文件内容 列出文件夹中的文件(ls)
写入 w 修改文件内容 在文件夹中删除、添加或重命名文件(夹)
执行 x 文件可以作为程序执行 cd 到文件夹
文件或文件夹和用户的三种关系的基础操作权限

在 linux 使用ls -la命令可以查看文件夹内文件的属性,下面是我电脑上某个文件夹下文件的属性:

$ ls -la
drwxr-xr-x 14 root root     4096 Apr  3 18:47 .
drwxr-xr-x 23 root root     4096 Mar  2 05:48 ..
drwxr-xr-x  2 root root     4096 Apr  3 07:44 backups
drwxr-xr-x 17 root root     4096 Jul 22  2014 cache
drwxr-xr-x  2 root root     4096 Mar  2 04:26 docker-registry
lrwxrwxrwx  1 root root        9 Feb 25 13:31 lock -> /run/lock
drwxrwxr-x 15 root syslog   4096 Apr  3 07:44 log
-rw-r--r--  1 root root        0 Apr  3 18:47 test

上面的有九列数据,第一列数据表示和文件或文件夹相应关系用户的操作权限,第二列表示文件夹内文件和文件夹的总数量(包括文件夹本身),第三列表示文件夹或文件的拥有者,第四列表示文件或文件夹的所属的组,第五列表示文件或文件夹的大小,第六、七、八列表示文件或文件夹最后被修改的时间,第九列文件或文件夹的名字。

接下主要分析第一列的数据,在上面的信息中倒数第二行drwxrwxr-x,从左到右第一个字母表示文件系统对象的类别,这里d表示为目录(文件夹)。其它文件系统对象:

-(常规文件)、d(目录)、l(符号链接)、c(字符特殊设备)、b(模块特殊设备)、p(FIFO)、s(套接字)

drwxrwxr-x除出去第一个字母d后的rwxrwxr-x表示的是三种用户关系对文件或文件夹的操作权限。从左到右每三个一组,依次表示所有者权限、组权限、其他用户权限。每组的顺序均为rwx,如果用户有相应的操作权限就用相应的字母表示,如果不具有相应的操作权限就用-表示。比如: rwxrwxr-x表示文件或文件夹的所有者具有rwx(可读,可写,可执行)的操作权限,组用户也具有rwx(可读,可写,可执行)的权限,其他用户具有r-x(可读,可执行,没有可读)的操作权限。

特殊权限SUIDSGIDSticky

在 linux 系统中还有三种与用户身份无关的三个文件权限属性。即SUID、SGID和Sticky

SUID(Set User ID, 4):

该属性只对有执行权限的文件有效,对目录无效。执行具有SUID权限的程序时,引发的进程的所有者是程序文件的所有者,而不是启动程序的用户(除非二者是同一个人)。比如,如果一个程序的所有者是root且具有SUID属性,一个普通用户执行此程序时,如同root执行此程序一样。(请注意该属性对Shell脚本程序无效)该属性为一些特殊程序(如lpr)的启动带来了方便。但有时也带来了安全隐患:比如一个具有SUID属性的程序如果在执行时运行了一个shell,那么用户可以籍此得到系统的最高权限。SUID可用s表示,如:

$ ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 47032 Feb 16  2014 /usr/bin/passwd

SGID(Set Group ID, 4):

对于可执行文件,SGIDSUID类似,引发的进程的所有组是程序文件所属的组。对于目录,SGID属性会使目录中新建文件的所属组与该目录相同。SGID也可以用s表示,如:

$ ls -l /var
drwxrwsr-x  2 root staff    4096 Apr 10  2014 local
drwxrwxr-x 15 root syslog   4096 Apr  4 19:57 log

Sticky, 1:

仅对目录有效。带sticky属性的目录下的文件或目录可以被其拥有者删除或改名。常利用sticky属性创建这样的目录:组用户可以在此目录中创建新文件、修改文件内容,但只有文件所有者才能对自己的文件进行删除或改名。如系统中的/tmp文件夹。在属性字符串中,通常用t表示。

$ ls -l /
drwxrwxrwt   8 root root  4096 Apr  4 23:57 tmp
修改文件或文件夹对应用户的操作权限

在 linux 系统中,可以使用chmod命令来修改文件或文件夹对应用户的操作权限,chmod命令也有两种方式修改,一种是使用代表相应操作权限的字母简写表示,另一种是使用代表相应操作权限的数字表示。

使用简写字母

chmod语法参数格式: ugoa[rwxst]
第一个字符是u、g、 o 或 a 中的一个(分别表示用户、组、其他人和所有人)。还可以选择添加(+)、删除(-)或设置(=)各种不同权限。

给文件或文件夹try的拥有者加可执行权限

$ sudo chmod u+x try

给文件或文件夹try的拥有者和组成员加可读可写权限

$ sudo chmod ug+rw try

给文件或文件夹try的拥有者和组成员除去可写权限

$ sudo chmod ug-r try

使用数字表示(八进制数)

为了简化表述,也可使用八进制数来表示权限。即用一个四位八进制数来表示,其中最高位表示特殊权限,随后的三位依次是所有者权限、组权限和其他人权限。每一个八进制位的权限数值是文件具有的相应权限所对应的数值之后,如:

0755=rwxr-xr-x=0(4+2+1)(4+0+1)(4+0+1)

数值权限的算法,比如rw-其实就是110的二进制,也就是0*2^0 + 1*2^1 + 1*2^2 = 6。有相应的权限就用1表示,没有相应的权限就用0表示。不过这种算法特殊权限不包含在内。

给文件或文件夹try的拥有者加rwx权限,组用户加r-x权限,其他用户r--权限

$ sudo chmod 0754 try

chmod命令也可以递归的修改文件夹下所有的文件的权限,如给 try 文件夹下得所有文件加上 0755 权限

$ sudo chmod -R 0755 try

批量只修改文件或文件夹权限

$ find -type d|xargs chmod 745     // 只修改文件夹权限
$ find -type f|xargs chmod 644     // 只修改文件权限
// 或者
$ chmod 745 `find 路径 -type d`     // 只修改文件夹权限
$ chmod 644 `find 路径 -type f`    // 只修改文件权限

相应权限的数值:

rwx(7)、rw-(6)、r-x(5)、r--(4)、--wx(3)、-w-(2)、--x(1)、---(0)

suid: 符号s(4)

sgid: 符号s(2)

sticky: 符号t(1)

修改文件或文件夹的拥有者和所属的组

使用chown可以修改文件或文件夹的拥有者和所属的组。

将文件或文件夹try的拥有者修改成aikin,所属的组修改成adm

$ sudo chown aikin:adm try

chmod一样,-R参数可以起到递归的作用

$ sudo chown -R aikin:adm try

创建组和用户

组相关操作:

创建一个try

$ sudo groupadd  try

修改try组的名字为rename-try

$ sudo groupadd -n rename-try try

修改try组的名字为rename-try

$ sudo groupadd -n rename-try try

删除try2

$ sudo groupdel  try2

查看所有组

$ sudo cat /etc/group

用户相关操作:

创建用户test

在 linux 系统上虽然可以使用useraddadduser来创建用户,但是这两个命令是有区别的。

使用useradd时,如果后面不添加任何参数选项,例如:$sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

使用adduser时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。
下面创建用户使用的是adduser命令:

$ sudo adduser test
Adding user `test" ...
Adding new group `test" (1002) ...
Adding new user `test" (1001) with group `test" ...
Creating home directory `/home/test" ...
Copying files from `/etc/skel" ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for test
Enter the new value, or press ENTER for the default
  Full Name []: test
  Room Number []:
  Work Phone []:
  Home Phone []:
  Other []:
Is the information correct? [Y/n] y

修改用户

$ sudo passwd test    // 修改用户密码
$ sudo usermod -d /home/test -G try2 test   // 将test用户的登录目录改成/home/test,并加入 try 组,注意这里是大 G。
$ sudo gpasswd -a test try     // 将用户 test 加入到 try2 组。
$ sudo gpasswd -d test try2    // 将用户 test 从 try 组中移除

删除用户test

$ sudo userdel test

查看所有用户

$ cut -d : -f 1 /etc/passwd
// 或者
$ cat /etc/passwd |awk -F : "{print $1}"

  了解 linux 用户操作权限,安全就掌握在手中。

参考

学习 Linux,101: 管理文件权限和所有权

文件权限

linux下添加,删除,修改,查看用户和用户组

原文链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/7827.html

相关文章

  • linux就该这么学【权限管理】

    摘要:目录权限概念权限管理文件类型和访问权限文件类型基本权限修改目录文件的权限常见面试案例分析使用进制数值形式修改文件的权限粘滞位额外补充如何添加信任用户至配置文件感性理解权限概念下有两种用户超级用户普通用户。 ...

    Cristalven 评论0 收藏0
  • Linux 文件文件操作权限

    摘要:给文件或文件夹的拥有者加可执行权限给文件或文件夹的拥有者和组成员加可读可写权限给文件或文件夹的拥有者和组成员除去可写权限使用数字表示八进制数为了简化表述,也可使用八进制数来表示权限。 由于 linux 是多用户操作系统,所以基于安全的考虑,需要具备保障个人隐私和系统安全的机制。因此在使用 linux 系统的时候,经常会出现权限的问题(比如: 删除文件、安装软件、运行应用等等),期初遇到...

    0x584a 评论0 收藏0
  • 软件测试工程师要掌握Linux系统命令-很全,但不是最全!

    摘要:文件操作类在中,凡是使用文件名目录名的命令,都可以在不进入文件或者所属目录中,进行远程操作。详细信息中的第二位到第四位字符表示文件所有者同组用户拥有的权限代表读权限,代表写权限,代表执行权限。 ...

    Yuqi 评论0 收藏0
  • 后端程序员必备Linux基础知识

    摘要:这里存放的是系统管理员使用的系统级别的管理命令和程序。而一般情况下打包和压缩是一起进行的,打包并压缩后的文件的后缀名一般。 本文同步更新在我的Github上:网页链接 我自己总结的Java学习的系统知识点以及面试问题,目前已经开源,会一直完善下去,欢迎建议和指导欢迎Star: https://github.com/Snailclimb/Java-Guide 学习Linux之前,我们先来...

    import. 评论0 收藏0
  • [Note] Linux学习笔记1-4 文件相关

    摘要:它接受用户输入的命令,并把它们送到内核运行。内部命令是通过执行自己代码中对应部分来完成的。外部命令的代码则存放在一些二进制的可执行文件或者脚本中。外部命令的搜索路径保存在一个变量中。后三位则对应三种用户分类的权限。 Note 1 Linux 和 Shell 简介 Linux系统 是多进程、多用户和交互式的计算环境。Linux系统的运行级别从0-6共7个: 0:停机,关闭系统 1:单用...

    cartoon 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<