- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试创建一个权限为 02770 的目录,这样生成的权限将是 drwxrws---
当我运行以下命令时,我得到了预期的行为
rsam.svtest2.serendipity> (/home/svtest2)
$ mkdir abc
rsam.svtest2.serendipity> (/home/svtest2)
$ ls -lrt
drwxrwxr-x 2 svtest2 users 6 Apr 18 10:57 abc
rsam.svtest2.serendipity> (/home/svtest2)
$ chmod 02770 abc
rsam.svtest2.serendipity> (/home/svtest2)
$ ls -lrt
drwxrws--- 2 svtest2 users 6 Apr 18 10:57 abc
更新#1从上面开始,在目录上运行 mkdir 和 chmod 之后,当我运行 chown 时,SGID 位被清除。
rsam.svtest2.serendipity> (/home/svtest2)
$ chown svtest2:users abc
rsam.svtest2.serendipity> (/home/svtest2)
$ ls -lrt
drwxrwx--- 2 svtest2 users 6 Apr 18 10:57 abc
Only a privileged process (Linux: one with the CAP_CHOWN capability) may change the owner of a file. The owner of a file may change the group of the file to any group of which that owner is a member. A privileged process (Linux: with CAP_CHOWN) may change the group arbitrarily.
问题是我的用户 svtest 没有 CAP_CHOWN 能力。现在问题归结为 - 如何让用户拥有 CAP_CHOWN 功能?
看起来这里有一些说明 - SO - setting CAP_CHOWN但我还没有尝试过。
但是,当我在 C++ 代码(燕尾服服务器的一部分)下运行时
// Check if the directory exists and if not creates the directory
// with the given permissions.
struct stat st;
int lreturn_code = stat(l_string, &st);
if (lreturn_code != 0 &&
(mkdir(l_string, lpermission) != 0 ||
chmod(l_string, lpermission) != 0)) {
....
....
}
....
....
// Convert group name to group id into lgroup
if (chown(l_string, -1, lgroup) != 0) {
// System error.
}
目录创建如下:
$ ls -l|grep DirLevel1
drwxrwx--- 2 svtest2 users 6 Apr 18 11:14 DirLevel1
请注意,与如上所述直接运行命令时相比,SGUID 位未设置。
操作的strace摘录:
5864 stat("/home/svtest2/data/server/log/DirLevel1/", 0x7ffd235f29f0) = -1 ENOENT (No such file or directory)
5864 mkdir("/home/svtest2/data/server/log/DirLevel1/", 02770) = 0
5864 chmod("/home/svtest2/data/server/log/DirLevel1/", 02770) = 0
5864 socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 15
5864 connect(15, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
5864 close(15) = 0
5864 socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 15
5864 connect(15, {sa_family=AF_LOCAL, sun_path="/var/run/nscd/socket"}, 110) = -1 ENOENT (No such file or directory)
5864 close(15) = 0
5864 open("/etc/group", O_RDONLY|O_CLOEXEC) = 15
5864 fstat(15, {st_mode=S_IFREG|0644, st_size=652, ...}) = 0
5864 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f414d7c4000
5864 read(15, "root:x:0:\nbin:x:1:\ndaemon:x:2:\ns"..., 4096) = 652
5864 close(15) = 0
5864 munmap(0x7f414d7c4000, 4096) = 0
5864 chown("/home/svtest2/data/server/log/DirLevel1/", 4294967295, 100) = 0
5864 write(7, "\0\0\2~\6\0\0\0\0\0\21i\216\376\377\377\377\377\377\377\377\1\0\0\0\0\0\0\0\1\0\0"..., 638) = 638
5864 read(7, "\0\0\0\300\6\0\0\0\0\0\10\0\0\0\0\250\0\0\0\0\0\0\0\0\0(\0\0\0\0\0\0"..., 8208) = 192
5864 write(7, "\0\0\1}\6\0\0\0\0\0\3h\221\1\0\0\0\0\0\0\0\376\377\377\377\377\377\377\377\250\0\0"..., 381) = 381
5864 read(7, "\0\0\0\26\6\0\0\0\0\0\10\4\0\0\0\t\1\0\0\0\215\f", 8208) = 22
5864 msgsnd(43679799, {805306373, "y\0\0\0007\200\232\2\0\0\0\0\f\2\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0"...}, 516, IPC_NOWAIT) = 0
5864 msgrcv(43614264,
来自 http://man.sourcentral.org/RHEL7/2+chown ,
When the owner or group of an executable file are changed by an unprivileged user the S_ISUID and S_ISGID mode bits are cleared. POSIX does not specify whether this also should happen when root does the chown(); the Linux behavior depends on the kernel version. In case of a non-group-executable file (i.e., one for which the S_IXGRP bit is not set) the S_ISGID bit indicates mandatory locking, and is not cleared by a chown().
上面突出显示了一种可能的情况,但我不确定它如何适用于我的情况,因为它不是可执行文件而是一个目录。
最佳答案
由于 *nix 系统通过查看“x”权限位将文件视为可执行文件,我相信可搜索目录也可能被视为可执行文件。
关于linux - chown 不设置 SGID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36700212/
我的 Dockerfile 在以下步骤中失败: ADD --chown=user:user test.py /etc/test 关于如何修复它的任何建议?我正在使用 AWS EC2 实例 RHEL 7
我首先安装了一个 WD Elements 驱动器 sudo mount /dev/sdb1 /media/elements 然后,在挂载的驱动下创建一个测试文件 touch test 得到 -rwxr
更新:事实证明问题比我原先想象的要复杂。我同时试图解决为什么我的 mkdir 停止工作,这是因为我手动更改了父目录的权限以进行测试,然后将它们切换回来并添加了一个 chmod 到脚本不起作用,因为该脚
-bash-3.2$ man chgrp | head -1 CHGRP(1) User Commands
我无法从 UID“chown”获取用户名。 例如: 123456789 123456789 jdoe -------------------------------------- chown jdoe
我正在使用 Capistrano(Railsless)来部署 PHP 项目。我正在通过普通用户帐户执行 SSH。我的问题是当我部署时我需要在文件夹(用户是一组)上运行 chown -R www-dat
我做了什么 昨晚在我的 Wordpress 网站上更新插件时,我的网站崩溃了,我不得不启动一个新服务器并从 Vaultpress 备份中恢复。恢复完成传播后,我无法更新插件,因此我运行了命令 chow
我在向图像添加文件并通过 --chown 设置所有权时遇到问题旗帜。具体来说,这是一个 dockerfile 添加一个简单的文本文件: FROM fedora:24 ARG user_name=sla
在 puppet 中,您可以通过以下方式 chown/chmod 单个文件: file { '/var/log/mylog/test.log': ensure => 'present
我刚刚安装了 Homebrew。当我运行 brew doctor 时,我得到了这个 Warning: Some directories in /usr/local/share/man aren't w
我要排除一些大内容目录 我用它来 chown 目录 chown -R admin /home/admin/web/public_html 反正有没有排除html下的子目录 喜欢: chown -R a
我遇到的问题是我无法 chmod 用户目录,因此用户可以控制他们自己的目录。设置 Ubuntu 服务器时,一位用户 patrick 获得了完全控制权,如图所示。我想更改此设置,以便每个用户都可以像某些
我在更改我的 Android 外壳中的所有者时遇到了一些问题。我正在尝试更改文件的所有者和组以匹配目录中的另一个文件。当我 ls -l 其他文件拥有 u0_a49 的所有者时,我尝试 su chown
我正在尝试为 chown 文件夹所有者创建脚本,但我遇到了一些问题。 我在 /home 中有很多文件夹。例如: /home/user1 /home/user2 /home/user_n 并且想要根据文
我正在尝试创建一个权限为 02770 的目录,这样生成的权限将是 drwxrws--- 当我运行以下命令时,我得到了预期的行为 rsam.svtest2.serendipity> (/home/svt
我在 /home/ 目录中有大约 400 个用户。 我在 /var/repos/my_repo.git 上有一个 git 存储库 我已经使用 root 帐户通过 bash 命令将此存储库克隆到主文件夹
平台:CentOS 5.6 x86_64 我有一个生产服务器和一个开发服务器。我想在一个几乎相同的大型目录结构中调试文件所有权和权限,在临时缓存中提供或获取一些临时文件。 有人知道这是否可行吗?考虑到
我有问题,我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作,其中 1002 是系统的用户 ID。 file_put_contents($filename, $
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 9 年前。 Improve
这个语法有什么不正确的地方?它不会让我运行同步.. settings = { logfile = "/var/log/lsyncd/lsyncd.log", statusFile =
我是一名优秀的程序员,十分优秀!