作者:jicanmeng
时间:2016年06月05日
命令格式如下:
chown [-R] 帐号名称 文件或目录
chown [-R] 帐号名称:群组 文件或目录
chown [-R] 帐号名称.群组 文件或目录
chown的用途还满多的,他还可以顺便直接修改群组的名称呢!此外,如果要连目录下的所有次目录或文件同时更改文件拥有者的话,直接加上 -R 的选项即可!示例如下:
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chown bin limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 bin jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chown bin:sshd limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 bin sshd 387988 May 30 21:56 limux.pdf
[root@andy tmp]#
此外,chown也能单纯的修改所属群组呢!示例如下:
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chown :sshd limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng sshd 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chown .bin limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng bin 387988 May 30 21:56 limux.pdf
[root@andy tmp]#
请记得,要被改变的帐号名称必须要在/etc/passwd文件内存在才行,否则就会显示错误!
命令格式如下:
chgrp [-R] 群组名称 文件或目录
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chgrp sshd limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng sshd 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chgrp abcd limux.pdf
chgrp: invalid group: `abcd'
[root@andy tmp]#
请记得,要被改变的组名必须要在/etc/group文件内存在才行,否则就会显示错误!
命令格式如下:
chmod [-R] 权限 文件或目录
权限的设定方法有两种, 分别可以使用数字或者是符号来进行权限的变更。
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chmod 640 limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-r-----. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]#
chmod | u g o a |
+(加入) -(除去) =(设定) |
r w x | 文件或目录 |
[root@andy tmp]# ll limux.pdf
-rw-rw-rw-. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]# chmod u=rx,g=r limux.pdf
[root@andy tmp]# ll limux.pdf
-rw-r-----. 1 jicanmeng jicanmeng 387988 May 30 21:56 limux.pdf
[root@andy tmp]#
除了文件分别针对user,group,others的可读,可写,可执行属性外,文件还有一些隐藏属性。
chattr用于设定文件的隐藏属性,命令格式如下:
chattr [+-=][ai] 档案或目录名称
+
表示增加属性,-
表示去除属性,=
表示设置该属性,不管以前有没有此属性。
a
: 表示这个档案将只能增加资料,而不能删除也不能修改资料,只有root才能设定这个属性。i
: 这个属性可厉害了!他可以让一个档案‘不能被删除、改名、设定连结也无法写入或新增资料!’对于系统安全性有相当大的助益!只有 root 能设定此属性。lsattr用于设定文件的隐藏属性,命令格式如下:
lsattr [-adR] 档案或目录名称
a
: 将隐藏档的属性也秀出来;d
: 如果接的是目录,仅列出目录本身的属性而非目录内的档名;R
: 连同子目录的资料也一并列出来;[root@andy tmp]# lsattr limux.pdf
-------------e- limux.pdf
[root@andy tmp]# chattr +i limux.pdf
[root@andy tmp]# lsattr limux.pdf
----i--------e- limux.pdf
[root@andy tmp]# rm limux.pdf
rm: remove regular file `limux.pdf'? y
rm: cannot remove `limux.pdf': Operation not permitted
[root@andy tmp]# df -hT .
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 247G 127G 108G 54% /
[root@andy tmp]#
《鸟哥的linux私房菜》中提到,chattr命令只能在ext2/ext3档案系统上面应用。我的档案系统是ext4,也可以应用。
首先看三个例子:
[root@andy tmp]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
[root@andy tmp]# ll /etc/shadow
----------. 1 root root 1067 Jun 5 14:56 /etc/shadow
[root@andy tmp]#
[root@andy tmp]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 38464 Oct 10 2012 /usr/bin/locate
[root@andy tmp]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 7315108 Jun 5 15:20 /var/lib/mlocate/mlocate.db
[root@andy tmp]#
[root@andy tmp]# ll -d /tmp
drwxrwxrwt. 27 root root 4096 Jun 5 22:48 /tmp
[root@andy tmp]#
当 s 这个标志出现在文件拥有者的 x 权限上时,例如 /usr/bin/passwd 这个文件的权限状态:『-rwsr-xr-x』,此时就被称为 Set UID,简称为 SUID 的特殊权限。 那么SUID的权限对於一个文件的特殊功能是什么呢?基本上SUID有这样的限制与功能:
还是以 /usr/bin/passwd 这个文件来举例,它用于修改用户的密码。而用户的密码是保存在 /etc/shadow 文件中的,这个文件只有root才可以强制写入。但是一般用户也的确可以修改自己的密码的,也就是说,的确修改了 /etc/shadow 文件的内容。这是怎么一回事呢? 原因就在于 /usr/bin/passwd 可执行文件的权限。/etc/shadow文件是由/usr/bin/passwd文件修改的,普通用户在执行/usr/bin/passwd可执行文件时,会暂时具有root的权限,所以可以修改/etc/shadow的内容。
有一个问题:既然普通用户执行 /usr/bin/passwd 时获取了root的权限,那么这个普通用户是不是可以修改任意一个用户的密码呢? 答案是否定的。因为 /usr/bin/passwd 这个程序在运行时会调用系统调用getuid()来得到用户ID,如果发现是个普通用户,但却要修改其他人的密码,会直接拒绝的。
还有亮点:1. SUID 仅可用在binary program 上, 不能够用在 shell script 上面! 2. SUID 对于目录也是无效的~这点要特别留意。
当 s 标志在文件拥有者的 x 项目为 SUID,那 s 在群组的 x 时则称为 Set GID, SGID 喽!是这样没错!^_^。但与 SUID 不同的是,SGID 可以针对文件或目录来配置!
以上面提到的 /usr/bin/locate 这个可执行文件和 /var/lib/mlocate/mlocate.db 文件来举例,普通用户在调用locate命令时,会从 /var/lib/mlocate/mlocate.db 文件中读取信息。但这个文件只有root用户和属于slocate群组的用户才可以读取。由于locate具有SGID,所以普通用户在调用locate命令时加入slocate群组,从而可以读取/var/lib/mlocate/mlocate.db 文件。
目前没有遇到过目录具有SGID的情况,这里就不举例了。
这个 Sticky Bit, SBIT 目前只针对目录有效,对於文件已经没有效果了。 SBIT 对於目录的作用是:
/tmp目录就具有sticky bit权限,普通用户在这个目录下创建的文件,只有自己才可以删除,其它普通用户无法删除。
使用chmod
命令设置SUID,SGID,Sticky Bit权限。SUID对应于4,SGID对应于2,sticky bit对应于1。举例如下:
[root@andy tmp]# touch test
[root@andy tmp]# ls -l test
-rw-r--r--. 1 root root 0 Jun 6 00:03 test
# 添加SUID权限
[root@andy tmp]# chmod 4755 test; ls -l test
-rwsr-xr-x. 1 root root 0 Jun 6 00:03 test
[root@andy tmp]#
# 添加SUID和SGID权限
[root@andy tmp]# chmod 6755 test; ls -l test
-rwsr-sr-x. 1 root root 0 Jun 6 00:03 test
[root@andy tmp]#
# 添加sticky bit权限
[root@andy tmp]# mkdir emptyDir; ls -ld emptyDir
drwxr-xr-x. 2 root root 4096 Jun 6 00:05 emptyDir/
[root@andy tmp]# chmod 1755 emptyDir; ls -ld emptyDir
drwxr-xr-t. 2 root root 4096 Jun 6 00:05 emptyDir/
[root@andy tmp]#
# 空的SUID、SGID、sticky bit权限
[root@andy tmp]# chmod 7666 test; ls -l test
-rwSrwSrwT. 1 root root 0 Jun 6 00:03 test
[root@andy tmp]#
特别要注意最后一个例子:怎么会出现大写的 S 与 T 呢?不都是小写的吗? 因为 s 与 t 都是取代 x 这个权限的,但是你有没有发现阿,我们是下达 7666 喔!也就是说, user, group 以及 others 都没有 x 这个可运行的标志( 因为 666 嘛 ),所以,这个 S, T 代表的就是『空的』啦!怎么说? SUID 是表示『该文件在运行的时候,具有文件拥有者的权限』,但是文件 拥有者都无法运行了,哪里来的权限给其他人使用?当然就是空的啦! ^_^
而除了数字法之外,你也可以透过符号法来处理喔!其中 SUID 为 u+s ,而 SGID 为 g+s ,SBIT 则是 o+t 喽!来看看如下的范例:
[root@andy tmp]# chmod u=rwxs,go=x test; ls -l test
-rws--x--x. 1 root root 0 Jun 6 00:03 test
[root@andy tmp]#
[root@andy tmp]# chmod g+s,o+t test; ls -l test
-rws--s--t. 1 root root 0 Jun 6 00:03 test
[root@andy tmp]#