Как позволить членам группы изменять полномочия файла на Linux

Можно установить Tomcat 6 для выполнения под jsvc как пользовательский кот (не как корень). Вот то, что я сделал в прошлый раз, когда я настроил его:

Я установил приложение Tomcat под /usr/java/tomcat (CATALINA_HOME) и экземпляр под /var/lib/tomcat (CATALINA_BASE):

cd /usr/java
sudo tar xzvf ~/downloads/apache-tomcat-6.0.18.tar.gz
sudo ln -s apache-tomcat-6.0.18 tomcat
sudo /usr/sbin/useradd -d /var/lib/tomcat -c "Apache Tomcat" -m -s /sbin/nologin tomcat
cd /var/lib/tomcat
sudo mkdir logs work temp
sudo chown tomcat:tomcat logs temp work
(cd /usr/java/tomcat && sudo tar cvf - conf webapps) | sudo tar xvf -
sudo chmod -R g+rw webapps conf
sudo chown -R tomcat:tomcat webapps conf
cd webapps/
sudo rm -rf docs examples manager host-manager
cd ../conf
sudo chmod g+r *

Затем я создал jsvc обертка:

cd
tar xzvf downloads/apache-tomcat-6.0.18.tar.gz
tar xzvf apache-tomcat-6.0.18/bin/jsvc.tar.gz
cd jsvc-src
chmod +x configure
./configure --with-java=$JAVA_HOME
make
./jsvc --help
sudo cp jsvc /usr/local/sbin/ 

Наконец, я сжал полномочия на каталогах экземпляра:

cd /var/lib/tomcat
sudo chmod -R 0700 conf
sudo chmod -R 0750 logs
sudo chmod -R 0700 temp
sudo chmod -R 0700 work
sudo chmod -R 0770 webapps/
sudo chown -R tomcat:tomcat conf
sudo chown -R tomcat:tomcat logs

При выполнении Tomcat теперь необходимо будет запустить его использование jsvc, поэтому добавьте этот сценарий как /etc/init.d/tomcat и символьная ссылка это соответственно:

#!/bin/sh
#
# tomcat       Startup script for the Apache Tomcat Server running under jsvc
#
# chkconfig: 345 85 15
# description: Apache Tomcat
# pidfile: /var/run/jsvc.pid

JAVA_HOME=/usr/java/jdk1.6.0_13
CATALINA_HOME=/usr/java/apache-tomcat-6.0.18
CATALINA_BASE=/var/lib/tomcat
JAVA_OPTS="-Djava.awt.headless=true"
JMX_OPTS="-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"

DAEMON_APP=/usr/local/sbin/jsvc
TOMCAT_USER=tomcat

# Everything below should be okay
PID_FILE=/var/run/jsvc.pid
LOCK_FILE=/var/lock/tomcat

PATH=/sbin:/bin:/usr/bin
. /lib/init/vars.sh

. /lib/lsb/init-functions

[ -x $JAVA_HOME/bin/java ] || exit 0
[ -x $DAEMON_APP ] || exit 0
[ -d $CATALINA_HOME/bin ] || exit 0
[ -d $CATALINA_BASE ] || exit 0

RETVAL=0
prog="jsvc"

CLASSPATH=\
$JAVA_HOME/lib/tools.jar:\
$CATALINA_HOME/bin/commons-daemon.jar:\
$CATALINA_HOME/bin/bootstrap.jar

start() {
  # Start Tomcat
  log_daemon_msg "Starting Apache Tomcat"
  $DAEMON_APP \
    -user $TOMCAT_USER \
    -home $JAVA_HOME \
    -wait 10 \
    -pidfile $PID_FILE \
    -outfile $CATALINA_BASE/logs/catalina.out \
    -errfile $CATALINA_BASE/logs/catalina.out \
    $JAVA_OPTS $JMX_OPTS \
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
    -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties \
    -Dcatalina.home=$CATALINA_HOME \
    -Dcatalina.base=$CATALINA_BASE \
    -Djava.io.tmpdir=$CATALINA_BASE/temp \
    -cp $CLASSPATH \
    org.apache.catalina.startup.Bootstrap start 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    touch $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

stop() {
  # Stop tomcat
  log_daemon_msg "Stopping Apache Tomcat"
  $DAEMON_APP \
    -stop \
    -pidfile $PID_FILE \
    org.apache.catalina.startup.Bootstrap 2>/dev/null 1>&2
  RETVAL=$?
  if [ 0 -eq $RETVAL ]; then
    rm -rf $LOCK_FILE
    log_end_msg 0
  else
    log_end_msg 1
  fi
}

restart() {
  stop
  sleep 5
  start
}

# See how we were called.
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  status)
    status $prog
    ;;
  condrestart)
    [ -f $LOCK_FILE ] && restart || :
    ;;
  *)
    log_action_msg "Usage: $0 {start|stop|restart|status|condrestart}"
    exit 1
esac

exit $?
11
задан 25 March 2010 в 21:25
3 ответа

Только владельцу файла или корня разрешают изменить полномочия в Linux (доступ для записи! = доступ изменения разрешения)

Единственным путем я могу думать, использует sudo. Я не знаю, добилось ли это цели, и я был бы чрезвычайно осторожен относительно того, как Вы указываете правила sudo так, чтобы у пользователей не было дополнительных полномочий.

Обратите внимание, что, если они соединяются, использование FTP-сервера, sudo, вероятно, не будет ответ.

8
ответ дан 2 December 2019 в 21:52

Просто дайте полномочия записи 'ftpusers' и владение на том каталоге:

chgrp ftpusers <directory>
chmod g+rwx <directory>

И затем набор, GID укусил так все новые файлы, наследовал владение группы:

chmod g+s <directory>
1
ответ дан 2 December 2019 в 21:52
  • 1
    Это было моей мыслью точно, но этим doesn' t работа, я получаю ' Операция не permitted' если я пытаюсь изменить что-нибудь –  Drasko 25 March 2010 в 20:46
  • 2
    Каковы текущие полномочия? –  Vitaliy 25 March 2010 в 21:04
  • 3
    10:20 drwxrwxr-x 9 drasko ftpgroup 4096 2010-03-25 dirname –  Drasko 25 March 2010 в 21:31

Одним решением (который я должен был использовать) является прохождение через задания крона и изменение полномочий указанного каталога и файлов под ним. Не симпатичный, но это работает.

Если Вы хотите расширить способность пользователей изменить это, Вы могли бы рассмотреть разрешение пользователей от ftpgroup позволить chmod в рамках указанного каталога с соответствующим правилом с помощью sudo.

Или можно сделать сценарий оболочки, который делает соответствующие проверки и делает функцию и делает ту программу позволенной быть выполненным через sudo. Я не предлагаю, ни рекомендую сценарий оболочки набора-uid.

2
ответ дан 2 December 2019 в 21:52

Теги

Похожие вопросы