web-dev-qa-db-ja.com

sudoerファイル特定のユーザーに特定のファイルのみへのフルアクセスを与える方法

ユーザーに特定のファイルのみへのフルアクセスを許可したいのですが、誰かにその方法を教えてもらえますか?たとえば、ユーザーに特定のファイルへのアクセスのみを許可するようにsudoerファイルを変更したいとします。ありがとう。

7
user270811

これは通常、グループを使用して行われます。

所有

ファイルには、ユーザーとグループという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をセカンダリ(-Gbarグループは次のように行われます:

$ usermod -G bar -a foo

これで、次回ユーザーfooがログインしたときに、そのユーザーのグループが更新されます。 idコマンド( Linux id / FreeBSD id :かなり標準)を使用して、グループメンバーシップを調べます。

$ id
uid=1000(foo) gid=1000(foo) groups=1000(foo),1001(bar)
4
Kenney

アクセス制御リストを使用してそれを行うことができます:

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--

特定のユーザーに対して、所有者ユーザー、所有者グループ、およびその他の権限とは異なるこのファイルへの権限を持つ例外が宣言されていることがわかります。

私はあなたがあなたの問題をすぐに解決してくれることを願っています:)

3
M0εiπ

参考として、man Sudoman 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

ユーザーtheusernameSudoグループに追加する必要がある場合があります。詳細については、他の回答を参照してください。

[〜#〜]更新[〜#〜]

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

22775setgidビットです。これにより、そのディレクトリで作成されたファイルがディレクトリのグループによって確実に所有されます。ルートとして実行する場合、これは実際には必要ありませんが、便利な場合があります。

これで、アプリケーションはこれを実行できます。

// 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"
);
1
Kenney