ファイルに対する実行権限があるにもかかわらず、ファイルを実行することはできません。

ファイルに対する実行権限があるにもかかわらず、ファイルを実行することはできません。

私はファイル権限のいくつかの側面を明らかに誤解しました。

DrupalインストールでLinuxシステム上のファイルg++にコンパイルされたバイナリを実行しようとしています。/var/www/html/modules

uname -a
Linux <redacted> 3.10.0-1160.6.1.el7.x86_64 #1 SMP Tue Nov 17 13:59:11 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

ディレクトリls -alから実行すると、ファイルに対するフルアクセス権があることがわかります(user)。modulesapache

whoami
apache

pwd
/var/www/html/modules

ls -al
total 108
drwxrwxrwx. 42 apache apache  4096 May  8 17:03 .
drwxrwxrwx.  9 apache apache  4096 May  8 16:49 ..
. . .
-rwxrwxrwx.  1 apache apache 46016 May  8 16:38 my_binary

cd ../..
ls -al
total 8
drwxr-xr-x.  4 root   root     33 Dec  3 10:31 .
drwxr-xr-x. 21 root   root   4096 Dec 11 18:49 ..
drwxr-xr-x.  2 root   root      6 Nov 16 16:19 cgi-bin
drwxrwxrwx.  9 apache apache 4096 May  8 16:49 html

リリース情報は次のとおりです。

cat /proc/version
Linux version 3.10.0-1160.6.1.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Tue Nov 17 13:59:11 UTC 2020

完全性のために、以下はfileファイルを実行します。

file my_binary
my_binary: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), BuildID[sha1]=e7fb75e11b7234dc1129e9502304fcc7440fd788, for GNU/Linux 3.2.0, not stripped

そして確認すると、mount | grep noexec現在のディレクトリが結果に表示されないようです。

mount | grep noexec
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,seclabel,gid=5,mode=620,ptmxmode=000)
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime,seclabel)
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,seclabel,mode=755)
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd)
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event)
cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory)
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuacct,cpu)
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_prio,net_cls)
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio)
cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb)
cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids)
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset)
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices)
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)

そしてコメントで提案したように、結果は次のようになりますcat /proc/mounts | grep noexec

cat /proc/mounts | grep noexec
devpts /dev/pts devpts rw,seclabel,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
sysfs /sys sysfs rw,seclabel,nosuid,nodev,noexec,relatime 0 0
securityfs /sys/kernel/security securityfs rw,nosuid,nodev,noexec,relatime 0 0
tmpfs /sys/fs/cgroup tmpfs ro,seclabel,nosuid,nodev,noexec,mode=755 0 0
cgroup /sys/fs/cgroup/systemd cgroup rw,seclabel,nosuid,nodev,noexec,relatime,xattr,release_agent=/usr/lib/systemd/systemd-cgroups-agent,name=systemd 0 0
cgroup /sys/fs/cgroup/perf_event cgroup rw,seclabel,nosuid,nodev,noexec,relatime,perf_event 0 0
cgroup /sys/fs/cgroup/memory cgroup rw,seclabel,nosuid,nodev,noexec,relatime,memory 0 0
cgroup /sys/fs/cgroup/cpu,cpuacct cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuacct,cpu 0 0
cgroup /sys/fs/cgroup/net_cls,net_prio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,net_prio,net_cls 0 0
cgroup /sys/fs/cgroup/blkio cgroup rw,seclabel,nosuid,nodev,noexec,relatime,blkio 0 0
cgroup /sys/fs/cgroup/hugetlb cgroup rw,seclabel,nosuid,nodev,noexec,relatime,hugetlb 0 0
cgroup /sys/fs/cgroup/pids cgroup rw,seclabel,nosuid,nodev,noexec,relatime,pids 0 0
cgroup /sys/fs/cgroup/freezer cgroup rw,seclabel,nosuid,nodev,noexec,relatime,freezer 0 0
cgroup /sys/fs/cgroup/cpuset cgroup rw,seclabel,nosuid,nodev,noexec,relatime,cpuset 0 0
cgroup /sys/fs/cgroup/devices cgroup rw,seclabel,nosuid,nodev,noexec,relatime,devices 0 0
pstore /sys/fs/pstore pstore rw,nosuid,nodev,noexec,relatime 0 0

それでもファイルを実行しようとすると、権限エラーが発生します。

./my_binary
bash: line 84: ./my_binary: Permission denied

ここで問題は何ですか?または、権限問題の原因をさらに診断するにはどうすればよいですか?


私は(簡単な)Hack the Boxチャレンジを実行しながら、この問題に直面したと言うべき義務感を感じます。しかし、私は挑戦を通して学んでおり、これが私が本当に学びたい障害物です。

ベストアンサー1

ありがとうございました @Stéphane Chazelasに感謝します。答えを見つけたようです。

を実行すると、sestatus次のようになります。

SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          error (Permission denied)
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

したがって、追加の保護装置があります。次に、ls -alZファイルに適用された selinux ポリシーを表示するために実行すると、次のようになります。

ls -alZ
drwxrwxrwx. apache apache system_u:object_r:httpd_sys_rw_content_t:s0 .
drwxr-xr-x. root   root   system_u:object_r:httpd_sys_content_t:s0 ..
. . .
drwxrwxrwx. apache apache unconfined_u:object_r:httpd_sys_rw_content_t:s0 modules

私はこれがhttpd_sys_rw_content_tファイルを読み書きすることしか許されないことを意味すると思います。ファイル権限とは何の関係もありません。したがって、この制限を解決する方法を見つける必要があります(または完全に間違った方向に行きます)。

おすすめ記事