加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

flock的许可被拒绝了

发布时间:2020-12-15 21:00:16 所属栏目:安全 来源:网络整理
导读:我写了一个小测试脚本,以防止与flock同时运行我的脚本: #!/bin/bashscriptname=$(basename $0)lock="/var/run/${scriptname}"umask 0002exec 200$lockflock -n 200 || exit 1## The code:sleep 60echo "Hello world" 当我与我的用户一起运行脚本并尝试与另
我写了一个小测试脚本,以防止与flock同时运行我的脚本:

#!/bin/bash

scriptname=$(basename $0)
lock="/var/run/${scriptname}"
umask 0002

exec 200>$lock
flock -n 200 || exit 1

## The code:
sleep 60
echo "Hello world"

当我与我的用户一起运行脚本并尝试与另一个用户运行脚本时,我收到了锁定文件的错误消息.

/var/run/test.lock: Permission denied

任何的想法?

亲切的问候,
安德烈亚斯

解决方法

在评论中,你提到了这一点

other user is in the same group. file permissions are -rw-r--r--

换句话说,只有第一个用户对锁定文件具有写入权限.

但是,您的脚本会:

exec 200>$lock

它试图打开锁文件进行写入.因此“权限被拒绝”错误.

打开文件进行写入的优点是,如果文件不存在,它不会失败,但这也意味着如果您的脚本同时运行,您无法轻易预测该文件的所有者将是谁比一个用户. [1]

在大多数Linux发行版中,umask将设置为0022,这会使新创建的文件具有权限rw-r – r–,这意味着只有创建该文件的用户才具有写权限.这是一个理智的安全策略,但它使用两个或多个用户之间共享的锁文件变得复杂.如果用户位于同一组中,则可以调整umask,以便使用组写权限创建新文件,并记住之后将其设置回来.例如(未经测试):

OLD_UMASK=$(umask)
umask 002
exec 200>"$lock"
umask $OLD_UMASK

或者,您可以仅使用读取权限[2]来应用锁定,注意确保首先创建文件:

touch "$lock" 2>/dev/null # Don't care if it fails.
exec 200<"$lock"          # Note: < instead of >

笔记:

[1]:exec 200>文件的另一个问题是,如果文件存在,它将截断文件,因此它仅适用于空文件.通常,您应该使用>>除非您确定该文件不包含任何有用信息.

[2]:flock不关心文件打开的模式.有关更多信息,请参阅man 1 flock.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读