chmod 命令修改除了目录位之外的相应权限。
chgrp 命令修改文件所属组。
[Directory] [User permissions] [Group permissions] [Others permission]
ON/OFF READ|WRITE|EXECUTE READ|WRITE|EXECUTE READ|WRITE|EXECUTE
起始位表示该文件是否为目录,接下来三位是当前用户对该文件的读、写、执行权限,接下来三位是组对该文件的读、写、执行权限,接下来三位是其他用户对该文件的读、写、执行权限。
用户 | 0400 | 允许所有者读。 |
---|---|---|
0200 | 允许所有者写。 | |
0100 | 对于文件,允许所有者执行,对于目录,允许所有者在该目录中进行搜索。 | |
组 | 0040 | 允许组成员读。 |
0020 | 允许组成员写。 | |
0010 | 对于文件,允许组成员执行,对于目录,允许组成员在该目录中进行搜索。 | |
其他用户 | 0004 | 允许其他用户读。 |
0002 | 允许其他用户写。 | |
0001 | 对于文件,允许其他用户执行,对于目录,允许其他用户在该目录中进行搜索。 |
-------------------------------------------------------------------------------------------------------------------
chmod命令:
1.符号模式:
chmod [who] operator [permission] filename
who: u文件属主权限,g同组用户权限,o其他用户权限,a所有用户(文件属主、同组及其他用户);
operator: +增加权限,-取消权限,=设定权限;
permission: r读权限,w写权限,x执行权限。
chmod a-x myfile rw- rw- rw- 收回所有用户的执行权限
chmod og-w myfile rw- r-- r- - 收回同组用户和其他用户的写权限
chmod g+w myfile rw- rw- r- - 赋予同组用户写权限
chmod u+x myfile rwx rw- r- - 赋予文件属主执行权限
chmod go+x myfile rwx rwx r- x 赋予同组用户和其他用户执行权限
2.绝对模式:
chmod [mod] file,mod是一个八进制数。
chmod -R 664 /user/* 改变user目录下的所有文件连同各个子目录下的文件的权限全部设置。
------------------------------------------------------------------------------------------------------------------
目录
目录的读权限位意味着可以列出其中的内容,写权限位意味着可以在该目录中创建文件,如果不希望其他用户在你的目录中创建文件,可以取消相应的写权限位。执行权限位则意味着搜索和访问该目录。
drwx rwx r- x ( 7 7 5 ) 读、写、执行读、写、执行读、执行
drwx r-x r- - ( 7 5 4 ) 读、写、执行读、执行读
drwx r-x r- x ( 7 5 5 ) 读、写、执行读、执行读、执行
目录的权限将会覆盖该目录中文件的权限,如果某用户没有访问目录的权限,即使有对目录下某一文件的操作权限,他也不能操作该文件。
-------------------------------------------------------------------------------------------------------------------
suid/guid
suid意味着如果A用户对属于他自己的shell脚本文件设置了这种权限,那么其他用户在执行这个脚本的时候就拥有了A用户的权限。所以,如果 root用户对某一脚本设置了这一权限的话则其他用户执行该脚本的时候则拥有了root用户权限。同理,guid意味着执行相应脚本的用户则拥有了该文件所属用户组中用户的权限。
为什么使用suid/guid?
举个例子:要对数据库系统进行备份需要有系统管理权限,那么我可以写几个脚本,并设置了它们的guid,这样我指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,但是在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。
有相当一些命令也设置了suid和guid。如果想找出这些命令,可以进入/bin或/sb in目录,执行下面的命令:
$ ls -l | grep '^...s'
上面的命令是用来查找suid文件的;
$ ls -l | grep '^...s..s'
上面的命令是用来查找suid和guid的。
如何设置suid/guid?
如果希望设置suid,那么就将相应的权限位之前的那一位设置为4;如果希望设置guid,那么就将相应的权限位之前的那一位设置为2;如果希望两者都置位,那么将相应的权限位之前的那一位设置为4+2。
一旦设置了这一位,一个s将出现在x的位置上。记住:在设置suid或guid的同时,相应的执行权限位必须要被设置。例如,如果希望设置guid,那么必须要让该用户组具有执行权限。
如果想要对文件login设置suid,它当前所具有的权限为rwx rw- r-- (741),需要在使用chmod命令时在该权限数字的前面加上一个4,即chmod 4741,这将使该文件的权限变为rws rw- r--。
$ chmod 4741 login
还可以使用符号方式来设置suid/guid。如果某个文件具有这样的权限: rwx r-x r-x,那么可以这样设置其suid/guid:
chmod u+s <filename>
chmod u+g <filename>
-----------------------------------------------------------------------------------------------------------------
group 用户名,查找用户属于的组
umask nnn 确定创建文件的缺省模式。对文件来说,nnn数字最大值分别为6,系统不允许在创建一个文本文件是就赋予它执行权限,需要在创建后用chmod命令增加这一权限;目录则允许设置执行权限,即对目录来说nnn对应数值最大可为7。
umask 002 相应的文件和目录缺省创建权限是664和775。