sla*_*ine 2 scripting permissions executable
我PATH在我的环境变量中设置了一些额外的位置,~/.bashrc以便这些位置包含/来源在登录和非交互式脚本中,这些脚本使用cron.
我注意到虽然在一个系统上PATH正确修改了,但是尽管所有权和权限设置正确,但其中的任何脚本都不会运行(据我所知)。
$ ls -l
total 756
-rw-r-xr-x 1 slackline slackline 300 Sep 6 07:35 backup
-rwxr-xr-x 1 slackline slackline 978 Dec 30 10:28 bbc_mpd
-rwxr-xr-x 1 slackline slackline 355483 Nov 29 07:31 get_iplayer
-rwxr-xr-x 1 slackline slackline 110 Sep 6 07:35 rsync.albums
-rwxr-xr-x 1 slackline slackline 114 Sep 6 07:35 rsync.climbing
-rwxr-xr-x 1 slackline slackline 108 Sep 6 07:35 rsync.films
-rwxr-xr-x 1 slackline slackline 125 Sep 6 07:35 rsync.mixes
-rwxr-xr-x 1 slackline slackline 117 Sep 6 07:35 rsync.pics
-rwxr-xr-x 1 slackline slackline 117 Sep 6 07:35 rsync.torrents
-rwxr-xr-x 1 slackline slackline 95 Sep 6 07:35 rsync.work
Run Code Online (Sandbox Code Playgroud)
我的一个脚本的内容,它将目录同步到我的 NAS 以进行备份:
$ cat ~/bin/rsync.work
#!/bin/bash
source ~/.keychain/$HOSTNAME-sh
/usr/bin/rsync -avz /mnt/work/* readynas:~/work/.
Run Code Online (Sandbox Code Playgroud)
调用时无法运行:
$ rsync.work
bash: /home/slackline/bin/rsync.work: Permission denied
Run Code Online (Sandbox Code Playgroud)
但在前面时有效bash -x:
$ bash -x /home/slackline/bin/rsync.work
+ source /home/slackline/.keychain/kimura-sh
++ SSH_AUTH_SOCK=/tmp/ssh-P3GL1A3Juwhe/agent.4209
++ export SSH_AUTH_SOCK
++ SSH_AGENT_PID=4210
++ export SSH_AGENT_PID
+ /usr/bin/rsync -avz /mnt/work/android /mnt/work/arch /mnt/work/classes /mnt/work/doc /mnt/work/linux /mnt/work/lost+found /mnt/work/nc151.tar /mnt/work/nc152now-11.rar /mnt/work/personal /mnt/work/ref /mnt/work/scharr 'readynas:~/work/.'
sending incremental file list
sent 1,176,907 bytes received 19,786 bytes 30,296.03 bytes/sec
total size is 27,852,538,230 speedup is 23,274.59
$ set -x ; ~/bin/rsync.work ; set +x
+ /home/slackline/bin/rsync.work
bash: /home/slackline/bin/rsync.work: Permission denied
+ set +x
$ set -x ; bash -x ~/bin/rsync.work ; set +x
+ bash -x /home/slackline/bin/rsync.work
+ source /home/slackline/.keychain/kimura-sh
++ SSH_AUTH_SOCK=/tmp/ssh-P3GL1A3Juwhe/agent.4209
++ export SSH_AUTH_SOCK
++ SSH_AGENT_PID=4210
++ export SSH_AGENT_PID
+ /usr/bin/rsync -avz /mnt/work/android /mnt/work/arch /mnt/work/classes /mnt/work/doc /mnt/work/linux /mnt/work/lost+found /mnt/work/nc151.tar /mnt/work/nc152now-11.rar /mnt/work/personal /mnt/work/ref /mnt/work/scharr 'readynas:~/work/.'
sending incremental file list
sent 1,174,755 bytes received 19,786 bytes 39,165.28 bytes/sec
total size is 27,852,538,230 speedup is 23,316.52
+ set +x
Run Code Online (Sandbox Code Playgroud)
我的里面~/.bashrc有以下几行。
$ grep PATH ~/.bashrc
# Additions to system PATH
PATH="/home/slackline/bin:$PATH:/usr/local/stata/:/usr/local/stattransfer/"
export PATH
Run Code Online (Sandbox Code Playgroud)
而且我可以rsync自己在命令行上运行该命令(所以这不是 SSH 连接上的权限被拒绝的情况)。
$ /usr/bin/rsync -avz /mnt/work/* readynas:~/work/.
sending incremental file list
sent 1,176,723 bytes received 19,786 bytes 32,781.07 bytes/sec
total size is 27,852,538,230 speedup is 23,278.17
Run Code Online (Sandbox Code Playgroud)
(备份显然是最新的)。安装的 Bash 版本是:
$ eix -Ic bash
[I] app-admin/eselect-bashcomp (1.3.6@08/29/13): Manage contributed bash-completion scripts
[I] app-shells/bash (4.2_p45@08/16/13): The standard GNU Bourne again shell
[I] app-shells/bash-completion (2.1@08/28/13): Programmable Completion for bash
[I] app-shells/gentoo-bashcomp (20121024@08/28/13): Gentoo-specific bash command-line completions (emerge, ebuild, equery, repoman, layman, etc)
Found 4 matches.
Run Code Online (Sandbox Code Playgroud)
目录(及其结构)的权限是:
$ ls -l ~/ | grep bin
drwxr-xr-x 2 slackline slackline 4096 Dec 30 10:29 bin
$ stat -c"%n (%U) %a" / /home /home/slackline /home/slackline/bin
/ (root) 755
/home (root) 755
/home/slackline (slackline) 755
/home/slackline/bin (slackline) 755
Run Code Online (Sandbox Code Playgroud)
还有一个strace节目
$ strace rsync.work
strace: Can't stat 'rsync.work': No such file or directory
$ echo $PATH
/home/slackline/bin:~/bin:/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.8.2:/usr/games/bin:/usr/local/stata/:/usr/local/stattransfer/:/usr/local/stata/:/usr/local/stattransfer/
$ ls -l ~/bin/ | grep work
-rwxr-xr-x 1 slackline slackline 95 Sep 6 07:35 rsync.work
$ rsync.work
bash: /home/slackline/bin/rsync.work: Permission denied
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚这里出了什么问题,如果有任何关于如何解决这个问题的想法/想法,我将不胜感激。
编辑:整理了针对问题所做的各种编辑,希望能够更连贯地阅读,并使我更容易理解我尝试过的内容以及它如何与 Mark Plotnick 的解决方案相适应。
您在评论中提到您的主目录的文件系统是使用users挂载选项挂载的。
$ grep home /etc/fstab
LABEL=home /home ext4 noatime,users 0 4 –
Run Code Online (Sandbox Code Playgroud)
该users挂载选项表明noexec。从安装(8):
users Allow every user to mount and unmount the filesystem.
This option implies the options noexec, nosuid, and nodev (unless
overridden by subsequent options, as in the option line
users,exec,dev,suid).
Run Code Online (Sandbox Code Playgroud)