linux入门-文件权限管理与配置

一、关于linux的操作命令一般格式如下:

1,一行指令中第一个输入的部分绝对是“指令(command)”或“可可执行文件案(例如批次

脚本,script)”

2,command 为指令的名称,例如变换工作目录的指令为 cd 等等;

3,中刮号[]并不存在于实际的指令中,而加入选项设置时,通常选项前会带 - 号,例如 -h;

有时候会使用选项的完整全名,则选项前带有 -- 符号,例如 --help;

4,parameter1 parameter2.. 为依附在选项后面的参数,或者是 command 的参数;paramenter1和parameter2可有可无,例如ls,

5,指令,选项,参数等这几个咚咚中间以空格来区分,不论空几格 shell 都视为一格。所以空 格是很重要的特殊字符!;

6,按下[Enter]按键后,该指令就立即执行。[Enter]按键代表着一行指令的开始启动。

7,指令太长的时候,可以使用反斜线(\)来跳脱[Enter]符号,使指令连续到下一行。注 意!反斜线后就立刻接特殊字符,才能跳脱!

8,在Linux系统中,英文大小写字母是不一样的。举例来说,cd与CD并不同。还有其他的将会在shell部分介绍,比如管道符。

例如:以ls命令为例:关于ls命令详解后续介绍。如果不能理解,请看后续。

//使用方法如下,可以直接使用命令ls,也可以加上选项-a,-l,-al等等,也可以加上参数ls /var/,也可以即加上选项由加上参数,如ls -a /var/等等,也可以加上多个参数,如ls -a /var/ /etc/等等。
ls
ls -l
ls -a
ls -al
ls /var/
ls -a /var/
ls -a /var/ /etc/

二、关机和重启命令:

  • 惯用的关机指令: shutdown
  • 重新开机,关机: reboot, halt, poweroff

1,shutdown 详解:

[root@study	~]#	shutdown	[-krhc]	[时间]	[警告讯息]
选项与参数:
-k : 不要真的关机,只是发送警告讯息出去!
-r : 在将系统的服务停掉之后就重新开机(常用)(即重启)
-h : 将系统的服务停掉后,立即关机。 (常用)
-c : 取消已经在进行的shutdown指令内容。
时间 : 指定系统关机的时间!时间的范例下面会说明。若没有这个项目,则默认1分钟后自动进行。
范例:
root@refreshing18-virtual-machine:/# /sbin/shutdown -h 10 'I will shutdown after 10 mins'
Shutdown scheduled for Wed 2019-03-20 15:22:25 CST, use 'shutdown -c' to cancel. //其他使用方法:
[root@study ~]# shutdown -h now 立刻关机,其中 now 相当于时间为0的状态
[root@study ~]# shutdown -h 20:25 系统在今天的20:25分会关机,若在21:25才下达此指令,则隔天才关机
[root@study ~]# shutdown -h +10 系统再过十分钟后自动关机
[root@study ~]# shutdown -r now 系统立刻重新开机
[root@study ~]# shutdown -r +30 'The system will reboot' 再过三十分钟系统会重启,并显示后面的讯息给所有在线上的使用者
[root@study ~]# shutdown -k now 'This system will reboot'
仅发出警告信件的参数!系统并不会关机啦!吓唬人!

2,reboot, halt, poweroff使用方法:

[root@study	~]#	systemctl	[指令]
指令项目包括如下:
halt 进入系统停止的模式,屏幕可能会保留一些讯息,这与你的电源管理模式有关
poweroff 进入系统关机模式,直接关机没有提供电力喔!
reboot 直接重新开机
suspend 进入休眠模式
[root@study ~]# systemctl reboot # 系统重新开机
[root@study ~]# systemctl poweroff # 系统关机

三、linux中几个常用的快捷键:

[Tab]按键:具有“命令补全”与“文 件补齐”的功能;

eg: 命令补全,在命令行输入ca再按两次[tab]按键

[root@localhost /]# ca
cacertdir_rehash cache_metadata_size cache_writeback caller case catman cache_check cache_repair cal capsh cat cache_dump cache_restore ca-legacy captoinfo catchsegv

例如:文本补全,在命令行输入ls -al ~/.bash再按两次[tab]按键

[root@localhost /]# ls -al ~/.bash
.bash_history .bash_logout .bash_profile .bashrc

[Ctrl]-c按键:是中断目前程序的按键;

[dmtsai@study	~]$	find /
....(一堆东西都省略)....
# 此时屏幕会很花,你看不到命令提示字符的!直接按下[ctrl]-c即可!
[dmtsai@study ~]$ <==此时提示字符就会回来了!find程序就被中断!

[Ctrl]-d按键:代表着: “键盘输入结 束(End Of File, EOF 或 End Of Input)”的意思;

四、权限设置与管理

注:由于后面部分命令将涉及权限相关的知识,故在此先介绍了。

基本概念介绍

简介:每个文件都有其相关的属性和权限,该文件由谁创建,谁可以读取,谁又可以修改该文件等等,都是可以通过文件的权限属性进行配置的。下面首先介绍对于文件权限很重要的三个概念:(1)使用者及(2)群组与(3)非本群组外的其他人

1,文件的拥有者:

初次接触Linux的朋友大概会觉得很怪异,怎么“Linux有这么多使用者,还分什么群组,有什么用?”。这个“使用者与群组”的功能可是相当健全而好用的一个安全防护呢!怎么 说呢?由于Linux是个多用户多任务的系统,因此可能常常会有多人同时使用这部主机来 进行工作的情况发生,为了考虑每个人的隐私权以及每个人喜好的工作环境,因此,这 个“文件拥有者”的角色就显的相当的重要了!
例如当你将你的e-mail情书转存成文件之后,放在你自己的主文件夹,你总不希望被其他 人看见自己的情书吧?这个时候,你就把该文件设置成“只有文件拥有者,就是我,才能看与修改这个文件的内容”,那么即使其他人知道你有这个相当“有趣”的文件,不过由于你有设置适当的权限,所以其他人自然也就无法知道该文件的内容啰!

2,群组概念

那么群组呢?为何要设置文件还有所属的群组?其实,群组最有用的功能之一,就是当 你在团队开发资源的时候啦!举例来说,假设有两组专题生在我的主机里面,第一个专 题组别为projecta,里面的成员有class1,class2,	class3三个;第二个专题组别为 projectb,里面的成员有class4,class5,	class6。	这两个专题之间是有竞争性质的,但却 要缴交同一份报告。每组的组员之间必须要能够互相修改对方的数据,但是其他组的组员则不能看到本组自己的文件内容,此时该如何是好?
在Linux下面这样的限制是很简单啦!我可以经由简易的文件权限设置,就能限制非自己 团队(亦即是群组啰)的其他人不能够阅览内容啰!而且亦可以让自己的团队成员可以 修改我所创建的文件!同时,如果我自己还有私人隐密的文件,仍然可以设置成让自己 的团队成员也看不到我的文件数据。方便吧!
另外,如果teacher这个帐号是projecta与projectb这两个专题的老师, 他想要同时观察两 者的进度,因此需要能够进入这两个群组的权限时,你可以设置teacher这个帐号,“同 时支持projecta与projectb这两个群组!”,也就是说:每个帐号都可以有多个群组的支持 呢!

3,其他人的概念

其他人,很容易理解,在这里以某个文件为例,即不是这个文件的拥有者,也不在这个文件指定群主中的人就是其他人啦,是不是很easy呢,嘿嘿。

文件属性介绍

[dmtsai@study	~]$	su	-		#	先来切换一下身份看看
Password: Last login: Tue Jun 2 19:32:31 CST 2015 on tty2 [root@study ~]# ls -al
total 48
dr-xr-x---. 5 root root 4096 May 29 16:08 .
dr-xr-xr-x. 17 root root 4096 May 4 17:56 ..
-rw-------. 1 root root 1816 May 4 17:57 anaconda-ks.cfg
-rw-------. 1 root root 927 Jun 2 11:27 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
drwxr-xr-x. 3 root root 17 May 6 00:14 .config
[ 1 ] [2] [3] [4] [5] [ 6 ] [ 7 ]
[ 权限 ] [链接][拥有者][群组][文件大小][ 修改日期 ][ 文件名 ]

1,第一栏代表这个文件的类型与权限

如上,第一栏其实共有十个字符,如:drwxr-xr-x

  • 第一个字符第一个字符代表这个文件是“目录、文件或链接文件等等”:

  • 接下来的字符中,以三个为一组,且均为“rwx” 的三个参数的组合。其中,[ r]代表可(read)、[w]代表可写(write)、[x]代表可执行(execute)。要注意的是,这三个 权限的位置不会改变,如果没有权限,就会出现减号[-]而已。
    • 第一组为“文件拥有者可具备的权限”,以“anaconda-ks.cfg”那个文件为例, 该文件 的拥有者可以读写,但不可执行;
    • 第二组为“加入此群组之帐号的权限”;
    • 第三组为“非本人且没有加入本群组之其他帐号的权限”。

2,第二栏表示有多少文件名链接到此节点(i-node):每个文件都会将他的权限与属性记录到文件系统的i-node中,不过,我们使用的目录树却是使 用文件名来记录, 因此每个文件名就会链接到一个i-node啰!这个属性记录的,就是有多少 不同的文件名链接到相同的一个i-node号码去就是了。

3,第三栏表示这个文件(或目录)的“拥有者帐号”

4,第四栏表示这个文件的所属群组

5,第五栏为这个文件的容量大小,默认单位为Bytes

6,第六栏为这个文件的创建日期或者是最近的修改日期

7,第七栏为这个文件的文件名

实例1:
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai #文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个帐号可以读写此文件,其他人则仅能读此文件;
#另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup,其中test1可以针对此文件具有可读可写可执行的权力,而同群组的test2,test3两个人与test1同样是testgroup的群组帐号,则仅可读可执行 但不能写(亦即不能修改);至于没有加入testgroup这一个群组的其他人则仅可以读,不能写也不能执行! 实例2:
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/ #文件拥有者test1[rwx]可以在本目录中进行任何工作
#而testgroup这个群组[r-x]的帐号,例如test2, test3亦可以进入本目录进行工作,但是不能 在本目录下进行写入的动作;
#至于other的权限中[r--]虽然有r,但是由于没有x的权限,因此others的使用者,并不能进入此目录!

文件属性与权限相关命令

1,chgrp:改变文件所属群组 (全称change group)

[注]:要被改变的群组名称必须要在/etc/group文件内存在才行,否则就会显示错误!

实例使用:
[root@study ~]# chgrp [-R] usergroup dirname/filename ...
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件、目录 都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。
范例:
[root@study ~]# chgrp users initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root users 1864 May 4 18:01 initial-setup-ks.cfg [root@study ~]# chgrp testing initial-setup-ks.cfg
chgrp: invalid group: `testing' <== 发生错误讯息啰~找不到这个群组名~

2,chown:改变文件拥有者(全称change owner)

[注]:使用者必须是 已经存在系统中的帐号,也就是在/etc/passwd 这个文件中有纪录的使用者名称才能改变。

实例使用:

[root@study	~]#	chown	[-R]	帐号名称	文件或目录
[root@study ~]# chown [-R] 帐号名称:群组名称 文件或目录
选项与参数:
-R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都变更 范例:将initial-setup-ks.cfg的拥有者改为bin这个帐号:
[root@study ~]# chown bin initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 bin users 1864 May 4 18:01 initial-setup-ks.cfg
范例:将initial-setup-ks.cfg的拥有者与群组改回为root:
[root@study ~]# chown root:root initial-setup-ks.cfg
[root@study ~]# ls -l
-rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg 其他用法:
事实上,chown也可以使用“chown user.group file”,亦即在拥有者与群组间加上小数点“.”也行!不过很多朋友设置帐号时,喜欢在帐号当中加入小数点(例如vbird.tsai这样的帐 号格式),这就会造成系统的误判了!所以我们比较建议使用冒号“:”来隔开拥有者与群组 啦!此外,chown也能单纯的修改所属群组呢!例如“chown .sshd initial-setup-ks.cfg”就 是修改群组~看到了吗?就是那个小数点的用途!

3,chmod:改变权限

[注]:权限的设置方法有两种,分别可以使用数字或者是符号来进行权限的变更

  • 数字类型改变文件权限

    Linux文件的基本权限就有九个,分别是owner/group/others三种身份各有自己的read/write/execute权限。文件的权限字符为:“rwxrwxrwx”, 这九个权限是三个三个一组的!其中,我们可以使用数字来代表各个权 限,各权限的分数对照表如下:

    >	r:4	>	w:2	>	x:1 
    
    //每种身份(owner/group/others)各自的三个权限(r/w/x)分数是需要累加的,例如当权限为:[-rwxrwx---]分数则是:
    > owner = rwx = 4+2+1 = 7 > group = rwx = 4+2+1 = 7 > others= --- = 0+0+0 = 0

    所以等一下我们设置权限的变更时,该文件的权限数字就是770啦!变更权限的指令 chmod的语法是这样的:

    [root@study	~]#	chmod	[-R]	xyz	文件或目录
    选项与参数:
    xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。
    -R : 进行递回(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
    实例:将.bashrc这个文件所有的权限都设置启用,那么就下达:
    [root@study ~]# ls -al .bashrc
    -rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc [root@study ~]# chmod 777 .bashrc
    [root@study ~]# ls -al .bashrc
    -rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc //那如果要将权限变成“-rwxr-xr--”呢?那么权限的分数就成为 [4+2+1][4+0+1] [4+0+0]=754 啰!所以你需要下达“chmod 754 filename”。
  • 符号类型改变文件权限

    基本上就九个权限分别是 (1)user(2)group(3)others三种身份,那么我们就可以借由u,g,o来代表三种身份的权限!此外,a则代表all亦即全部的身份!那么读写执行的权限就可以写成r,w,x,使用方法如下:

    |chmod|	u	g	o	a	|+(加入)-(除去)	=(设置)|	r	w	x	|文件或目录	|
    
    

    例如1:设置”一个文件的权限成为“-rwxr-xr-x”时,基本上就是:

    • user(u):具有可读、可写、可执行的权限;

    • group与others(g/o):具有可读与执行的权限。所以就是:

      [root@study	~]#	chmod	u=rwx,go=rx		.bashrc
      # 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空白字符!
      [root@study ~]# ls -al .bashrc
      -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc

    例如2:设置“-rwxr-xr--”这样的权限呢?可以使用“chmod u=rwx,g=rx,o=r filename”来设置。

    例如3:如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限

    //设置方法如下
    [root@study ~]# ls -al .bashrc
    -rwxr-xr-x. 1 root root 176 Dec 29 2013 .bashrc
    [root@study ~]# chmod a+w .bashrc
    [root@study ~]# ls -al .bashrc
    -rwxrwxrwx. 1 root root 176 Dec 29 2013 .bashrc

    例如4:如果是要将权限去掉而不更动其他已存在的权限呢?例如要拿掉全部人的可执行权限。

    //设置方法如下
    [root@study ~]# chmod a-x .bashrc
    [root@study ~]# ls -al .bashrc
    -rw-rw-rw-. 1 root root 176 Dec 29 2013 .bashrc
    [root@study ~]# chmod 644 .bashrc
    # 测试完毕得要改回来喔!

权限对文件的意义:

  • r(read):可读取此一文件的实际内容,如读取文本文件的文字内容等;
  • w(write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件);
  • x(eXecute):该文件具有可以被系统执行的权限。

权限对目录的意义:

  • r(read contents in directory):

    表示具有读取目录结构清单的权限,所以当你具有读取(r)一个目录的权限时,表示你 可以查询该目录下的文件名数据。所以你就可以利用 ls 这个指令将该目录的内容列表显示出来!没有r的话,使用 [tab] 时,他就无法自动帮你补齐文件名了

  • w(modify contents of directory):

    这个可写入的权限对目录来说,是很了不起的!因为他表示你具有异动该目录结构清单的权限,也就是下面这些权限:

    • 创建新的文件与目录;
    • 删除已经存在的文件与目录(不论该文件的权限为何!)
    • 将已存在的文件或目录进行更名;
    • 搬移该目录内的文件、目录位置。总之,目录的w权限就与该目录下面的文件名异 动有关就对了啦!
  • x(access directory):

    咦!目录的执行权限有啥用途啊?目录只是记录文件名而已,总不能拿来执行吧?没 错!目录不可以被执行,目录的x代表的是使用者能否进入该目录成为工作目录的用途! 所谓的工作目录(work directory)就是你目前所在的目录啦!举例来说,当你登陆Linux时,你所在的主文件夹就是你当下的工作目录。而变换目录的指令是“cd”(change directory)啰!

默认权限与隐藏权限

1,文件默认权限:umask

当你创建一个新的文件或目录时,他的默认权限会是什么呢?这就与umask有关 了!基本上,umask就是指定“目前使用者在创建文件或目录时候的权限默认值”,有关umask介绍如下:

//umask查看方法有两种,第一种直接输入umask,就可以看到数字体态的权限设置分数,则是加入-S
//(Symbolic)这个选项,就会以符号类型的方式来显示出权限了,如下:,但是输入umask的时候出现了
//4个数字,第一个代表特殊权限,后续介绍,我们下面先介绍后面三个数字。 [root@study ~]# umask
0022 <==与一般权限有关的是后面三个数字!
[root@study ~]# umask -S
u=rwx,g=rx,o=rx

文件的默认最大权限:

  • 若使用者创建为“文件”则默认“没有可执行(x)权限”,亦即只有 rw 这两个项目,也就 是最大为666分,默认权限如下:-rw-rw-rw-
  • 若使用者创建为“目录”,则由于x与是否可以进入此目录有关,因此默认为所有权限均开放,亦即为777分,默认权限如下:drwxrwxrwx

umask输入后显示的数字中后面三个数字的含义:

umask的分数指的是“该默认值需要减掉的权限!”因为r、w、x分别是4、2、 1分,所以啰!也就是说,当要拿掉能写的权限,就是输入2分,而如果要拿掉能读的权限,也就是4分,那么要拿掉读与写的权限,也就是6分,而要拿掉执行与写入的权限,也就是3分。

实例:

以上面的例子来说明的话,因为umask为022,所以user并没有被拿掉任何权限,不 过group与others的权限被拿掉了2(也就是w这个权限),那么当使用者:

  • 创建文件时权限变化:(-rw-rw-rw-)-(-----w--w-) ==> -rw-r--r--
  • 创建目录时权限变化:(drwxrwxrwx)-(d----w--w-) ==> drwxr-xr-x

验证:

[root@study	~]#	umask
0022
[root@study ~]# touch test1
[root@study ~]# mkdir test2
[root@study ~]# ll -d test*
-rw-r--r--. 1 root root 0 6月 16 01:11 test1
drwxr-xr-x. 2 root root 6 6月 16 01:11 test2

修改默认权限:

当我们需要新建文件给同群组的使用者共同编辑时,那么umask的群组就不能拿掉2 这个w的权限!所以啰,umask就得要是002之类的才可以!这样新建的文件才能够是rw-rw-r--的权限模样喔!那么如何设置umask呢?简单的很,直接在umask后面输入002 就好了!

[root@study	~]#	umask	002
[root@study ~]# touch test3
[root@study ~]# mkdir test4
[root@study ~]# ll -d test[34]
#中括号[ ]代表中间有个指定的字符,而不是任意字符的意思
-rw-rw-r--. 1 root root 0 6月 16 01:12 test3
drwxrwxr-x. 2 root root 6 6月 16 01:12 test4

实例2:

假设你的umask为003,请问该umask情况下,创建的文件与目录权限为?答: umask为003,所以拿掉的权限为--------wx,因此:

  • 文件:(-rw-rw-rw-) - (--------wx) = -rw-rw-r--
  • 目录:(drwxrwxrwx) - (d-------wx) = drwxrwxr-

2,文件隐藏属性

  • chattr(设置文件隐藏属性)
[root@study	~]#	chattr	[+-=][ASacdistu]	文件或目录名称
选项与参数:
+ :增加某一个特殊参数,其他原本存在参数则不动。 - :移除某一个特殊参数,其他原本存在参数则不动。 = :设置一定,且仅有后面接的参数 A :当设置了A这个属性时,若你有存取此文件(或目录)时,他的存取时间atime将不会 被修改,可避免 I/O 较慢的机器过度的存取磁盘。(目前建议使用文件系统挂载参数处理这 个项目) S :一般文件是非同步写入磁盘的,如果加上S这个属性时,当你进行任何文件的修改,该更动会“同步”写入磁盘中。 a :当设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root能设置这属性 c :这个属性设置之后,将会自动的将此文件“压缩”,在读取的时候将会自动解压缩, 但是在储存的时候,将会先进行压缩后再储存(看来对于大文件似乎蛮有用的!) d :当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份 i :这个i就很厉害了!他可以让一个文件“不能被删除、改名、设置链接也无法写入或新增数据!” 对于系统安全性有相当大的助益!只有root能设置此属性。 s :当文件设置了s属性时,如果这个文件被删除,他将会被完全的移除出这个硬盘空间, 所以如果误删了,完全无法救回来了喔! u :与s相反的,当使用u来设置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中, 可以使用来救援该文件喔! 注意1:属性设置常见的是a与i的设置值,而且很多设置值必须要身为root才能设置
注意2:xfs 文件系统仅支持 AadiS而已 范例:请尝试到/tmp下面创建文件,并加入 i 的参数,尝试删除看看。 [root@study ~]# cd /tmp
[root@study tmp]# touch attrtest <==创建一个空文件
[root@study tmp]# chattr +i attrtest <==给予i的属性
[root@study tmp]# rm attrtest <==尝试删除看看
rm: remove regular empty file `attrtest'? y
rm: cannot remove `attrtest': Operation not permitted
# 看到了吗?呼呼!连 root 也没有办法将这个文件删除呢!赶紧解除设置! 范例:请将该文件的 i 属性取消!
[root@study tmp]# chattr -i attrtest
  • lsattr(显示文件隐藏属性)
[root@study	~]#	lsattr	[-adR]	文件或目录
选项与参数:
-a :将隐藏文件的属性也秀出来;
-d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名;
-R :连同子目录的数据也一并列出来!
[root@study tmp]# chattr +aiS attrtest
[root@study tmp]# lsattr attrtest
--S-ia---------- attrtest

使用chattr设置后,可以利用lsattr来查阅隐藏的属性。不过,这两个指令在使用上必须要 特别小心,否则会造成很大的困扰。例如:某天你心情好,突然将/etc/shadow这个重要的密 码记录文件给他设置成为具有i的属性,那么过了若干天之后,你突然要新增使用者,却一 直无法新增!别怀疑,赶快去将i的属性拿掉吧!

文件特殊权限:SUID,SGID,SBIT

1,SUID:

当s这个标志出现在文件拥有者的x权限上时,例如/usr/bin/passwd这个文件的权限状态:“-rwsr-xr-x”,此时就被称为Set UID,简称为SUID的特殊权限。

SUID的特殊功能与限制:

  • SUID权限仅对二进制程序(binary program)有效;
  • 执行者对于该程序需要具有x的可执行权限;
  • 本权限仅在执行该程序的过程中有效(run-time);
  • 执行者将具有该程序拥有者(owner)的权限

例如:

我们的Linux系统中,所有帐号的密码都记录在/etc/shadow这个文件里面,这个文件的权限 为:“---------- 1 root root”,意思是这个文件仅有root可读且仅有root可以强制写入而已。既然这个文件仅有root可以修改,那么我的v01cano这个一般帐号使用者能否自行修改自己的密码呢?你可以使用你自己的帐号输入“passwd”这个指令来看看,嘿嘿!一般使用者当然可以 修改自己的密码了!明明/etc/shadow就不能让v01cano这个一般帐户去存取的,为什么 v01cano还能够修改这个文件内的密码呢?这就是 SUID的功能。

  • v01cano对于/usr/bin/passwd这个程序来说是具有x权限的,表示v01cano能执行 passwd;
  • passwd的拥有者是root这个帐号;
  • v01cano执行passwd的过程中,会“暂时”获得root的权限;
  • /etc/shadow就可以被v01cano所执行的passwd所修改。

2,SGID

当s标志在文件拥有者的x项目为SUID,那s在群组的x时则称为Set GID, SGID。举例来说,你可以用下面的指令来观察到具有SGID权限的文件。

[root@study	~]#	ls	-l	/usr/bin/locate
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate

与SUID不同的是,SGID可以针对文件或目录来设置!如果是对文件来说,SGID有如下的 功能:

  • SGID对二进制程序有用;
  • 程序执行者对于该程序来说,需具备x的权限;
  • 执行者在执行的过程中将会获得该程序群组的支持!

举例来说,上面的/usr/bin/locate这个程序可以去搜寻/var/lib/mlocate/mlocate.db这个文件的内容mlocate.db的权限如下:

[root@study	~]#	ll	/usr/bin/locate	/var/lib/mlocate/mlocate.db
-rwx--s--x. 1 root slocate 40496 Jun 10 2014 /usr/bin/locate
-rw-r-----. 1 root slocate 2349055 Jun 15 03:44 /var/lib/mlocate/mlocate.db

与SUID非常的类似,若我使用v01cano这个帐号去执行locate时,那v01cano将会取得 slocate群组的支持,因此就能够去读取mlocate.db啦!

除了binary program之外,事实上SGID也能够用在目录上,这也是非常常见的一种用途! 当一个目录设置了SGID的权限后,他将具有如下的功能:

  • 使用者若对于此目录具有r与x的权限时,该使用者能够进入此目录;
  • 使用者在此目录下的有效群组(effective group)将会变成该目录的群组;
  • 用途:若使用者在此目录下具有w的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同。

3,Sticky Bit

这个Sticky Bit, SBIT目前只针对目录有效,对于文件已经没有效果了。SBIT对于目录的作用 是:

  • 当使用者对于此目录具有w, x权限,亦即具有写入的权限时;
  • 当使用者在该目录下创建文件或目录时,仅有自己与root才有权力删除该文件

简单的说:当甲这个使用者于A目录是具有群组或其他人的身份,并且拥有该目录w的权 限,这表示“甲使用者对该目录内任何人创建的目录或文件均可进行"删除/更名/搬移"等动 作。”不过,如果将A目录加上了SBIT的权限项目时,则甲只能够针对自己创建的文件或目 录进行删除/更名/移动等动作,而无法删除他人的文件。

举例来说,我们的 /tmp 本身的权限是“drwxrwxrwt”, 在这样的权限内容下,任何人都可以在 /tmp 内新增、修改文件,但仅有该文件/目录创建者与 root 能够删除自己的目录或文件。这个 特性也是挺重要的啊!你可以这样做个简单的测试:

  1. 以 root 登陆系统,并且进入 /tmp 当中;
  2. touch test,并且更改 test 权限成为 777 ;
  3. 以一般使用者登陆,并进入 /tmp;
  4. 尝试删除 test 这个文件!

4,SUID/SGID/SBIT权限设置

前面你应该已经知道数字体态更改权限的方式 为“三个数字”的组合,那么如果在这三个数字之前再加上一个数字的话,最前面的那个数字 就代表这几个权限了!

  • 4为SUID
  • 2为SGID
  • 1为SBIT

假设要将一个文件权限改为“-rwsr-xr-x”时,由于s在使用者权限中,所以是SUID,因此, 在原先的755之前还要加上4,也就是:“chmod 4755 filename”来设置!此外,还有大S 与大T的产生喔!参考下面的范例啦!

下面的范例只是练习而已,所以使用同一个文件来设置,你必须了解SUID 不是用在目录上,而SBIT不是用在文件上的喔!

[root@study	~]#	cd	/tmp
[root@study tmp]# touch test <==创建一个测试用空档
[root@study tmp]# chmod 4755 test; ls -l test <==加入具有SUID的权限
-rwsr-xr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 6755 test; ls -l test<==加入具有SUID/SGID的权限
-rwsr-sr-x 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 1755 test; ls -l test <==加入SBIT的功能!
-rwxr-xr-t 1 root root 0 Jun 16 02:53 test
[root@study tmp]# chmod 7666 test; ls -l test <==具有空的SUID/SGID权限
-rwSrwSrwT 1 root root 0 Jun 16 02:53 test

最后一个例子就要特别小心!怎么会出现大写的S与T呢?不都是小写的吗?因为s与t 都是取代x这个权限的,但是你有没有发现阿,我们是下达7666喔!也就是说,user, group以及others都没有x这个可执行的标志(因为666嘛),所以,这个S,T代表的就 是“空的”啦!怎么说?SUID是表示“该文件在执行的时候,具有文件拥有者的权限”,但是文 件拥有者都无法执行了,哪里来的权限给其他人使用?当然就是空的啦!

而除了数字法之外,你也可以通过符号法来处理喔!其中SUID为u+s,而SGID为g+s, SBIT则是o+t啰!来看看如下的范例:

#	设置权限成为	-rws--x--x	的模样:
[root@study tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x 1 root root 0 Jun 16 02:53 test
#承上,加上SGID与SBIT在上述的文件权限中!
[root@study tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t 1 root root 0 Jun 16 02:53 test

3,linux入门到上手-文件权限管理与配置的更多相关文章

  1. (大数据工程师学习路径)第一步 Linux 基础入门----用户及文件权限管理

    用户及文件权限管理 实验介绍 1.Linux 中创建.删除用户,及用户组等操作. 2.Linux 中的文件权限设置. 一.Linux 用户管理 Linux 是一个可以实现多用户登陆的操作系统,比如“李 ...

  2. Linux常用命令之文件权限管理

    Linux文件权限管理1.改变文件或目录的权限:chmod命令详解命令名称:chmod命令所在路径:/bin/chmod执行权限:所有用户语法:chmod [{ugoa}{+-=}{rwx}] [文件 ...

  3. Linux基础入门-用户及文件权限管理

    一.Linux用户管理: 不同的用户的文件都是放在同一个物理磁盘上的甚至同一个逻辑分区或者目录里,但是由于Linux的用户管理和权限机制,不同用户不能轻易查看.修改彼此的文件. 1. 查看用户: wh ...

  4. linux:用户及文件权限管理

    学习内容来自实验楼.莫烦python.CSDN 一.Linux 用户管理 1. 查看用户 who am i 或者who mom likes who -a:打印所有能打印的  who -d :打印死掉的 ...

  5. linux学习笔记二-----文件权限管理

    一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...

  6. Linux 文件权限管理

    1.文件权限的概述 在Linux系统下,使用权限来保护资源的安全将是一种不错的选择.系统中每个文件的权限都有可读(r).可写(w)和可执行(x)这三种权限,它们分别对应权限数值4.2 和1.系统为每个 ...

  7. Linux用户及文件权限管理

    Linux用户及文件权限管理

  8. Linux命令(四)——文件权限管理

    文件权限是指对文件的访问控制,即哪些用户或群组可以访问文件以及执行什么样的操作. 一.文件的权限 1.Linux文件类型 (1)普通文件:文本文件+数据文件+可执行的二进制文件. (2)目录文件:即文 ...

  9. linux下的文件权限管理

    权限管理有两个层面 第一层区分用户:文件属主(u), 组用户(g), 其它(o) 第二层区分权限:读(r),写(w),可执行(x) 这两个层次构成文件权限管理的二维结构 u         g     ...

随机推荐

  1. ubuntu 18.04输入法问题

    ubuntu 18.04输入法IBus出现问题.打字的弹窗只选择数字1对应的汉字,选择2,3,4,5等数字对应的汉字,就会出现问题. 例如下图只能选择1 不能选择2 3 4 5. 删除了~/.cach ...

  2. [Hadoop]Hadoop章3 NameNode的ZKFC机制

    基本概念 首先我们要明确ZKFC 是什么,有什么作用: zkfc是什么? ZooKeeperFailoverController 它是什么?是Hadoop中通过ZK实现FC功能的一个实用工具. 主要作 ...

  3. 解决js数组循环删除出错

    for(var i=0,flag=true,len=arr.length;i<len;flag ? i++ : i){ if( arr[i]&&arr[i].status==0 ...

  4. java将pdf文件转为word

    import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.Output ...

  5. HttpWebRequest请求Https协议的WebApi

    public static class RequestClient { /// <summary> /// 参数列表转为string /// </summary> /// &l ...

  6. 第六周助教工作总结——NWNU李泓毅

    本周应批改作业23份,实际批改作业23份. 本周作业要求:https://www.cnblogs.com/nwnu-daizh/p/10569690.html 本周存在的问题: 一.github迭代过 ...

  7. 【翻译】Flume 1.8.0 User Guide(用户指南)

    翻译自官网flume1.8用户指南,原文地址:Flume 1.8.0 User Guide 篇幅限制,分为以下5篇: [翻译]Flume 1.8.0 User Guide(用户指南) [翻译]Flum ...

  8. .net读取excel数据到DataSet中

    Dim objExcelFile As Excel.Application Dim objWorkBook As Excel.Workbook Dim objSheet As Excel.Worksh ...

  9. 解答VS2013编译报错不准确是什么原因

    1.当程序在错误时,VS2013编译报出的错误有时不会一起全部报出,而是按错误的英文首字母逐个报出的 2.如果报错的信息双击点过去查看时又发现无明显错误问题时,这个这个时候可以是VS编译的缓存问题,这 ...

  10. spring mvc 扩展 标签解析

    spring mvc 标签解析 InterceptorsBeanDefinitionParser http://www.cnblogs.com/fangjian0423/p/springMVC-int ...