如何获取 cifs 安装文件夹上的文件元数据?

如何获取 cifs 安装文件夹上的文件元数据?

在我们公司,我们有一个共享的 Windows 文件夹。如果我从 Windows 访问它,我可以弹出文件的“属性”菜单并找到它元数据:谁创建了它,上次访问时间等等。

在 Linux 上,我安装了这个文件夹mount -t cifs。我想编写一个脚本来获取有关文件夹使用情况的一些统计信息。

有什么方法可以从 Linux 访问这些元数据吗?

UPD:我不能使用getfacl, statorls -la来完成我的任务,因为所有这些都只给我安装此文件夹的本地 Linux 用户名,而不是来自 Windows 域服务器的名称。

UPD2:我使用以下命令挂载共享:sudo mount -t cifs //data/Shared /mnt/Shared -o uid=1000,gid=1000,user=<my_windows_account_name>,dom=<my_domain>,pass=<my_windows_password>,其中 uid=1000 和 gid=1000 是我的 Linux 帐户的 uid 和 gid。

答案1

你正在使用

mount -t cifs //data/Shared /mnt/Shared -o uid=1000,gid=1000,user=<my_windows_account_name>,dom=<my_domain>,pass=

这告诉本地系统有两个方面的信息:

  1. 使用指定为元组 { user、domain、password } 的凭据对远程服务器进行身份验证
  2. 伪造对远程共享的所有访问/来自远程共享的所有访问,就好像它们来自 UID 1000 和 GID 1000 的用户帐户

您需要继续使用#1,尽管我强烈建议您将用户凭据移至一个安全文件中,该文件只能由 root 和代表帐户凭据的本地用户读取。man mount.cifs详情请参阅

# As root...
cat >/usr/local/etc/Shared.cifs <<'X'
username=my_windows_account_name
domain=my_domain
password=my_windows_password
X
chmod u=rw,go= /usr/local/etc/Shared.cifs
chown my_unix_account_name:root /usr/local/etc/Shared.cifs

# Then mount becomes
mount -t cifs //data/Shared /mnt/Shared -o credentials=/usr/local/etc/Share.cifs,noperm

但是,您需要停止使用#2,而是让本地客户端了解 AD 上下文中使用的名称。对于这里来说太多了,但要点是这些

  • 安装realmdsamba依赖项
  • 确保您的 DNS 服务器是 AD 域服务器(或本地等效服务器)
  • 运行realm discover查找并检查是否可以看到正确的 AD 域
  • 运行realm join {domain}以加入域

您现在可能想要拒绝其他 AD 用户登录您的本地系统。要查看的命令是realm deny -alland的变体realm permit --groups 'domain admins',以及AllowUsersAllowGroupsin 的变体/etc/ssh/sshd_config。如果您不是域管理员,则需要相应地更改此设置。手册页非常好。

您可以使用以下命令测试连接是否成功

net ads testjoin
getent password my_windows_account_name    # As above
getent group "domain admins"               # An example group that will exist

答案2

stat命令可以以适合脚本编写的方式显示文件/目录时间戳、所有权和一些其他元数据:请参阅 参考资料man 1 stat获取更多信息。

对于权限,尤其是 ACL,getfacl这是您需要的命令。对于其他各种属性,有getfattr.

如果您想知道特定目录(包括其所有子目录)中有多少数据,则需要该du命令。

相关内容