newgrp
命令只能在交互式shell,AFAICT中有效地使用。事實上,我放棄了......好吧,讓我們先說很久,我寫的替代品現在有資格在英國和美國投票。
請注意,newgrp
是'內置到'外殼的特殊命令。嚴格來說,它是一個shell外部的命令,但shell具有關於如何處理它的內置知識。 shell實際上是exec
的程序,所以你之後立即得到一個新的shell。它也是一個setuid根節目。在Solaris上,至少newgrp
也似乎忽略了SHELL環境變量。
我有很多方案可以解決newgrp
打算解決的問題。請記住,該命令會預先記錄用戶同時屬於多個組的能力(請參閱Version 7 Unix Manuals)。由於newgrp
沒有提供執行命令後的執行機制,與su
或sudo
不同,我編寫了一個程序newgid
,與newgrp
一樣,它是一個setuid根程序,允許您從一個組切換到另一個組。它非常簡單 - 只需main()外加一組使用的標準化錯誤報告功能。與我聯繫(源於gmail dot com的第一個點最後)。我還有一個非常危險的命令叫'asroot
',它允許我(但只有我 - 在默認編譯下)更加徹底地調整用戶和組列表。
asroot: Configured for use by jleffler only
Usage: asroot [-hnpxzV] [<uid controls>] [<gid controls>] [-m umask] [--] command [arguments]
<uid controls> = [-u usr|-U uid] [-s euser|-S euid][-i user]
<gid controls> = [-C] [-g grp|-G gid] [-a grp][-A gid] [-r egrp|-R egid]
Use -h for more help
Option summary:
-a group Add auxilliary group (by name)
-A gid Add auxilliary group (by number)
-C Cancel all auxilliary groups
-g group Run with specified real GID (by name)
-G gid Run with specified real GID (by number)
-h Print this message and exit
-i Initialize UID and GIDs as if for user (by name or number)
-m umask Set umask to given value
-n Do not run program
-p Print privileges to be set
-r euser Run with specified effective UID (by name)
-R euid Run with specified effective UID (by number)
-s egroup Run with specified effective GID (by name)
-S egid Run with specified effective GID (by number)
-u user Run with specified real UID (by name)
-U uid Run with specified real UID (by number)
-V Print version and exit
-x Trace commands that are executed
-z Do not verify the UID/GID numbers
Mnemonic for effective UID/GID:
s is second letter of user;
r is second letter of group
(此程序長大:被我從頭重做,我會接受用戶ID或用戶名,而無需不同的選項字母;對於組ID或組名同上。)
它可以是棘手獲得安裝setuid root程序的權限。由於多組設施,現在有一些解決方法可用。一種可行的技術是在你想要創建文件的目錄上設置setgid位。這意味着無論誰創建文件,該文件都將屬於擁有該目錄的組。這通常可以達到你需要的效果 - 儘管我知道很少有人持續使用它。
這並不工作 – Paul 2008-11-18 19:12:27
都能跟得上...這是行不通的。 – 2008-11-18 19:30:22