permissão negada em scripts em ~ / bin

2

Eu defini alguns locais adicionais para a variável de ambiente PATH no meu ~/.bashrc , para que eles sejam incluídos / originados em logins e scripts não interativos agendados com cron .

Tenho notado que em um sistema o PATH é modificado corretamente, mas nenhum dos scripts dentro dele será executado, apesar de a propriedade e as permissões serem definidas corretamente (até onde eu sei).

$ 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

O conteúdo de um dos meus scripts, que sincroniza um diretório para meu NAS para fazer o backup:

$ cat ~/bin/rsync.work 
#!/bin/bash
source ~/.keychain/$HOSTNAME-sh
/usr/bin/rsync -avz /mnt/work/*  readynas:~/work/.

que falha ao ser executado quando chamado:

$ rsync.work
bash: /home/slackline/bin/rsync.work: Permission denied

mas funciona quando precedido por 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

Meu ~/.bashrc tem a seguinte linha.

$ grep PATH ~/.bashrc
# Additions to system PATH
PATH="/home/slackline/bin:$PATH:/usr/local/stata/:/usr/local/stattransfer/"
export PATH

E eu posso executar o comando rsync na linha de comando (por isso não é um caso de permissão negada na conexão 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

(Backup está obviamente atualizado). A versão do Bash instalada é:

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

As permissões no diretório (e sua estrutura) são:

$ 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

E um strace mostra

$ 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

Eu não posso descobrir o que está errado aqui e ficaria grato por quaisquer pensamentos / idéias sobre como solucionar isso.

EDIT: Arrumei as várias edições feitas em resposta a perguntas que esperamos ler com um pouco mais de coerência e tornar mais fácil seguir o que eu tentei e como isso se encaixa com a solução de Mark Plotnick.

    
por slackline 01.01.2014 / 14:11

1 resposta

4

Você mencionou nos comentários que o sistema de arquivos do seu diretório home está montado com a opção users mount.

$ grep home /etc/fstab
LABEL=home /home ext4 noatime,users 0 4 –

A opção users mount implica em noexec . Do monte (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).
    
por 01.01.2014 / 17:36