當使用者登入時,我需要執行需要升級權限的命令。我不想授予用戶該命令的 sudo 存取權。我只想為該用戶運行此腳本,而不是為所有用戶運行。
答案1
根據您的評論,聽起來您希望使用者「fred」沒有常規 shell,但在登入時執行腳本「foo」。如果您不希望 Fred 非常努力地逃離他的“沙箱”,那麼這可以很容易地完成。
$ cat ~fred/.bash_login
#!/bin/bash
exec /usr/local/bin/foo
## in ubuntu each user has a group of his "own"
$ sudo chown foo:fred ~fred ~fred/.bash_login /usr/local/bin/foo
## prevent fred from altering the files and directories we care about
$ sudo chmod g-w ~fred ~fred/.bash_login /usr/local/bin/foo
## make script foo run with user foo's privileges
$ sudo chmod u+s /usr/local/bin/foo
所以 fred 現在甚至不會得到 shell 提示符,因為他的登入 shell 所做的第一件事就是用 foo 取代自己;當腳本 foo 退出時,fred 將被註銷。 Fred 應該缺乏爬出這個沙箱的動力的原因是,許多程序允許打開從屬 shell,這將允許 Fred 撤消此處顯示的窮人的鎖定。
使用此方法與“root”而不是某些非超級用戶 foo 可以用來劫持 root,所以不要這樣做。
答案2
我會使用chmod 6755 filename
(或 6711,如果你不想被其他使用者讀取)然後將其放入 cron 中...這應該可以工作,因為它是作為所有者運行此文件的權限。所以,如果你以root身份創建它,你應該能夠像這樣使用它......