我读过一些帖子表明 ftp 尊重用户的umask
。我不认为情况是这样。这就是当我将文件从 SystemX FTP 到 SystemX 时在我的服务器 X 上发生的情况。 SystemX是Solaris系统,我的umask是002,默认的umask在/etc/profile
也是002。下面是结果。这两个问题是,为什么 ftp 文件不尊重我的 umask,以及它实际上从哪里获取它的设置?
**SystemX:/home<username>: umask
02
SystemX:/home<username>: grep umask /etc/profile
umask 02
SystemX:/home<username>: touch junk
SystemX:/home<username>: ls -l junk
-rw-rw-r-- 1 <username> infadev 0 Jan 4 16:24 junk
SystemX:/home<username>: ftp SystemX
Connected to SystemX.
220 SystemX FTP server ready.
Name (SystemX:<username>): <username>
331 Password required for <username>.
Password:
230 User <username> logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put junk junk.out
200 PORT command successful.
150 Opening BINARY mode data connection for junk.out.
226 Transfer complete.
ftp> bye
221-You have transferred 0 bytes in 1 files.
221-Total traffic for this session was 383 bytes in 1 transfers.
221-Thank you for using the FTP service on SystemX.
221 Goodbye.
SystemX:/home<username>: ls -l junk*
-rw-rw-r-- 1 <username> infadev 0 Jan 4 16:24 junk
-rw-r--r-- 1 <username> infadev 0 Jan 4 16:24 junk.out
答案1
当你使用放在ftp
, 它是服务器它决定了上传文件的权限。这FTP 手册页告诉你这junk.out
是一个偏僻的文件:
put local-file
[ 远程文件 ]将本地文件存储在远程计算机上。如果远程文件不指定则根据任意处理后使用本地文件名正反式或者地图命名远程文件的设置。文件传输使用“表示类型”、“文件结构”和“传输模式”的当前设置。
假设您使用 Solaris 的 ftp 服务器(而不是某些第三方应用程序),该信息位于FTP 访问(4),它描述了/etc/ftpd/ftpaccess
这些设置与上传的文件相关(这些设置独立于客户权限):
defumask
掩码类设置
umask
如果远程用户是指定的成员,则应用于 FTP 服务器创建的文件班级。如果班级未指定,则使用umask作为未指定类的默认值。创建的文件的模式可以通过使用指定upload
指示。
upload
[绝对|相对] [class=
班级名称]...[-]
根目录 迪格洛布是|否所有者 团体 模式 [目录|目录] [d_模式]定义一个目录迪格洛布允许或拒绝上传。如果允许上传,则所有新创建的文件均归所有者和组所有,并根据模式设置其权限。被覆盖的现有文件保留其原始所有权和权限。目录在最佳匹配的基础上进行匹配。例如:
upload /var/ftp * no
upload /var/ftp /incoming yes ftp daemon 0666
upload /var/ftp /incoming/gifs yes jlc guest 0600 nodirs
只允许上传到
/incoming
和/incoming/gifs
。上传到的文件/incoming
属于 ftp/daemon 并具有以下权限第0666章。上传的文件/incoming/gifs
归jlc/guest所有,拥有以下权限0600。可选的dirs
和nodirs
可以指定关键字以允许或禁止使用以下命令创建新的子目录mkdir
命令。如果upload
使用命令时,默认允许创建目录。要默认关闭它,您必须指定用户、组和模式,然后指定nodirs
关键字作为第一行,其中upload
该文件中使用了命令。如果允许目录,可选的d_模式确定新创建的目录的权限。如果d_模式被省略,权限是从模式推断的。权限是第0777章if 模式也被省略。这upload
关键字仅适用于主目录为根目录。根目录可以指定为 * 以匹配任何主目录。所有者或组可以分别指定为*
,在这种情况下,任何上传的文件或目录都会以创建它们的目录的所有权创建。可选的第一个参数选择是否根目录名称被解释为绝对名称或相对于当前 chroot 环境的名称。默认是解释根目录名称为绝对名称。您可以指定任意数量的class=
班级名称限制。如果有指定的话,这upload
仅当当前用户是其中一个类的成员时,子句才生效。在没有任何匹配的情况下
upload
条款中,真实用户和访客用户可以上传文件和创建目录,但匿名用户不能。上传文件的模式为第0666章。对于创建的目录,模式为第0777章。两种模式均由当前修改umask环境。
虽然比较啰嗦,但本质上是说:
- 上传文件的默认权限比您看到的更宽松,并且
defumask
允许管理员全局减少这些权限,并且upload
允许管理员进行微调。
在实践中,大多数管理员可能只是设置defumask
。
上传文件的权限不取决于您在客户端umask
外部的 shell 中的设置ftp
。 Solarisftpaccess
手册页暗示(请参阅其有关权限能力)客户端也许能够指定一个 umask,但是它的客户没有将其列为命令。
即使使用记录的设置,一些管理员也会发现一些怪癖,例如,