ファイルとディレクトリの両方に対して数値的な方法で作業するアプローチを明確にするために、いくつかの点を追加したいと思います.
- ユーザー/グループ/その他のいずれかに個別の特別な権限を追加する。
chmod "X"755 file
ここで、X は特別なアクセス許可の特定の 8 進数モードです。
- 一度に複数の特別な権限を追加したい場合。 suid(4) と sgid(2) の両方、つまり 4+2=6 .
chmod "6"755 file
suid(4)、sgid(2)、sticky bit(1) の場合、つまり 4+2+1=7
chmod "7"755 file
- すべての特別なアクセス許可を削除する (ファイルにのみ適用可能)
chmod 00"0"755 file
4 桁の前の末尾のゼロは、ファイルのアクセス許可を変更するときに値を追加しませんが、ディレクトリのアクセス許可を変更するときに値を追加します。
上記の数値コードは、ファイルに対してのみアクセス許可を 7755 から 755 に変更しますが、ディレクトリに対して同じことを行うと、他のファイルのスティッキー ビットのみが削除されるため、6755 になります。
ディレクトリのすべての特別な権限を削除します。
chmod "000"755 file
- 同様に、suid パーミッションを削除し、sgid(2) と sticky bit(1) を持つ場合、つまり 2+1=3 .
chmod 00"3"755 file
また、文字 (r、w、x、X、s、、t) と演算子 (+/-) を使用したソリューションは、以前の回答で既に議論され、承認されています。
関連:「数値モードでビットを設定できます(ただしクリアはできません)」
RHEL 7 chmod 0644 $filename では、setuid(4)、setgid(2)、または sticky(1) が削除されませんでした。
ただし、前に余分な 0 を付けるとうまくいきました:
chmod 00644 $filename
+
を変更します -
に許可を追加するため 削除するには:
sudo chmod g-s filename
これをプログラムで行いたい場合は、いくつかのビット演算子を使用する必要があります。通常は
mode_without_suid = bitwise_and(existing_mode, bitwise_not(S_ISUID))
どこで S_ISUID
0o4000 は、通常の rwx
より上のモード ビットを使用する定数です。 0644
のようなもの .
たとえば、Python では
import os
import stat
def mode_details(m):
return f"mode={oct(m)} = {stat.filemode(m)}"
mode = os.stat('foo').st_mode
print("old mode", mode_details(mode))
new_mode = mode & ~stat.S_ISUID
os.chmod('foo', new_mode)
print("new mode", mode_details(new_mode))
old mode mode=0o104654 = -rwSr-xr--
new mode mode=0o100654 = -rw-r-xr--
コマンドが
である数値の方法で setgid を削除するにはsudo chmod 0664 $ファイル名
ここでは、ファイルのパーミッションが 664 であり、変更していないことを前提としています。上記のコマンドの左端のビットは setuid(4 ),setgid(2 ) とスティッキー (1 )。これらの setuid を象徴的に表すのは u+s です 、setgid は g+s です スティッキーは o+t です
例 1:-chmod u+s filename これは、rws である言及されたファイル名の uid を設定します。 r_xr_x
例 2:chmod 2770 directoryこれは、rwxr_s である前述のディレクトリの gid を設定します r_x