在我们公司,我们有一个共享的 Windows 文件夹。如果我从 Windows 访问它,我可以弹出文件的“属性”菜单并找到它元数据:谁创建了它,上次访问时间等等。
在 Linux 上,我安装了这个文件夹mount -t cifs
。我想编写一个脚本来获取有关文件夹使用情况的一些统计信息。
有什么方法可以从 Linux 访问这些元数据吗?
UPD:我不能使用getfacl
, stat
orls -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=
这告诉本地系统有两个方面的信息:
- 使用指定为元组 { user、domain、password } 的凭据对远程服务器进行身份验证
- 伪造对远程共享的所有访问/来自远程共享的所有访问,就好像它们来自 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 上下文中使用的名称。对于这里来说太多了,但要点是这些
- 安装
realmd
和samba
依赖项 - 确保您的 DNS 服务器是 AD 域服务器(或本地等效服务器)
- 运行
realm discover
查找并检查是否可以看到正确的 AD 域 - 运行
realm join {domain}
以加入域
您现在可能想要拒绝其他 AD 用户登录您的本地系统。要查看的命令是realm deny -all
and的变体realm permit --groups 'domain admins'
,以及AllowUsers
和AllowGroups
in 的变体/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
命令。