• 3,linux入门到上手-文件权限管理与配置


    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
    
  • 相关阅读:
    548
    zookeeper的异常处理(Disconnected, SyncConnected, Expired)
    ZOJ 2588 Burning Bridges(求含重边的无向连通图的割边)
    SQL Server 中VARCHAR(MAX)变量赋值引起的性能问题。
    查看mysql数据库版本方法总结
    Linux mysql 5.6: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
    Ignite用户配置管理介绍
    ORACLE动态采样分析
    SQL SERVER 2012链接到SQL SERVER 2000的问题解决案例
    SQL SERVER 2005删除维护作业报错:The DELETE statement conflicted with the REFERENCE constraint "FK_subplan_job_id"
  • 原文地址:https://www.cnblogs.com/v01cano/p/10653825.html
Copyright © 2020-2023  润新知