[英]How do I create a crontab job in unix that will move all files in my home directory to another directory at a specific time/date?
[英]How do I create a file in UNIX /tmp directory so that all users can read and write to it?
我正在嘗試在/tmp
目錄中創建一個文件(在 Linux UBUNTU 7.10 上工作),該文件對任何用戶都具有讀/寫/執行訪問權限。
所以我正在使用
open(fileName,O_CREAT|O_RDWR,0777)
在user1
帳戶中創建文件(從 C 程序)的函數,我希望user2
能夠寫入特定文件。
但是,當我檢查/tmp
目錄時,使用
ls -l
我看到我沒有user2
的寫訪問權限(考慮到user1
創建了它,我對user1
有寫訪問權限,但被認為是“其他人”的user2
沒有任何訪問權限)。
我嘗試在open
函數中使用模式0766
(以及模式7
和6
這種組合),以便我可以獲得對user2
寫訪問權限,但我仍然沒有所需的訪問權限。
您必須將您的 umask 設置為 000。 umask 上的位從您選擇的權限中刪除,默認的 umask 通常是 022 或 002。
請注意,默認 ACL 和 SELinux 標簽等內容也可能會影響文件的可讀性和可寫性。 使用 getfacl 查看 ACL,使用 ls -Z 查看 SELinux 標簽; 對於 SELinux,您還必須知道哪些策略處於活動狀態以及它們具有什么效果。 也可以在 ls -l 上看到 ACL 的存在,作為權限后的 + 字符。
正如 CesarB 指出的那樣,Unix 會取消設置進程 umask 中設置的位,因此要獲得完全訪問權限,您必須暫時取消設置 umask。
mode_t oldmask = umask(0);
fd = open(...);
oldmask = umask(oldmask);
assert(oldmask == 0);
(好的;您不必執行斷言;它不會觸發。)
正如 Pistos 所指出的,在 /tmp 中創建文件是一個充滿挑戰的過程。 如果您認為該文件不應該存在,請添加 O_EXCL 以防止跟隨符號鏈接到意外位置。
最后一點 - 為什么要使文件可執行? 我認為您的目標應該是 666 權限,而不是 777 或 766。您絕對不應該執行其他人可以隨時更改的程序(因此所有者不應該對其他人可以寫入的文件具有執行權限),並且小組成員可能也不會真正欣賞這種慷慨。 如果其他人執行該文件,他們可能會得到他們應得的東西——但這仍然不好。
FWIW,在/tmp(或/var/tmp 等)中使用固定名稱創建任何內容都存在安全風險。 可以在 /tmp 中設置一個指向任何內容的同名符號鏈接,如果運行您的程序的用戶有權這樣做,您的程序將銷毀目標文件。
在 /tmp 中以編程方式創建的東西應該被賦予隨機名稱,但最好不要使用該目錄,除非您的整個系統是安全的(沒有潛在的惡意用戶)。
您唯一可以做的就是在創建文件后對其進行 chmod:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main() {
creat("/tmp/foo", 0);
chmod("/tmp/foo", 0666);
}
無論如何,擁有這種文件是不安全的。
我假設您正在嘗試執行一些 IPC。 您是否考慮過使用其他方法來實現這一點,例如使用 dbus 或為此目的設計的其他系統?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.