当 I 时ls -la
,它会打印许多属性。像这样的东西:
-rwSrwSr-- 1 www-data www-data 45 2012-01-04 05:17 README
可耻的是,我不得不承认我不知道每个属性的确切含义。例如,S
字符串中的big 是什么意思-rwSrwSr--
?下面是什么1
?其他人我也大致了解一下。
答案1
该命令的文档ls
回答了这些问题。在大多数 Unix 变体上,请查找ls
手册页(man ls
或在线)。在 Linux 上,查找信息文档 ( info ls
) 或在线的。
该信函s
表示设定值(或 setgid,取决于列)位已设置。当可执行文件设置了 setuid 时,它会以拥有该可执行文件的用户(而不是调用该程序的用户)身份运行。该字母s
取代了该字母x
。一个文件有可能被 setuid 但不可执行;这用 表示S
,其中大写字母S
提醒您此设置可能是错误的,因为如果文件不可执行,setuid 位(几乎总是)无用。
当一个目录具有 setuid(或 setgid)权限,在该目录中创建的任何文件都将由与该目录的所有者(或组)匹配的用户(或组)拥有。
权限后面的数字是硬链接数数。硬链接是文件的路径(换句话说,是名称)。大多数文件都有一个路径,但您可以使用该ln
命令创建更多路径。 (这与符号链接不同:符号链接表示“哦,实际上,这个文件在其他地方,转到<位置>”。)目录有 N+2 个硬链接,其中 N 是子目录的数量,因为它们可以被访问来自其父目录、来自自身(通过条目.
)以及来自每个子目录(通过..
条目)。
答案2
根据 info coreutils ls
(这可能不完全是你所拥有的):
`s'
如果 setuid 或 setgid 位以及相应的可执行位都已设置。`S'
如果设置了 setuid 或 setgid 位,但未设置相应的可执行位。
权限部分后面的数字是硬链接的数量。
答案3
用(希望更简单的)术语来说,这意味着。该目录是setgid。在那里创建的任何文件都将归该文件夹所有者的该组所有。
但是,该文件夹不能由该组执行,因此它以大写 S 显示。这通常是在创建目录时,该目录最终将作为 setgid。
嗯..不确定上面听起来是否真的像简单的英语..
答案4
还考虑掩码,shell 设置在创建文件时减去该值以获得完全访问权限(文件为 666,目录为 777)。
标准行为设定值/设置gid是从父目录传播到子目录
可以使用以下命令序列获得目录的“S”权限(检查umask 077
,...):
~/test$ id
uid=1004(dsuser) gid=100(users)
~/test$
~/test$ umask
0002
~/test$
~/test$ mkdir aaa
~/test$ ls -l
total 4
drwxrwxr-x 2 dsuser users 4096 Nov 5 14:57 aaa
~/test$ chmod g+s aaa
~/test$ ls -l
total 4
drwxrwsr-x 2 dsuser users 4096 Nov 5 14:57 aaa
~/test$ cd aaa
~/test/aaa$
~/test/aaa$ mkdir bbb
~/test/aaa$ ls -l
total 4
drwxrwsr-x 2 dsuser users 4096 Nov 5 14:58 bbb
~/test/aaa$
~/test/aaa$ umask 077
~/test/aaa$
~/test/aaa$ mkdir ccc
~/test/aaa$
~/test/aaa$ ls -l
total 8
drwxrwsr-x 2 dsuser users 4096 Nov 5 14:58 bbb
drwx--S--- 2 dsuser users 4096 Nov 5 14:59 ccc