ユーザーに特定のファイルのみへのフルアクセスを許可したいのですが、誰かにその方法を教えてもらえますか?たとえば、ユーザーに特定のファイルへのアクセスのみを許可するようにsudoerファイルを変更したいとします。ありがとう。
これは通常、グループを使用して行われます。
ファイルには、ユーザーとグループという2つの所有者がいます。例えば:
$ ls -l file1.txt
-rw-rw-r-- 1 foo foo 6 Nov 9 15:37 file1.txt
ここでは、ユーザーとグループはどちらもfoo
です。
chown を使用してファイルの所有権を変更できます。リンクはLinuxのマンページにリンクしていますが、chown
はかなり標準的であるため、おそらく機能します。不明な場合は、OSのマニュアルを参照してください(man chown
)。
たとえば、グループをbar
に変更します。
$ chown :bar file1.txt
$ ls -l file1.txt
-rw-rw-r-- 1 foo bar 6 Nov 9 15:37 file1.txt
bar
グループが存在する必要があることに注意してください。さらに下に、新しいグループを追加する方法を示します。
権限は次のとおりです。
-rw-rw-r--
Tuuugggooo
ここで、T
はタイプです。通常のファイルの場合、これは-
、ディレクトリの場合d
、シンボリックリンクの場合l
など.uuu
はユーザー権限です:rw-
: 読み書き。 ggg
グループ権限もrw-
。他の全員(ooo
)はr--
、または読み取り専用アクセス。
chmod を使用してアクセス許可を変更できます(これもLinuxのマンページですが、chmodはかなり標準的です)。ファイルからグループbar
の書き込み権限を削除する場合は、次のようにします。
$ chmod g-w file1.txt
$ ls -l file1.txt
-rw-r--r-- 1 foo bar 6 Nov 9 15:37 file1.txt
一部のファイルへのアクセスを管理するためのグループを追加できます。これがどのように行われるかはプラットフォームに依存します。 Linuxには addgroup があります:
addgroup bar
FreeBSDには pw があります。使用する正しいコマンドについては、オペレーティングシステムのマニュアルを確認してください。
これもプラットフォームに依存します。 FreeBSDの場合、上記のpw
コマンドがこれを処理します。 Linuxの場合、これは sermod です。
ユーザーには通常、プライマリ(または初期)グループとセカンダリ(または補足)グループがあります。プライマリグループは、新しいファイルが作成されるときに使用されます。
Linuxの場合、(-a
)ユーザーfoo
をセカンダリ(-G
)bar
グループは次のように行われます:
$ usermod -G bar -a foo
これで、次回ユーザーfoo
がログインしたときに、そのユーザーのグループが更新されます。 id
コマンド( Linux id / FreeBSD id :かなり標準)を使用して、グループメンバーシップを調べます。
$ id
uid=1000(foo) gid=1000(foo) groups=1000(foo),1001(bar)
アクセス制御リストを使用してそれを行うことができます:
1)最初に、そのファイルのACLを確認します。
getfacl PATH/files
出力は次のようになります。
# file: PATH/file
# owner: root
# group: root
user::rw-
group::r--
other::r--
2)特定のユーザーにフルアクセス許可を設定するために、ファイルのACLを設定します。
setfacl -m u:USERNAME:rwx PATH/file
3)ファイルで「ls -l」コマンドを実行すると、出力にプラス(+)記号が追加されます。
-rw-rwxr--+ 1 root root 0 Nov 10 20:12 file
4)ファイルのACLを再度取得して変更を確認します(コマンドはステップ1と同じです)。出力は次のようになります。
# file: file
# owner: root
# group: root
user::rw-
user:USERNAME:rwx
group::r--
mask::rwx
other::r--
特定のユーザーに対して、所有者ユーザー、所有者グループ、およびその他の権限とは異なるこのファイルへの権限を持つ例外が宣言されていることがわかります。
私はあなたがあなたの問題をすぐに解決してくれることを願っています:)
参考として、man Sudo
、man sudoers
などを確認してください。
以下は、sudoersファイルを構成してSYSV Linuxサービススクリプトをrootとして実行する方法のLinux専用の例です。
ユーザーのsudoersファイルを編集/作成します(theusername
を使用します):
visudo /etc/sudoers.d/theusername
フォーマットは
# <user list> <Host list> = <operator list> <tag list> <command list>
次の行を追加します。
theusername ALL = (root:root) NOPASSWD: /usr/sbin/service
ユーザーtheusername
をSudo
グループに追加する必要がある場合があります。詳細については、他の回答を参照してください。
[〜#〜]更新[〜#〜]
OPは(コメント経由で)これを実行したいと考えています。
ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
"/bin/sh", "-c",
"echo " + PUB_PASSWORD +
"| Sudo -S bash -c \"cp -f " + ntp_conf_file_temp + " " + ntp_conf_file +
"; service ntp reload\"" );
Rootが所有していると想定するntp_conf_file
を上書きできるようにするには、ファイルの権限を設定する必要があります。詳細については、他の回答を参照してください。ただし、これは/etc/ntp-update.sh
に配置されたスクリプトを使用した代替ソリューションです。
#!/bin/bash
/bin/cp /etc/managed-ntp/temp.conf /etc/ntpd/ntp.conf
/usr/sbin/service ntp reload
ご覧のとおり、ファイルパスはセキュリティのためにハーコード化されています。
これを設定するには、ユーザーがsudoersファイルを編集して、このスクリプトをrootとして実行するためのアクセス権を付与します。
theusername ALL = (root:root) NOPASSWD: /etc/ntp-update.sh
そしてディレクトリを作成します:
mkdir /etc/managed-ntp
chmod 2775 /etc/managed-ntp
chown theusername:theusergroup /etc/managed-ntp
2
の2775
はsetgid
ビットです。これにより、そのディレクトリで作成されたファイルがディレクトリのグループによって確実に所有されます。ルートとして実行する場合、これは実際には必要ありませんが、便利な場合があります。
これで、アプリケーションはこれを実行できます。
// Make sure you write ntp_conf_file_tmp in /etc/managed-ntp/temp.conf!
ProcessBuilder ntpProcessBuilder = new ProcessBuilder(
"/usr/bin/Sudo", "/etc/ntp-update.sh"
);